local SLE, T, E, L, V, P, G = unpack(select(2, ...)) local DB = SLE:GetModule("DataBars") --GLOBALS: hooksecurefunc local HasArtifactEquipped = HasArtifactEquipped local MainMenuBar_GetNumArtifactTraitsPurchasableFromXP = MainMenuBar_GetNumArtifactTraitsPurchasableFromXP local C_ArtifactUIGetEquippedArtifactInfo = C_ArtifactUI.GetEquippedArtifactInfo local ARTIFACT_XP_GAIN = ARTIFACT_XP_GAIN DB.Art = { Strings = {}, Styles = { ["STYLE1"] = "|T%s:%s|t|cffe6cc80%s|r +%s.", ["STYLE2"] = "|T%s:%s|t|cffe6cc80%s|r |cff0CD809+%s|r.", }, } local function UpdateArtifact(self, event) if not E.db.sle.databars.artifact.longtext then return end local bar = self.artifactBar local showArtifact = HasArtifactEquipped(); if not showArtifact or (event == "PLAYER_REGEN_DISABLED" and self.db.artifact.hideInCombat) then bar:Hide() elseif showArtifact and (not self.db.artifact.hideInCombat or not InCombatLockdown()) then bar:Show() if self.db.artifact.hideInVehicle then E:RegisterObjectForVehicleLock(bar, E.UIParent) else E:UnregisterObjectForVehicleLock(bar) end local text = '' local itemID, altItemID, name, icon, totalXP, pointsSpent, quality, artifactAppearanceID, appearanceModID, itemAppearanceID, altItemAppearanceID, altOnTop = C_ArtifactUIGetEquippedArtifactInfo(); local numPointsAvailableToSpend, xp, xpForNextPoint = MainMenuBar_GetNumArtifactTraitsPurchasableFromXP(pointsSpent, totalXP); bar.statusBar:SetMinMaxValues(0, xpForNextPoint) bar.statusBar:SetValue(xp) local textFormat = self.db.artifact.textFormat if textFormat == 'PERCENT' then text = T.format(numPointsAvailableToSpend > 0 and '%d%% (%s)' or '%d%%', xp / xpForNextPoint * 100, numPointsAvailableToSpend) elseif textFormat == 'CURMAX' then text = T.format(numPointsAvailableToSpend > 0 and '%s - %s (%s)' or '%s - %s', xp, xpForNextPoint, numPointsAvailableToSpend) elseif textFormat == 'CURPERC' then text = T.format(numPointsAvailableToSpend > 0 and '%s - %d%% (%s)' or '%s - %d%%',xp, xp / xpForNextPoint * 100, numPointsAvailableToSpend) elseif textFormat == 'CUR' then text = T.format(numPointsAvailableToSpend > 0 and '%s (%s)' or '%s', xp, numPointsAvailableToSpend) elseif textFormat == 'REM' then text = T.format(numPointsAvailableToSpend > 0 and '%s (%s)' or '%s', xpForNextPoint - xp, numPointsAvailableToSpend) elseif textFormat == 'CURREM' then text = T.format(numPointsAvailableToSpend > 0 and '%s - %s (%s)' or '%s - %s', xp, xpForNextPoint - xp, numPointsAvailableToSpend) end bar.text:SetText(text) end end function DB:PopulateArtPatterns() local symbols = {'%(','%)','%.','([-+])','|4.-;','%%[sd]','%%%d%$[sd]','%%(','%%)','%%.','%%%1','.-','(.-)','(.-)'} local pattern pattern = T.rgsub(ARTIFACT_XP_GAIN,T.unpack(symbols)) T.tinsert(DB.Art.Strings, pattern) end function DB:FilterArtExperience(event, message, ...) local name, exp if DB.db.artifact.chatfilter.enable then for i = 1, #DB.Art.Strings do name, exp = T.match(message, DB.Art.Strings[i]) local _, _, _, icon = C_ArtifactUIGetEquippedArtifactInfo() if name then message = T.format(DB.Art.Styles[DB.db.artifact.chatfilter.style], E.db.sle.loot.looticons.channels["CHAT_MSG_SYSTEM"] and "" or icon, DB.db.artifact.chatfilter.iconsize, name, exp) return false, message, ... end end return false, message, ... end return false, message, ... end function DB:ArtInit() DB:PopulateArtPatterns() hooksecurefunc(E:GetModule('DataBars'), "UpdateArtifact", UpdateArtifact) E:GetModule('DataBars'):UpdateArtifact() end