local _, ns = ... local oUF = ns.oUF or oUF assert(oUF, 'oUF Reputation was unable to locate oUF install') for tag, func in pairs({ ['currep'] = function() local _, _, min, _, value, id = GetWatchedFactionInfo() local _, friendRep, _, _, _, _, _, friendThreshold = GetFriendshipReputation(id) if(not friendRep) then return value - min else return friendRep - friendThreshold end end, ['maxrep'] = function() local _, _, min, max, _, id = GetWatchedFactionInfo() local _, _, friendMaxRep, _, _, _, _, friendThreshold = GetFriendshipReputation(id) if(not friendMaxRep) then return max - min else return math.min(friendMaxRep - friendThreshold, 8400) end end, ['perrep'] = function() local _, _, min, max, value_ id = GetWatchedFactionInfo() local _, friendRep, friendMaxRep, _, _, _, _, friendThreshold = GetFriendshipReputation(id) if(not friendRep) then return math.floor((value - min) / (max - min) * 100 + 0.5) else return math.floor((friendRep - friendThreshold) / math.min(friendMaxRep - friendThreshold) * 100 + 0.5) end end, ['standing'] = function() local _, standing, _, _, _, id = GetWatchedFactionInfo() local _, _, _, _, _, _, friendTextLevel = GetFriendshipReputation(id) if(not friendTextLevel) then return GetText('FACTION_STANDING_LABEL' .. standing, UnitSex('player')) else return friendTextLevel end end, ['reputation'] = function() return GetWatchedFactionInfo() end, }) do oUF.Tags.Methods[tag] = func oUF.Tags.Events[tag] = 'UPDATE_FACTION' end oUF.Tags.SharedEvents.UPDATE_FACTION = true local function Update(self, event, unit) local reputation = self.Reputation local name, standing, min, max, value, id = GetWatchedFactionInfo() local _, friendRep, friendMaxRep, _, _, _, friendTextLevel, friendThreshold, nextFriendThreshold = GetFriendshipReputation(id) if(not name) then return reputation:Hide() else reputation:Show() end if(not friendRep) then reputation:SetMinMaxValues(0, max - min) reputation:SetValue(value - min) else reputation:SetMinMaxValues(0, math.min(friendMaxRep - friendThreshold, 8400)) reputation:SetValue(friendRep - friendThreshold) end if(reputation.colorStanding) then local color = FACTION_BAR_COLORS[standing] reputation:SetStatusBarColor(color.r, color.g, color.b) end if(reputation.PostUpdate) then if(not friendRep) then return reputation:PostUpdate(unit, name, standing, min, max, value, id) else return reputation:PostUpdate(unit, name, friendTextLevel, friendThreshold, nextFriendThreshold and nextFriendThreshold or friendMaxRep, friendRep, id) end end end local function Path(self, ...) return (self.Reputation.Override or Update) (self, ...) end local function ForceUpdate(element) return Path(element.__owner, 'ForceUpdate', element.__owner.unit) end local function Enable(self, unit) local reputation = self.Reputation if(reputation) then reputation.__owner = self reputation.ForceUpdate = ForceUpdate self:RegisterEvent('UPDATE_FACTION', Path) if(not reputation:GetStatusBarTexture()) then reputation:SetStatusBarTexture([=[Interface\TargetingFrame\UI-StatusBar]=]) end return true end end local function Disable(self) if(self.Reputation) then self:UnregisterEvent('UPDATE_FACTION', Path) end end oUF:AddElement('Reputation', Path, Enable, Disable)