local SLE, T, E, L, V, P, G = unpack(ElvUI_SLE) local DB = SLE.DataBars local EDB = E.DataBars --GLOBALS: hooksecurefunc local format = format local MAX_PLAYER_LEVEL = MAX_PLAYER_LEVEL or GetMaxLevelForPlayerExpansion() local COMBATLOG_HONORGAIN, COMBATLOG_HONORGAIN_NO_RANK, COMBATLOG_HONORAWARD = COMBATLOG_HONORGAIN, COMBATLOG_HONORGAIN_NO_RANK, COMBATLOG_HONORAWARD local PVP_RANK_0_0 = PVP_RANK_0_0 local UnitHonor, UnitHonorMax = UnitHonor, UnitHonorMax DB.Honor ={ Styles = { STYLE1 = '%s <%s>: +%s|T%s:%s|t', STYLE2 = '%s <%s>: +'..E['media'].hexvaluecolor..'%s|r|T%s:%s|t', STYLE3 = E['media'].hexvaluecolor..'%s|r <%s>: +'..E['media'].hexvaluecolor..'%s|r|T%s:%s|t', STYLE4 = '%s <%s> +%s|T%s:%s|t', STYLE5 = '%s <%s> +'..E['media'].hexvaluecolor..'%s|r|T%s:%s|t', STYLE6 = E['media'].hexvaluecolor..'%s|r <%s> +'..E['media'].hexvaluecolor..'%s|r|T%s:%s|t', STYLE7 = '%s <%s> (%s|T%s:%s|t)', STYLE8 = '%s <%s> ('..E['media'].hexvaluecolor..'%s|r|T%s:%s|t)', STYLE9 = E['media'].hexvaluecolor..'%s|r <%s> ('..E['media'].hexvaluecolor..'%s|r|T%s:%s|t)', }, BonusStyles = { STYLE1 = '%s <%s>: +%s (+%s)|T%s:%s|t', STYLE2 = '%s <%s>: +'..E['media'].hexvaluecolor..'%s|r ('..E['media'].hexvaluecolor..'%s|r)|T%s:%s|t', STYLE3 = E['media'].hexvaluecolor..'%s|r <%s>: +'..E['media'].hexvaluecolor..'%s|r ('..E['media'].hexvaluecolor..'%s|r) |T%s:%s|t', STYLE4 = '%s <%s> +%s (%s)|T%s:%s|t', STYLE5 = '%s <%s> +'..E['media'].hexvaluecolor..'%s|r ('..E['media'].hexvaluecolor..'%s|r)|T%s:%s|t', STYLE6 = E['media'].hexvaluecolor..'%s|r <%s> +'..E['media'].hexvaluecolor..'%s|r ('..E['media'].hexvaluecolor..'%s|r)|T%s:%s|t', STYLE7 = '%s <%s> (%s %s|T%s:%s|t)', STYLE8 = '%s <%s> ('..E['media'].hexvaluecolor..'%s|r '..E['media'].hexvaluecolor..'%s|r|T%s:%s|t)', STYLE9 = E['media'].hexvaluecolor..'%s|r <%s> ('..E['media'].hexvaluecolor..'%s|r'..E['media'].hexvaluecolor..'%s|r|T%s:%s|t)', }, AwardStyles = { STYLE1 = L['Award']..': %s|T%s:%s|t', STYLE2 = L['Award']..': '..E['media'].hexvaluecolor..'%s|r|T%s:%s|t', STYLE3 = '|TInterface\\Icons\\Achievement_PVP_O_15:14:14|t: %s|T%s:%s|t', STYLE4 = '|TInterface\\Icons\\Achievement_PVP_O_15:14:14|t: '..E['media'].hexvaluecolor..'%s|r|T%s:%s|t', STYLE5 = '|TInterface\\Icons\\ACHIEVEMENT_GUILDPERK_MRPOPULARITY_RANK2:14:14|t: %s|T%s:%s|t', STYLE6 = '|TInterface\\Icons\\ACHIEVEMENT_GUILDPERK_MRPOPULARITY_RANK2:14:14|t: '..E['media'].hexvaluecolor..'%s|r|T%s:%s|t', }, Strings = {}, Icon = [[Interface\AddOns\ElvUI_SLE\media\textures\afk\factionlogo\blizzard\]]..E.myfaction, } local function HonorBar_Update(self, event, unit) if not E.db.databars.honor.enable or not E.db.sle.databars.honor.longtext then return end if event == 'HONOR_PRESTIGE_UPDATE' and unit ~= 'player' then return end local bar = EDB.StatusBars.Honor local showHonor = E.mylevel >= MAX_PLAYER_LEVEL if showHonor then local current = UnitHonor('player') local max = UnitHonorMax('player') --Guard against division by zero, which appears to be an issue when zoning in/out of dungeons if max == 0 then max = 1 end local text = '' local textFormat = self.db.honor.textFormat if textFormat == 'PERCENT' then text = format('%d%%', current / max * 100) elseif textFormat == 'CURMAX' then text = format('%s - %s', current, max) elseif textFormat == 'CURPERC' then text = format('%s - %d%%', current, current / max * 100) end if textFormat == 'PERCENT' then text = format('%d%%', current / max * 100) elseif textFormat == 'CURMAX' then text = format('%s - %s', current, max) elseif textFormat == 'CURPERC' then text = format('%s - %d%%', current, current / max * 100) elseif textFormat == 'CUR' then text = format('%s', current) elseif textFormat == 'REM' then text = format('%s', max-current) elseif textFormat == 'CURREM' then text = format('%s - %s', current, max-current) elseif textFormat == 'CURPERCREM' then text = format('%s - %d%% (%s)', current, current / max * 100, max - current) end bar.text:SetText(text) end end local AwardPattern function DB:PopulateHonorStrings() local symbols = {'%(','%%(','%)','%%)','%.','%%.','([-+])','%%%1','|4.-;','.-','%%[sd]','(.-)','%%%d%$[sd]','(.-)'} local pattern pattern = T.rgsub(COMBATLOG_HONORGAIN, unpack(symbols)) tinsert(DB.Honor.Strings, pattern) pattern = T.rgsub(COMBATLOG_HONORGAIN_EXHAUSTION1, unpack(symbols)) tinsert(DB.Honor.Strings, pattern) pattern = T.rgsub(COMBATLOG_HONORGAIN_NO_RANK, unpack(symbols)) tinsert(DB.Honor.Strings, pattern) AwardPattern = T.rgsub(COMBATLOG_HONORAWARD, unpack(symbols)) end function DB:FilterHonor(_, message, ...) local name, rank, honor, bonus if E.db.sle.databars.honor.chatfilter.enable then for i, v in ipairs(DB.Honor.Strings) do name, rank, honor, bonus = strmatch(message,DB.Honor.Strings[i]) if name then if not honor then honor = rank rank = PVP_RANK_0_0 end if bonus then message = format(DB.Honor.BonusStyles[E.db.sle.databars.honor.chatfilter.style or 'STYLE1'], name, rank, honor, bonus, DB.Honor.Icon, E.db.sle.databars.honor.chatfilter.iconsize) else message = format(DB.Honor.Styles[E.db.sle.databars.honor.chatfilter.style or 'STYLE1'], name, rank, honor, DB.Honor.Icon, E.db.sle.databars.honor.chatfilter.iconsize) end return false, message, ... end end end honor = strmatch(message, AwardPattern) if honor then message = format(DB.Honor.AwardStyles[E.db.sle.databars.honor.chatfilter.awardStyle or 'STYLE1'], honor, DB.Honor.Icon, E.db.sle.databars.honor.chatfilter.iconsize) return false, message, ... end end function DB:HonorInit() DB:PopulateHonorStrings() hooksecurefunc(EDB, 'HonorBar_Update', HonorBar_Update) EDB:HonorBar_Update() end