Quantcast

Use proper API instead of saving between sessions

Adrian L Lange [08-08-12 - 01:50]
Use proper API instead of saving between sessions
Filename
oUF_Friendship.lua
oUF_Friendship.toc
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