From 833d5a2710083c5d1da9e76383534968fbcf82b5 Mon Sep 17 00:00:00 2001 From: Adrian L Lange Date: Wed, 8 Aug 2012 03:50:11 +0200 Subject: [PATCH] Use proper API instead of saving between sessions --- oUF_Friendship.lua | 187 +++++++++++++++++++++++++--------------------------- oUF_Friendship.toc | 1 - 2 files changed, 89 insertions(+), 99 deletions(-) diff --git a/oUF_Friendship.lua b/oUF_Friendship.lua index 65a1fa8..f89e89c 100644 --- a/oUF_Friendship.lua +++ b/oUF_Friendship.lua @@ -1,98 +1,89 @@ -local _, ns = ... -local oUF = ns.oUF or oUF -assert(oUF, 'oUF Friendship was unable to locate oUF install') - -local function GetNPCID() - local GUID = UnitGUID('target') or '' - return tonumber(string.sub(GUID, -12, -9), 16) -end - -local function OnEnter(self) - local cache = oUF_FriendshipCache[GetNPCID()] - GameTooltip:SetOwner(self, 'ANCHOR_BOTTOMRIGHT') - GameTooltip:SetText(cache.name, 1, 1, 1) - GameTooltip:AddLine(cache.details, nil, nil, nil, true) - GameTooltip:AddLine(cache.standing .. ' / 42999', 1, 1, 1, true) - GameTooltip:Show() -end - -local function Update(self, event) - if(not UnitExists('target')) then return end - local _, standing, details, id -- 'id' is temporary - - local cache = oUF_FriendshipCache[GetNPCID()] - if(event == 'GOSSIP_SHOW') then - id, standing, _, details = GetFriendshipReputation() - if(not id) then return end - - if(cache) then - cache.standing = standing - cache.details = details -- Not sure if this ever changes - else - oUF_FriendshipCache[GetNPCID()] = { - standing = standing, - details = details, - name = UnitName('npc'), - - id = id, -- Temporary tracking - } - end - elseif(cache) then - standing = cache.standing - end - - local friendship = self.Friendship - if(standing ~= nil) then - friendship:SetMinMaxValues(0, 42999) -- Max value doesn't seem to change - friendship:SetValue(standing) - friendship:Show() - else - friendship:Hide() - end - - if(friendship.PostUpdate) then - return friendship:PostUpdate(standing) - end -end - -local function Path(self, ...) - return (self.Friendship.Override or Update) (self, ...) -end - -local function ForceUpdate(element) - return Path(element.__owner, 'ForceUpdate') -end - -local function Enable(self, unit) - local friendship = self.Friendship - if(friendship) then - friendship.__owner = self - friendship.ForceUpdate = ForceUpdate - - self:RegisterEvent('GOSSIP_SHOW', Path) - self:RegisterEvent('PLAYER_TARGET_CHANGED', Path) - - if(friendship.Tooltip) then - friendship:EnableMouse(true) - friendship:HookScript('OnEnter', OnEnter) - friendship:HookScript('OnLeave', GameTooltip_Hide) - end - - oUF_FriendshipCache = oUF_FriendshipCache or {} - - if(not friendship:GetStatusBarTexture()) then - friendship:SetStatusBarTexture([=[Interface\TargetingFrame\UI-StatusBar]=]) - end - - return true - end -end - -local function Disable(self) - if(self.Friendship) then - self:UnregisterEvent('GOSSIP_SHOW', Path) - self:UnregisterEvent('PLAYER_TARGET_CHANGED', Path) - end -end - -oUF:AddElement('Friendship', Path, Enable, Disable) +local _, ns = ... +local oUF = ns.oUF or oUF +assert(oUF, 'oUF Friendship was unable to locate oUF install') + +-- This is not a final list, if you find an npc with reputation, +-- please let me (p3lim) know by PM/comment on the download site. +-- Will be generated properly if Wowhead adds filters for it. +local friendships = { + [GetFactionInfoByID(1278)] = 1278, + [GetFactionInfoByID(1273)] = 1273, + [GetFactionInfoByID(1282)] = 1282, + [GetFactionInfoByID(1276)] = 1276, + [GetFactionInfoByID(1358)] = 1358, + [GetFactionInfoByID(1279)] = 1279, + [GetFactionInfoByID(1281)] = 1281, + [GetFactionInfoByID(1283)] = 1283, +} + +local function GetFriendshipID() + if(not UnitExists('target')) then return end + if(UnitIsPlayer('target')) then return end + + return friendships[UnitName('target')] +end + +local function OnEnter(self) + local _, cur, _, details = GetFriendshipReputationByID(GetFriendshipID()) + GameTooltip:SetOwner(self, 'ANCHOR_BOTTOMRIGHT') + GameTooltip:SetText(UnitName('target'), 1, 1, 1) + GameTooltip:AddLine(details, nil, nil, nil, true) + GameTooltip:AddLine(standing .. ' / 42999', 1, 1, 1, true) + GameTooltip:Show() +end + +local function Update(self) + local friendship = self.Friendship + + local id = GetFriendshipID() + if(id) then + local _, cur = GetFriendshipReputationByID(id) + friendship:SetMinMaxValues(0, 42999) + friendship:SetValue(cur) + friendship:Show() + else + friendship:Hide() + end + + if(friendship.PostUpdate) then + return friendship:PostUpdate(id) + end +end + +local function Path(self, ...) + return (self.Friendship.Override or Update) (self, ...) +end + +local function ForceUpdate(element) + return Path(element.__owner, 'ForceUpdate') +end + +local function Enable(self, unit) + local friendship = self.Friendship + if(friendship) then + friendship.__owner = self + friendship.ForceUpdate = ForceUpdate + + self:RegisterEvent('PLAYER_TARGET_CHANGED', Path) + + if(friendship.Tooltip) then + friendship:EnableMouse(true) + friendship:HookScript('OnEnter', OnEnter) + friendship:HookScript('OnLeave', GameTooltip_Hide) + end + + if(not friendship:GetStatusBarTexture()) then + friendship:SetStatusBarTexture([=[Interface\TargetingFrame\UI-StatusBar]=]) + end + + return true + end +end + +local function Disable(self) + if(self.Friendship) then + self:UnregisterEvent('PLAYER_TARGET_CHANGED', Path) + end +end + +oUF:AddElement('Friendship', Path, Enable, Disable) diff --git a/oUF_Friendship.toc b/oUF_Friendship.toc index ab663a3..cb7c894 100644 --- a/oUF_Friendship.toc +++ b/oUF_Friendship.toc @@ -4,6 +4,5 @@ ## Title: oUF Friendship ## Notes: NPC Friendship Bar support for oUF layouts. ## RequiredDeps: oUF -## SavedVariablesPerCharacter: oUF_FriendshipCache oUF_Friendship.lua -- 1.7.9.5