Files

93 lines
2.7 KiB
Lua

---@diagnostic disable: undefined-field
-- CHAT_MSG_CHANNEL TICKER_1000
---@param allstates allstates
function(allstates, e, ...)
if e == "CHAT_MSG_CHANNEL" then
local message, author, _, channel = ...
if message == nil or author == nil then return end
if string.find(message, "Hkeystone") then
local keyid, level = string.match(message, "Hkeystone:(%d+):(%d+)")
if keyid == nil or level == nil then return end
keyid = tonumber(keyid)
level = tonumber(level)
---@cast keyid number
---@cast level number
author = string.gsub(author, "%-.+$", "")
local keyname = aura_env.KeystoneIdMap[keyid]
if keyname == nil then
DevTools_Dump({ "Failed getting key name from", keyid, level, message })
return
end
---@cast keyname string
local keykeyname = string.gsub(keyname, " ", "_")
keykeyname = string.gsub(keykeyname, "'", "")
keykeyname = string.gsub(keykeyname, ":", "")
local targetLevel = aura_env.config[keykeyname] or 15
local leveldelta = level - targetLevel
local color, _ = aura_env.Colorer.Interpolate(leveldelta)
local r = math.floor(color.r * 255)
local g = math.floor(color.g * 255)
local b = math.floor(color.b * 255)
local hexColor = string.format("%02x%02x%02x", r, g, b)
-- For some reason Colorer.RGBToHex does not work with some strange lua error
-- It works when ran standalone with lua54 but not in a weakaura
-- Whatever...
local formattedName = string.format("|cFF%s%s|r", hexColor, keyname)
allstates[author .. keyid .. level] = {
show = true,
changed = true,
keyid = keyid,
level = level,
targetLevel = targetLevel,
leveldelta = leveldelta,
name = formattedName,
keyname = keyname,
color = color,
-- tooltip = message, -- Tooltip doesn't work for some reason...
author = author,
channel = channel,
progressType = "timed",
duration = 60,
expirationTime = GetTime() + 60,
autohide = true,
index = GetTime(),
progress = "0s",
}
return true
end
else
if e == "TICKER_1000" then
local ttl = aura_env.config.expirationtime
for _, state in pairs(allstates) do
if state.progress then
local elapsedTime = GetTime() - state.index
if elapsedTime > ttl then
state.show = false
state.changed = true
else
local prettyTime = ""
local minutes = 0
while elapsedTime > 60 do
elapsedTime = elapsedTime - 60
minutes = minutes + 1
end
if minutes > 0 then
prettyTime = string.format("%s%dm", prettyTime, minutes)
end
if elapsedTime > 0 then
prettyTime = string.format("%s %ds", prettyTime, elapsedTime)
end
state.progress = prettyTime
state.changed = true
end
end
end
end
return true
end
end