From ef94e7d3b2b00162181f0aced29e2cb2fe340597 Mon Sep 17 00:00:00 2001 From: Dave Date: Fri, 15 Mar 2024 21:22:01 +0100 Subject: [PATCH] Add chatkeyscanner --- FreshShit/ChatKeyScanner/event.lua | 85 +++++++++++++++++++++++++++++ FreshShit/ChatKeyScanner/event2.lua | 0 FreshShit/ChatKeyScanner/export | 1 + FreshShit/ChatKeyScanner/init.lua | 72 ++++++++++++++++++++++++ 4 files changed, 158 insertions(+) create mode 100644 FreshShit/ChatKeyScanner/event.lua create mode 100644 FreshShit/ChatKeyScanner/event2.lua create mode 100644 FreshShit/ChatKeyScanner/export create mode 100644 FreshShit/ChatKeyScanner/init.lua diff --git a/FreshShit/ChatKeyScanner/event.lua b/FreshShit/ChatKeyScanner/event.lua new file mode 100644 index 0000000..09bbdb6 --- /dev/null +++ b/FreshShit/ChatKeyScanner/event.lua @@ -0,0 +1,85 @@ +---@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({ 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, _ = 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, + 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 + for _, state in pairs(allstates) do + if state.progress then + local elapsedTime = GetTime() - state.index + 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 + prettyTime = string.format("%ds", elapsedTime) + state.progress = prettyTime + end + end + end + return true + end +end diff --git a/FreshShit/ChatKeyScanner/event2.lua b/FreshShit/ChatKeyScanner/event2.lua new file mode 100644 index 0000000..e69de29 diff --git a/FreshShit/ChatKeyScanner/export b/FreshShit/ChatKeyScanner/export new file mode 100644 index 0000000..8ddefbb --- /dev/null +++ b/FreshShit/ChatKeyScanner/export @@ -0,0 +1 @@ +!nRXIsTnsYVLZ3rTMn2ETnpsyRnPwcycqadfYzPUIcln2AS8Cil5tpWqYU6B)6Uhn6LLLnzjvDL5H0m90V7E6E8mSZWbd18hQ1TvN9BTZqTzd1mXFGrT8Cxmu74RUT)qTrUEMCVpYg)GPN78HAF0w81VY8mJmg46AhiGHE6Qjt85bd73C39Apu7z1R7cVWCgp117AxHtWqTJ61FqVBu48ixBxpGC97mSF7H97s)Dh6V7Idcli0NFOebCVV4icgocW44aHRJpX9bmVa4baYjchH)u5Zces8j45apHLf3ZxsNbjdGpAYhfozYGNNZhQDAVlU(KVCbmp9kl0J1fiWCUT9zM(s86hoI)i3jqdwL4PHA6hDO2aDTbhEdGSqKOAZTzpdixZHnJhVkAjab4m7GPPi5ApoHeTR7DXfKS6KYAbsMFSRD4mhT5SXCK718yMIqFqv1M0SIzmuvKvtOzcmooOUuo85JDDa(pwSCCD4iINXeoBo0j62ndEyfmBHLZqTl6DIK3iXcmSO0Fd3k2(baA7YipoWqRp2M57JwyqRpghCwi4FPmKYzloQV4R8Idcdpk2DnRlwhYfRd5I1HCXA3ApIzjfjF4hb2qaHah(0cZBftMQ9wKaJz2sLV0Pf5p5t9mTazw7)gY84rgNeABhzC7ubGinpseLowMpd(cIXqiv4C1s1qUUp6F5cwnWp0Fm3Xu4yHMCNjclPYXYtykrYnhJAfYnOlbdOtDcobcfaXt7Mdp(SVObK1DrQVIKsjHIGQwmd8q7VhyTCh)iesGUo9FB7DqNjuUpAkl4Z8N1gZCC4EFsYW(C7jXrVdU6APbDIh4DdbsSagrkzm(j4Os2v7OB61RVuaUvycU9izLC0zoedHllmaw2vZdsDhyEJVG7yHlyN9BJsuG0fh9DqFnrgGbMI75WS)dLS0DFYr6csqhronjH9UHb2cW9u7QVm4IZ63dKcxiswAiAxQozCLopu(jtHpgXpG)e8YwsbkYOzKXworgVzlBis3(x2cInT4bxGVaZm3Z1YJ77hzWSCZKTCvjljFYtRF9aN51FW8STxwXfNytgdgoBeMac0dhdUvO76m2tG(hd(c4Zjn)cPnbEAgKha)pMVAOwVNbpz3jrgh(v)Pmpg6AoHbHwKB3d8Njq0DNORaGM51H4hZ8EykhsJb7Smvm(bqNijzYe6jJNHTcqBYRdh8rBiTrKXnUUWFp112Se5NGrhbrNGGITEDi)PmBBFP()pyORNKI0WOopEW8Y(EVseVph2DI5bEu)eWdxWeELi8Pa5RtGaZT)Red8hiPKsFWuWn8wOgdo4ElPmnlQeG50tMkVQ4TVsCYLSfs(asAy7xIAaaazf50W4V7vIWdq5(qVXlyphtjyeD1a5f2dELO5rUHEXQDnipvzIlbcjWeayY72Vsu)gEqOhKQmWnY4Zq(KVoL58RG7N7cUY9xcIEGRUca94PZRq68ALe8ig4Jz6XSLALEYnzIm6lSMguM6rbpQIIHwxcmYwD)XQQ(Y85vPQINUGQ61kHPgNLnKDGNiC2JcpSyQL1tiWQi4SqkRUl0pWDgUp6xMBsRpUSzyVoxSm3XY6i0oeE)f0dGMPRUe3y5DXpP1SzZFNQNmYGQqK7fDoo2eb3gASH24hMlGnYM)BsnuJyq)qoih5Xzpmh3VUa4aykmB8(iJVfDEKH8dS6iJlzpa6l)qSYrf1yofriZgc8H)pL9ipwf7d69idjnKAEo22a3)FaBA07M)DKXzxE9v3m4W(d(h5O5VJM7vkskav8sEww95BrgsXPDR97cR2k7lJsEjY4VAG0mY4tE8NRanDAOgYQW7sK1jftuH1vYrDs5OI4PDooI7ufEkWsTBT7UzeU392uu9r7WQ5O93nJoQBNmO5GDsrZ1HEZT5VaTe01sJsLTR8yowvZsh0ilEExw80AVumDbM9cuwqboViDvwe2Pv7S6k1HgKxRbZN8CoxFYb0O5bhGCCZoiPAIIDt0kJ)IVqddGeJNCU7ZHmGZImEKH0tfWKdcV4eQumaGihH9F6dXsowPWDg2IXCxBiJeXttcDOmp1j8U9YkhB3X4EfuCKsks1wwjpLA8YY4RnETWRX5A(Wk5JrEmSGzfN8njXJnmFt6BHrzs(OaoMGIGiXh8FgNqRvodLP7Ylu9rmjXa8BjzAZU87e3t51Cwnos9oij5UU3RegrJvJZ)AtqiSKvdg0p(QNuXmD(Ezgj2RWUt4ALMvApVJs8XuewM9(UuUd(5(VFQam5APrxfnwfsM4j3RMqs9yVHMzvHao2oY4xGzZGu0mVmuNVcN0haT)JGraOYCOTe)6PkOTR2fLeN7E4(CYOneZx)XgPAaaGgPIY2BS9uLIzCAkMuGG1SQSwSYZyfp7OkNnO6SDfNdL18P2yy6jmxZ2RwGag8NbdwhYibaA8gIT(zK8NNtPao)(8Gz8agL7QESowM(rxx4yYFkRYhcxi7mEaS6CNhB9z(ZqrBo8ZmVKnVyLj315G3kTD1kE2f1AKdS3fdwMtziqEAcfa8Gyax6WaYbx32TJHRyx7faB)yWwU)6caQKJv0hCbOvIt(EvlaKsuY0xzEi6OeIIDbMhSUkERQ21YVKD2rH5Q6MQWA2TAYq9YuyjkrC1DIuJ8bx)xgGSDivhcY)RoMBW5Lhg3xsPFPbB0z8V6VIGS9LykywoU(qhpqMlHpg0aYEieNaT3WnBk784CSQQJo9Wb6xQ9jD4H(97Dbi3ND0N7DJEN2TBl7trLqb8rrHWp7JNNgYRgdZ5b)2QvRmb)424y5pK5SajRTQ9VJt)dIOpZcXP8qlHh0HFhpfpJzBY2beB5LJ0mETskJPonWC9QdznzqI(jzMkDFBeBYs7AbkrZ6PCvTtFio)sTTxxPiXIeSabK52WwEEUVpb1qBQJNwkU)16Bz(MTL)T22vxWeH(cYSIuVarw9rHomAsM7VonufCrQGLSeAOkwc1qnZpiHEf3Mz1liMARBbjM9e1TfeLvpXRQ2wnB9M)vn8PALwOWYwrhQx63J4US9AUJeL7xR1kgn5SnRT6ZJ5pIF9P(6hhoBE9VvWRQrgN))A71JTypHVVIzZz7KctsBqBGwmRImRLjEC0Ga)G)tVkx)QXugK9tP24)UO6xxlQIfZCFbozDyKFBD3LI27LbSD2BT4Km0MqvbmcLXHbnZtS1BbuLwQNRc2m9TwpLqRxqLbyqISPTMy766vNqFlpQ0UU7T36XGv5yWAZXWOYXWOnhdt5pL24IkVVRhGY612QD3Nu)IMFu3zHv8wz2TiJtq057I(uq7D(UoPk7B(0hh4EkwgRPlUdRJlelTW1dQBCHiyQAzaJqNpJHDiyY5EEUEvtYZIrdGYfYe(mhQ3phtOqthUc9a(2BxqccdIPTqwH(cOnu0tTAQC7uWj5rqmkBB4InZrkXaUz)cbxkT7Fo(Kt2YFl))eRtlXo0ij1sfk5KAqUtLQhyi12j4JKF89R6Sjl(XFQ7c5EyEH8gRhESIelU5lzjPBTgN8ETRiDN1408RDffZ8K59nLEfYXqVUbRnj)zoJ(MPwswBsY21R)tcyJZOT2vKPIavvaBKvwv3z8ZBWQuFJ9dOdnbldoqmJNRHWv9rDHzOLTF7nyf8NMlKRzGiwl(jEa(CDzF2BewWV2KPct(lXFoTx8ec(cuosftB)Q0kvCSCQIzrEDvNVI6fBFE514R6sjtBq1wxfz0biH9KqzFYEisjzKwZziLVldybTs1jBw1Gfp4nB2CFUzz2)MksinwVumphuZbpNG4A1QQcJv1sNWjK6KKoa7nE1lMkS5fKTpGEZBMYDjpIc6OCV3KW7lgNzLSKNFdEc5BmQQSs7sBYvrNpqNl)lZFjngmNzTyjp(Bzod3pofSgjeE7FGYwrB9pm5lYylt)LKWmK)hLuUggtYuFF8rXmjVph1o)VLyu6KLoy5PLjqP)SMlf74P8XpKC8y5VnT0G(d1Q8uSsojoCZSHA0(ULDzzPBeWJ8bYbV0faUFZoTXzYEzmdOlQxPxCW)dqhXKNvxA1)F(21U8L1C5lh5gFhntUWPR(6JqxqYsVbw0m5Uou972TK7jw)U7T0vhSF3Dw(60rMIvDtriSu46WrCWkVJq0SvCbD63TZs3VjAnzU4vevx(oiICAG8wKcI2tZXOu6EA9uMl0zXR7CMBt7hVAWGRUen)pXvxsw6EDRUs0LElOP7jT7Srm6QW)IUt0qRKM36XMpu7w1t04pc(h72fVoRd)Fd \ No newline at end of file diff --git a/FreshShit/ChatKeyScanner/init.lua b/FreshShit/ChatKeyScanner/init.lua new file mode 100644 index 0000000..9f66fff --- /dev/null +++ b/FreshShit/ChatKeyScanner/init.lua @@ -0,0 +1,72 @@ +---@class Colorer +---@field colors table +---@field breakpoints table +Colorer = { + --- Make sure colors and breakpoints always have the same number of entries! VERY IMPORTANT! + ---@type table + 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 = 0.9, g = 0.8, b = 0.5 }, -- Light Gold + { 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> + local bracket = { { 0, 0 }, { 1, 1 } } + for i = 1, #Colorer.breakpoints do + if value < Colorer.breakpoints[i] then + bracket[2] = { i, Colorer.breakpoints[i] } + break + end + bracket[1] = { i, Colorer.breakpoints[i] } + end + + ---@type Color + local startColor = Colorer.colors[bracket[1][1]] + ---@type Color + local endColor = 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] = 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(Colorer, { __index = Colorer }) + +aura_env.KeystoneIdMap = { + [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" +}