You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
7.7 KiB
179 lines
7.7 KiB
local SLE, T, E = unpack(select(2, ...))
|
|
local DB = SLE.DataBars
|
|
local EDB = E.DataBars
|
|
|
|
--GLOBALS: unpack, select, hooksecurefunc
|
|
local format = format
|
|
|
|
local COMBATLOG_XPGAIN_FIRSTPERSON, COMBATLOG_XPGAIN_FIRSTPERSON_UNNAMED = COMBATLOG_XPGAIN_FIRSTPERSON, COMBATLOG_XPGAIN_FIRSTPERSON_UNNAMED
|
|
local COMBATLOG_XPGAIN_EXHAUSTION1, COMBATLOG_XPGAIN_EXHAUSTION2, COMBATLOG_XPGAIN_EXHAUSTION4, COMBATLOG_XPGAIN_EXHAUSTION5 = COMBATLOG_XPGAIN_EXHAUSTION1, COMBATLOG_XPGAIN_EXHAUSTION2, COMBATLOG_XPGAIN_EXHAUSTION4, COMBATLOG_XPGAIN_EXHAUSTION5
|
|
local COMBATLOG_XPGAIN_EXHAUSTION1_GROUP, COMBATLOG_XPGAIN_EXHAUSTION2_GROUP, COMBATLOG_XPGAIN_EXHAUSTION4_GROUP, COMBATLOG_XPGAIN_EXHAUSTION5_GROUP = COMBATLOG_XPGAIN_EXHAUSTION1_GROUP, COMBATLOG_XPGAIN_EXHAUSTION2_GROUP, COMBATLOG_XPGAIN_EXHAUSTION4_GROUP, COMBATLOG_XPGAIN_EXHAUSTION5_GROUP
|
|
local COMBATLOG_XPGAIN_EXHAUSTION1_RAID, COMBATLOG_XPGAIN_EXHAUSTION2_RAID, COMBATLOG_XPGAIN_EXHAUSTION4_RAID, COMBATLOG_XPGAIN_EXHAUSTION5_RAID = COMBATLOG_XPGAIN_EXHAUSTION1_RAID, COMBATLOG_XPGAIN_EXHAUSTION2_RAID, COMBATLOG_XPGAIN_EXHAUSTION4_RAID, COMBATLOG_XPGAIN_EXHAUSTION5_RAID
|
|
local COMBATLOG_XPGAIN_FIRSTPERSON_GROUP, COMBATLOG_XPGAIN_FIRSTPERSON_RAID = COMBATLOG_XPGAIN_FIRSTPERSON_GROUP, COMBATLOG_XPGAIN_FIRSTPERSON_RAID
|
|
local UnitXP, UnitXPMax, GetXPExhaustion = UnitXP, UnitXPMax, GetXPExhaustion
|
|
local GROUP, RAID = GROUP, RAID
|
|
|
|
DB.Exp = {
|
|
Strings = {
|
|
NoName = {},
|
|
Normal = {},
|
|
Bonus = {},
|
|
BonusGroup = {},
|
|
BonusRaid = {},
|
|
Penalty = {},
|
|
PenaltyGroup = {},
|
|
PenaltyRaid = {},
|
|
FirstBonus = {},
|
|
FirstPenalty = {},
|
|
},
|
|
Styles = {
|
|
STYLE1 = {
|
|
NoName = '|T'..DB.Icons.XP..':%s|t +%s',
|
|
Normal = '|T'..DB.Icons.XP..':%s|t %s: +%s',
|
|
Bonus = '|T'..DB.Icons.XP..':%s|t %s: +%s (%s %s)',
|
|
BonusGroup = '|T'..DB.Icons.XP..':%s|t %s: +%s (%s %s, +%s '..GROUP..')',
|
|
BonusRaid = '|T'..DB.Icons.XP..':%s|t %s: +%s (%s %s, -%s '..RAID..')',
|
|
Penalty = '|T'..DB.Icons.XP..':%s|t %s: +%s (-%s %s)',
|
|
PenaltyGroup = '|T'..DB.Icons.XP..':%s|t %s: +%s (-%s %s, +%s '..GROUP..')',
|
|
PenaltyRaid = '|T'..DB.Icons.XP..':%s|t %s: +%s (-%s %s, -%s '..RAID..')',
|
|
FirstBonus = '|T'..DB.Icons.XP..':%s|t %s: +%s (%s '..GROUP..')',
|
|
FirstPenalty = '|T'..DB.Icons.XP..':%s|t %s: +%s (-%s '..RAID..')',
|
|
},
|
|
STYLE2 = {
|
|
NoName = '|T'..DB.Icons.XP..':%s|t |cff0CD809+%s|r ',
|
|
Normal = '|T'..DB.Icons.XP..':%s|t %s: |cff0CD809+%s|r',
|
|
Bonus = '|T'..DB.Icons.XP..':%s|t %s: |cff0CD809+%s|r (|cff0CD809%s|r %s)',
|
|
BonusGroup = '|T'..DB.Icons.XP..':%s|t %s: |cff0CD809+%s|r (|cff0CD809%s|r %s, +%s '..GROUP..')',
|
|
BonusRaid = '|T'..DB.Icons.XP..':%s|t %s: |cff0CD809+%s|r (|cff0CD809%s|r %s, -%s '..RAID..')',
|
|
Penalty = '|T'..DB.Icons.XP..':%s|t %s: |cff0CD809+%s|r (-%s %s)',
|
|
PenaltyGroup = '|T'..DB.Icons.XP..':%s|t %s: |cff0CD809+%s|r (-%s %s, +%s '..GROUP..')',
|
|
PenaltyRaid = '|T'..DB.Icons.XP..':%s|t %s: |cff0CD809+%s|r (-%s %s, -%s '..RAID..')',
|
|
FirstBonus = '|T'..DB.Icons.XP..':%s|t %s: |cff0CD809+%s|r (%s '..GROUP..')',
|
|
FirstPenalty = '|T'..DB.Icons.XP..':%s|t %s: |cff0CD809+%s|r (-%s '..RAID..')',
|
|
},
|
|
}
|
|
}
|
|
|
|
local function UpdateExperience()
|
|
if not E.db.sle.databars.experience.longtext then return end
|
|
local bar = EDB.StatusBars.Experience
|
|
|
|
if EDB:ExperienceBar_ShouldBeVisible() then
|
|
local CurrentXP, XPToLevel, RestedXP = UnitXP('player'), UnitXPMax('player'), GetXPExhaustion()
|
|
local textFormat = E.db.databars.experience.textFormat
|
|
local text = ''
|
|
|
|
if RestedXP and RestedXP > 0 then
|
|
if textFormat == 'PERCENT' then
|
|
text = format('%d%% R:%d%%', CurrentXP / XPToLevel * 100, RestedXP / XPToLevel * 100)
|
|
elseif textFormat == 'CURMAX' then
|
|
text = format('%s - %s R:%s', CurrentXP, XPToLevel, RestedXP)
|
|
elseif textFormat == 'CURPERC' then
|
|
text = format('%s - %d%% R:%s [%d%%]', CurrentXP, CurrentXP / XPToLevel * 100, RestedXP, RestedXP / XPToLevel * 100)
|
|
elseif textFormat == 'CUR' then
|
|
text = format('%s R:%s', CurrentXP, RestedXP)
|
|
elseif textFormat == 'REM' then
|
|
text = format('%s R:%s', XPToLevel - CurrentXP, RestedXP)
|
|
elseif textFormat == 'CURREM' then
|
|
text = format('%s - %s R:%s', CurrentXP, XPToLevel - CurrentXP, RestedXP)
|
|
elseif textFormat == 'CURPERCREM' then
|
|
text = format('%s - %d%% (%s) R:%s', CurrentXP, CurrentXP / XPToLevel * 100, XPToLevel - CurrentXP, RestedXP)
|
|
end
|
|
else
|
|
if textFormat == 'PERCENT' then
|
|
text = format('%d%%', CurrentXP / XPToLevel * 100)
|
|
elseif textFormat == 'CURMAX' then
|
|
text = format('%s - %s', CurrentXP, XPToLevel)
|
|
elseif textFormat == 'CURPERC' then
|
|
text = format('%s - %d%%', CurrentXP, CurrentXP / XPToLevel * 100)
|
|
elseif textFormat == 'CUR' then
|
|
text = format('%s', CurrentXP)
|
|
elseif textFormat == 'REM' then
|
|
text = format('%s', XPToLevel - CurrentXP)
|
|
elseif textFormat == 'CURREM' then
|
|
text = format('%s - %s', CurrentXP, XPToLevel - CurrentXP)
|
|
elseif textFormat == 'CURPERCREM' then
|
|
text = format('%s - %d%% (%s)', CurrentXP, CurrentXP / XPToLevel * 100, XPToLevel - CurrentXP)
|
|
end
|
|
end
|
|
|
|
bar.text:SetText(text)
|
|
end
|
|
end
|
|
|
|
function DB:PopulateExpPatterns()
|
|
local symbols = {'%(','%)','%.','([-+])','|4.-;','%%[sd]','%%%d%$[sd]','%%(','%%)','%%.','%%%1','.-','(.-)','(.-)'}
|
|
local pattern
|
|
|
|
pattern = T.rgsub(COMBATLOG_XPGAIN_FIRSTPERSON_UNNAMED, unpack(symbols))
|
|
tinsert(DB.Exp.Strings.NoName, pattern)
|
|
|
|
pattern = T.rgsub(COMBATLOG_XPGAIN_FIRSTPERSON, unpack(symbols))
|
|
tinsert(DB.Exp.Strings.Normal, pattern)
|
|
|
|
pattern = T.rgsub(COMBATLOG_XPGAIN_EXHAUSTION1, unpack(symbols))
|
|
tinsert(DB.Exp.Strings.Bonus, pattern)
|
|
|
|
pattern = T.rgsub(COMBATLOG_XPGAIN_EXHAUSTION2, unpack(symbols))
|
|
tinsert(DB.Exp.Strings.Bonus, pattern)
|
|
|
|
pattern = T.rgsub(COMBATLOG_XPGAIN_EXHAUSTION4, unpack(symbols))
|
|
tinsert(DB.Exp.Strings.Penalty, pattern)
|
|
|
|
pattern = T.rgsub(COMBATLOG_XPGAIN_EXHAUSTION5, unpack(symbols))
|
|
tinsert(DB.Exp.Strings.Penalty, pattern)
|
|
|
|
pattern = T.rgsub(COMBATLOG_XPGAIN_EXHAUSTION1_GROUP, unpack(symbols))
|
|
tinsert(DB.Exp.Strings.BonusGroup, pattern)
|
|
|
|
pattern = T.rgsub(COMBATLOG_XPGAIN_EXHAUSTION2_GROUP, unpack(symbols))
|
|
tinsert(DB.Exp.Strings.BonusGroup, pattern)
|
|
|
|
pattern = T.rgsub(COMBATLOG_XPGAIN_EXHAUSTION4_GROUP, unpack(symbols))
|
|
tinsert(DB.Exp.Strings.PenaltyGroup, pattern)
|
|
|
|
pattern = T.rgsub(COMBATLOG_XPGAIN_EXHAUSTION5_GROUP, unpack(symbols))
|
|
tinsert(DB.Exp.Strings.PenaltyGroup, pattern)
|
|
|
|
pattern = T.rgsub(COMBATLOG_XPGAIN_EXHAUSTION1_RAID, unpack(symbols))
|
|
tinsert(DB.Exp.Strings.BonusRaid, pattern)
|
|
|
|
pattern = T.rgsub(COMBATLOG_XPGAIN_EXHAUSTION2_RAID, unpack(symbols))
|
|
tinsert(DB.Exp.Strings.BonusRaid, pattern)
|
|
|
|
pattern = T.rgsub(COMBATLOG_XPGAIN_EXHAUSTION4_RAID, unpack(symbols))
|
|
tinsert(DB.Exp.Strings.PenaltyRaid, pattern)
|
|
|
|
pattern = T.rgsub(COMBATLOG_XPGAIN_EXHAUSTION5_RAID, unpack(symbols))
|
|
tinsert(DB.Exp.Strings.PenaltyRaid, pattern)
|
|
|
|
pattern = T.rgsub(COMBATLOG_XPGAIN_FIRSTPERSON_GROUP, unpack(symbols))
|
|
tinsert(DB.Exp.Strings.FirstBonus, pattern)
|
|
|
|
pattern = T.rgsub(COMBATLOG_XPGAIN_FIRSTPERSON_RAID, unpack(symbols))
|
|
tinsert(DB.Exp.Strings.FirstPenalty, pattern)
|
|
end
|
|
|
|
function DB:FilterExperience(_, message, ...)
|
|
local name, exp, bonus, reason, addbonus
|
|
if E.db.sle.databars.experience.chatfilter.enable then
|
|
for type, patterns in pairs(DB.Exp.Strings) do
|
|
for i = 1, #patterns do
|
|
name, exp, bonus, reason, addbonus = strmatch(message, '^'..DB.Exp.Strings[type][i]..'$')
|
|
if name then
|
|
message = format(DB.Exp.Styles[E.db.sle.databars.experience.chatfilter.style][type] , E.db.sle.databars.experience.chatfilter.iconsize, name, exp, SLE.Russian and reason or bonus, SLE.Russian and bonus or reason, addbonus)
|
|
return false, message, ...
|
|
end
|
|
end
|
|
end
|
|
|
|
return false, message, ...
|
|
end
|
|
|
|
return false, message, ...
|
|
end
|
|
|
|
function DB:ExpInit()
|
|
DB:PopulateExpPatterns()
|
|
hooksecurefunc(EDB, 'ExperienceBar_Update', UpdateExperience)
|
|
end
|
|
|