Tumble files around a bit
This commit is contained in:
92
WeakAuras/Projects/ChatKeyScanner/event.lua
Normal file
92
WeakAuras/Projects/ChatKeyScanner/event.lua
Normal file
@@ -0,0 +1,92 @@
|
||||
---@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
|
||||
1
WeakAuras/Projects/ChatKeyScanner/export
Normal file
1
WeakAuras/Projects/ChatKeyScanner/export
Normal file
@@ -0,0 +1 @@
|
||||
!nVXIYjUrYVLJ7CT4SgcGFNkzR4h41ExBSll246kxwOb0aOZcnCJKm27MW3(1DpA0lec8gNuxHFinQN(D3t3JgmBA210W30Ov9M7vFBtJjMg24pWOJKIzMgNE9DDmn6lK2C5XSbpAlftnno215RFLjTNB1viCdCGHE(6Hd95bMNv7GT3DVwhCW2nBT9(7V9o7yoS2oaQFjcGo7SBdtdM3GXc5nchVatJtA3PB7B1K5eHRqcCqNMMDAy2Pf93TP)UdoimHqF(rkeWLFXZjWSpGXbbocpFsGcyYa4caYHoEo(Jvx7GqIxbxhiDgnIl9v0PB8a4L28(Hdh29LPCtJZBF5nN9LlHNt3YcLSwabMYDDVW2xHx)W(8N4EbgWSCE20O3jhz0TNr3JUfqwisuJPUSxaKhd6nsobQXnTVeqongqmoZnySPHhBc3xZPHEjSwGAObc3WjEgtzd4i3Biz2oH(GQQrds3CPZKiDIRZiptJlBFgWjsradvrOMezKB5JIuyakDfmYQdZU3axMVpoDqmhGdojeSXA(r908J678vE(bHH7h5YK2M2KSPnjBAtYM2O(UiWmpNjSaU5Xa6gWCvYMYNa5g1vTThb2bJ)BitYNBDwOR7CR7g7atZqscKYUz)cOeDgaoXHt1t1a5rG2gUK(PZUaD4UdJCc7E9nk9eChx6XC)nW9GuxT2JCPiBaQ7yHbGR31tdsuFdGRcyEbNbEHGGAC7rNEXxmWGih77CSbJksnfBehhaABhiA7ONNbWmCSX(OFPyWtA6UFJTrdkcZjJzbFM)IXaMNhx(rLuXKdUK7ncr(27baouc(nGJmlGrQovm2z4OkLIXj32UDC48fEeB0K4(HoJuscYXkOV9uqSfqGeeq4pG7z74nc9jiVUw0SSDsPduMpKZtfcAydrm4G9ubq(CCA(64jpHhhN7eMJ36dDCq96bFa67ploCbnxXH9IWaxhakJR)s3lVOtBa5cisw5P0ijTgA3TD8X44U8NbuSHYlyUvT5wB4n369B4crXU)4gGGpIhCjEd8KPsXij33FUfBKivsWgzDxdiCwGXhYsW1Equ4DENVOSxk5nCsFmldeeFkyYWaPjSNn7SxdCM(b8PK5Ewe6GNcADCemHJPr7NN6OuNqEDhCKh5VajNIhoGg0MpKbr5Werfe6ByACbmfTYpar9s5P(r80UfWrnxGJEbIXfdNBD0x9hZKSueVve3bG0tmSNgGamTYBdXpLjFCmhCJbTXyNbpcMnfjJFqV4XtXwuK9BdhCSlK(CU1Tcb83ZfU2fi)em9qq6rqq51EBi)5mxxFL()3yy(BffPHrDE0GzL99EJiEhoSuitcEDVd4HlzoYce(eG87rGapB)3ig43qsPK(GXGB4Dq9oCiKtrz6POsaEwV4hLvvCWBeNCfBMIpGSvU(fOgaaqwr9yy8dFJiCxuUpsoyg7LikbJ0tpqwHTzJ3iIEIiugP3nGCPfjVeiKetaGuV5Be1VLhekHKzbI5wFgsO81XmVFc8)eZ4A)Ffi9ce90a0l6X50iVvzbpHboz2sMRsR0wvEYCRooJghuK6rdpQIIGUNcyKT2(Vwv1xMoTmvv0JZPQERYyAWzPJz7kDcN8eU6fVa9ecSoeonKQYCd9detW16)YuBA(rfPdlalW6CgOwv24i4(xr3hg2IEkCJlphDLrTA1(vQW65wuPYC58pHJn0H7cDznahdEwaRVl)NvAOTIa9dzGSVKZECkwrBoWbWWMx6X9EQUMew)YCRVn)tZTuFa0m36k2JGIZpeRUwtwMxEmZCHuaW)hZEIhPR9bdWClfXuMao25c3)FalF0(2)9CRlU6MRVT7rD6(pYqZFfT7lv20aQ5LSSS(Z3MBPeNg13Rfm7rPVPF8nZT(JTqAo36Js(lLGMMBPhAuU7viRzcMOMpkLJAMWr5XtJmCe3Rm8KJLAuFNDsjChSFcQo2nSCoAVDsPJA1mfAoC7e0CtOCQl)vOLG(42Qqz7AjZB0RdtTsJP6TuS1Rr7Cqke0SEJ0Ah9MxKvpLg)zC2jxoRAhE4HigAIKQgkO1qEe)fVHggajcpzCWNcj)Mm36jgspDisgiKr5sjVEarEoU)Upe94nkbUlW(sNkCHKrepnm0Js6uLW7MlQCCfdWLjOihTuKOTgfFvI5knJVYi0C3gLM5dlLp6lzyXYAo5BkIhzy(MYhaJRu8roCmefbNyFL)z(Cz1ZyXSflIb9hNHXwIFgsKvcEU35bk3M3YrwI)cjB336bT45S1AG8)yDWmmLLdg0w(YFOMRA(NMRuKPeFdcxl10tljEsSF4cCGk5(9j8l8ZdF)Kd421NyT0eBzyBOuT4oHTQrUo1sRDbCS5CRFeEAkKIUclc1NwIR9JGH5jW(auzk0iJF1ev2ML7ptIZ9p(qXcRlKYO6tBLOtai3krM2CTn16mudsYqLaemNLL0JvCcVON2V0NguEYY8pdL1Szgzy2nmv1MlxGag8halxtYAbaA9EIT(bK8FkJsbIl85bt4bmk1x18kBvASE9C8S5pxO5aITixG4X)m)fOaqp(f2xXMMV4M7BU3UkZAfJXmBXSjc0l84qPd6xI7cONTFLTYmJ9IMXhLotKmWizDkFQiiluhUFeu53GLCGDqeylUvi5a8WiaxyhlYaxRgnIGl)wlKdmTqS4MaKdqTCSKM1ZbTwCY2qDoG0IsQMFZcrtTqKVt1SG1sZBL1sz2PS92AmxwhF5MZoLtgQFRCtrlIlVBPkK3(QFvjQw20DXO(VEVyHWeEyuVtf(kvY9wpwY7gj7lqj5vJ8AEjmdgZh8ymbt30LTdBKNWhANdYY64JX1GsdIRaEWJBxt1w1NW6gp58J627kJp2dUOtN2xckSlo5ZTVTxZgnAOActNZdCUrP3p9LFkjRKEmmTm8B961tLFcRpblWJ8dYrYklREKOLQaDJpBeNwKh3My4IEWVdgJV2axYOdeBXPJ0mAUkkJz3TW1L07YD8Ge9JtEwy5hi2ufVwhuI2vt4QkN)yucVkBUQsRIejycoWIlwUQnu)xIrn0d(GXfI7FQ6g2VFt1FRSz5vcsOpNmRj1RqK1F0OdddvlpvLgQeUirWINcnujtH2TaMFqm9YVs4YNqe1w1eIn7XQ7rqaw1yVQkBuR(7)xvWRQuyrnlAf9O9hi9IIzw87EsuEyLwRi0KX2SYIOpL)e(IQ97DA4KPvHfPRCgS0ih0CJ4bbyxwiQbusiFOumbfTmUEBLkc5p2C1KmYD57RW9mgyftf3n4AOQtRTtB(IghTAWp4)6vw8r5ykfYExIJWFwu9tRevrIzMxZwAVk1lZ8(e0(GkQU5UReNKH2gQ5GrOmkwPwwITAlGUe5EfxsEQ(4RMqXvlXQWriT346dDfczvIo1LuTQT2D3vJHrfJHrRpg6xmg6V(yym)5KEZ0RsiKakRwzJgTEw)l6hGkXryj8LMlCU1zi68fOZf0kRVWlExuRF7hpUR4CSCCBbUESNacQMjKq5PZCcgRNgWi0ouz5gc2EUukKLtYlIqdGYzQLhyEuFUE2q9SECn6b8T7oGeegerBhvlhZGwUrpJYPYDJbNKNaXOOfTZ3MkPed42DYfLP1U)(GZoBd)n8)DSCWy7WwX5ykrjhxXY96fgagsV4dEj5h)WY2D28F8hlMPwXtgY3A1WJ1VmIB)AMsYcXrzXx5mswhokF)kNr(uqPUFDPxUKn0TRXCJtKMXOVEQL45gN1D16)4a2OuBRCgOZBG6OHPYyexMg(KU6NGXKEVloICy(44s97lOwfD9jRLhLUI4ORxJzPpmhDP9Gclqhprez6XDzF0hufAA71ynMrYXUaplg08(ipaVUQAtkwlSGVTQXo28xtStY(xetWxHYrPyA4xMwPK99uxMnYRlBZP0346ZlU7dD)tPAqRYA2VrqqH1tup7PGz5OH8HXMUOeMP3rV4KORyd9Y2gfmH6jQ21RC38BhQlBQp3Ui3OAAsOS5RnMjLCA0(Hin3RJbJxqG4H4LfgYk0YUEyj)IfRpE4FxunsjpfCCdEjwhxPszfkUcCnXXlK29a61Y8QXYSXqVnlAF2RX653TC1tw3Om3xJW)3nUtlXXx)E89b9QrzPnwvM)CmD)a9wP((8KtYgMXDiFHU(BytTyMa2wXmWM)nkZ59r(lxUNBTbTL1zL8uSXFxsF(mR)sgE)V)CpRJmukqf(WchS4LyjqP)eTrP(MgLULNX73lwFHPbvkurhyD6SX8eVRAWReaWDQ1SH6idxW3cGcp)1)hGuodFrFw2H6fTVtYMAACx8vlEoPPtkFjN7C6SaV2NA6uNv8JVUB3RVk1bNE5N0PoT2EHJqR6KZw4riStZdYDE(60A3coOJeAZD2x70ANfppO0Gl7Koryj355StRMLCg3OzuYbmJMDUZNhnwQtoiHJfpeTiN()5hJ88FRjOZV)5vVPR30QpAFXMlEO41FVkk8Rsb9LTqmPpJ(YA8Q(IvGNsD6eBJzVqLkn6t4rPRf6wB()(
|
||||
72
WeakAuras/Projects/ChatKeyScanner/init.lua
Normal file
72
WeakAuras/Projects/ChatKeyScanner/init.lua
Normal file
@@ -0,0 +1,72 @@
|
||||
---@class Colorer
|
||||
---@field colors table<number, Color>
|
||||
---@field breakpoints table<number>
|
||||
aura_env.Colorer = {
|
||||
--- Make sure colors and breakpoints always have the same number of entries! VERY IMPORTANT!
|
||||
---@type table<number, Color>
|
||||
colors = {
|
||||
{ r = 0.62, g = 0.62, b = 0.62 }, -- Grey
|
||||
{ r = 1, g = 1, b = 1 }, -- White
|
||||
{ r = 0.12, g = 1, b = 0 }, -- Green
|
||||
{ r = 0, g = 0.44, b = 0.87 }, -- Blue
|
||||
{ r = 0.64, g = 0.21, b = 0.93 }, -- Purple
|
||||
{ r = 1, g = 0.5, b = 0 }, -- Orange
|
||||
{ r = 1, g = 0.2, b = 0.23 },
|
||||
{ r = 0, g = 0.8, b = 1.0 }, -- Blizzard Blue
|
||||
},
|
||||
breakpoints = { -999, -10, -5, -2, 2, 5, 10, 999 },
|
||||
|
||||
---@param value number
|
||||
---@return Color, nil|string
|
||||
Interpolate = function(value)
|
||||
local color = { r = 0, g = 0, b = 0 }
|
||||
|
||||
---@type table<number, table<number, number>>
|
||||
local bracket = { { 0, 0 }, { 1, 1 } }
|
||||
for i = 1, #aura_env.Colorer.breakpoints do
|
||||
if value < aura_env.Colorer.breakpoints[i] then
|
||||
bracket[2] = { i, aura_env.Colorer.breakpoints[i] }
|
||||
break
|
||||
end
|
||||
bracket[1] = { i, aura_env.Colorer.breakpoints[i] }
|
||||
end
|
||||
|
||||
---@type Color
|
||||
local startColor = aura_env.Colorer.colors[bracket[1][1]]
|
||||
---@type Color
|
||||
local endColor = aura_env.Colorer.colors[bracket[2][1]]
|
||||
|
||||
local fraction = (value - bracket[1][2]) / (bracket[2][2] - bracket[1][2])
|
||||
|
||||
for k, v in pairs(startColor) do
|
||||
color[k] = aura_env.Colorer.lerp(v, endColor[k], fraction)
|
||||
end
|
||||
|
||||
return color, nil
|
||||
end,
|
||||
|
||||
---@param a number
|
||||
---@param b number
|
||||
---@param t number
|
||||
---@return number
|
||||
lerp = function(a, b, t) return a * (1 - t) + b * t end,
|
||||
}
|
||||
setmetatable(aura_env.Colorer, { __index = aura_env.Colorer })
|
||||
|
||||
aura_env.KeystoneIdMap = {
|
||||
[165] = "Shadowmoon Burial Grounds",
|
||||
[166] = "Grimrail Depot",
|
||||
[197] = "Eye of Azshara",
|
||||
[198] = "Darkheart Thicket",
|
||||
[199] = "Black Rook Hold",
|
||||
[200] = "Halls of Valor",
|
||||
[206] = "Neltharion's Lair",
|
||||
[207] = "Vault of the Wardens",
|
||||
[208] = "Maw of Souls",
|
||||
[209] = "The Arcway",
|
||||
[210] = "Court of Stars",
|
||||
[227] = "Return to Karazhan: Lower",
|
||||
[233] = "Cathedral of Eternal Night",
|
||||
[234] = "Return to Karazhan: Upper",
|
||||
[239] = "Seat of the Triumvirate",
|
||||
}
|
||||
Reference in New Issue
Block a user