diff --git a/FreshShit/RIOChecker/event.lua b/FreshShit/RIOChecker/event.lua index bbb1200..1e036e7 100644 --- a/FreshShit/RIOChecker/event.lua +++ b/FreshShit/RIOChecker/event.lua @@ -1,13 +1,13 @@ -- CHAT_MSG_SYSTEM function(e, msg) - -- if e == "OPTIONS" then - -- WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ") - -- WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "-> Return to Karazhan: Lower / isDPS / +++5 / 8m29s / 59.1 ") - -- WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "-> Cathedral of Eternal Night / isDPS / +++2 / 9m41s / 23.4 ") - -- WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "-> Seat of the Triumvirate / isDPS / +++14 / 14m54s / 165.5 ") - -- WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "-> Return to Karazhan: Upper / isDPS / +++11 / 10m23s / 128.0 ") - -- WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ") - -- end + if e == "OPTIONS" then + WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ") + WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "-> Return to Karazhan: Lower / isDPS / +++5 / 8m29s / 59.1 ") + WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "-> Cathedral of Eternal Night / isDPS / +++2 / 9m41s / 23.4 ") + WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "-> Seat of the Triumvirate / isDPS / +++14 / 14m54s / 165.5 ") + WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "-> Return to Karazhan: Upper / isDPS / +++11 / 10m23s / 128.0 ") + WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ") + end if not msg then return end if string.byte(msg, 1) + string.byte(msg, 6) == 77 then aura_env.reading = not aura_env.reading diff --git a/FreshShit/RIOChecker/export b/FreshShit/RIOChecker/export new file mode 100644 index 0000000..fdba107 --- /dev/null +++ b/FreshShit/RIOChecker/export @@ -0,0 +1 @@ +!TV1dtTnUs8plxA7mjhbtsiqlDA7CuU0wOqGbhoMB4vNO4OK4IJDgj7uOT4p7VDLK)BSnM3rVoZBAHAKTK(P9FA3vXBmABmWqFHH(e8xOPRVNTLd1qFWho8GpE6fdo(W(9m0N664PB9vQr)27AO75AUIY4wUog9FERTB1YqN47n3LD6sp4HCaipapl(sBYTdO3a38mtdDtFUN7c59t9DmXXwVrWrbJK)WOE(mNGreFgzi1zLMcbDpMLZSGJOoavE7PtNYPEg972bwwgDgaYGBxcuSNayo1E6zUwoqZd61FqVZH1112Lb0u)2IF7iUUT4Ax8Qxss7ILtiEaA(Q)cmM7cINL5Lwt8MBOVpCp8uZqgvN7ryEso2YXcBPpXDOeqJ3gcncKIRwqdg96GrxadUpzbTEnKhPSAGKiAmmkzcYZ4aNsS50e9n132(ekNtMjb6B3LOZ0ImS7A1aj8rBU5M)HPnHZdgbYdg9auMqzYoMArTNemsiNGb4rgBtFLJ)IXuwZGrIH(MuJCmqFxVeLYzg(BsqkPwhbHgRQbScgDc5AGd4(mA8AtCYcpX(lKBH)oNScgN3CCkeugkxXGrUtdgrDagMY)TGr)vVZ)7GrhEYzNE(G97p43sTM)HhyPuidgoWqAjnjh(Z3advrFT02Tdm7zjVzC0nbJURjUMbJEpJEBjW0Uz4JML5EjyTJr6Y5wE0sPO2XuuwCALIIOoLHtgsQLw3UjyUx88yOERTF5u0UDtiJ60obm7TDmmN5ZwAtFasPwA70mxE7ugXz2ddPojrsRJKSEisNxKaG2ATskDS(6xjSjzLtjXpLXUWKtScTBHx7iUUT4AxX1D2bV(CX19G)PalLv(scJSiy0kcUOH7tsnIqxTctFajhl7VZvUzdh3HoEu2sxBWnO0puOlBbUnwxcz7AsSvBFczLyr2SOwX6SKe(9UnnZTkhoVPq6ymJyEn1lKsuYvL25BsdbCZLKoYGXuKfSImyEsUE10sP7M4UomH)ynnsD8Qeb4kcSRS(KWvNtXigB(i4YR68Pqg1QzvxH7Qc8WukEyqi5I7mK0A)4qAY1Qe7fbwfAoiItFqKTz(KH01)vXuo87N(FFnbs(bUIDcxXIGCktM7HaY6kBQntkSbmAemAlO3eGIMhRpQJkWW)AqpTcuxWQSKyX41JfEnk3qxWoxD9NkHJTbVk1x1mw6adVzmJ1OYA(qNyMXoXIhemNI8lsY3NOQ3XL2Rx5(tZ2hYRPDEsqhGO3SgfZqab(7G6RTqLbdC0gcY63XL)OucL7sLz3hP3EmDf1(hzwDrRXVYO7xz09Rm6QygDICneP1TJiRo8IO1Ey6DB)RC5(PKlxOVS)X5XLhqpE5Wvi6)CZF7Hqw)GYDlIe(xjVTIwT))mNTiU9x5R9OMVwWrOtehxGYUe23SpiV56qMqt0o42Rjkxg53L8d7tIuzGODYFs8kdQWbKeWSzsMk1qhr(zHrvs0bZ1o)oSLjjMtpEwfGfhpLqSobPH1tYms19XK5GLqJNMuZzaPj5CgqgsppRkR7znuSs2r4q)sARlKyBkjPMQfUPe(Mkqko2m(jDlqJt9wq9iIyQ1)MmIyHB2ho0Yzc9gXebryZYgPNlp(ZroIMX1TX9h5jKkLsIxlPxn5TvDYxN8WgEUsldbbOjKvVCbXZCE9ApBYgpTwdyJh6iSvE(EkYZSldGWJorCcv0hhRSdRNinQ6XStfegr7wf4xTScc)jHeuOn0KeD9AF3C60N1QZnr)FY3z1AMLP0ycprD2zN17AwCxvMCse0jjuJtSkpirtbblUpf2XQ9kRPWIIBLuzfAi9dwvzhzSEFQkEgvLKKZvvj76rrvPYxlRQYUIIMkQQc9qNrg8Sn3UfeA5zB(IexB3k8p1cPgLprr7mogfpt6D8HT9PrPPaNdA3LZmIOoHgw0i)XiJW8AvOM8htSPISv(JsgO51Qio5pMy)dXEiL8CK7WIuqyeKJYxqKmuB2WyZj85vkMqiaIqtqAZoMGHW3kwphlzsRStXOyaUABvRrLYDugKSOCfCHT3SC6oKUh7c0fXj5hK0cyQ0bURZ(nvWLJyiYLIKAKPLfjBy4PbY9GyrZtrNPNO89cx8mtyU(QxRWqDF5E1srzhvPJmMMMYjN3ecDWxSmdZRGZmf6wxjjrKG0tyOdBEcjz05azrVY7Io8JL80psaY9Cpakx9ebuqE6Qd3gMQt9vnYq(H3uYRypL5nGdAG(FCqluLhZy2lcLZyUMuopz9peF6uLWz9SH4fZ(l4ZsjaYREbkqGeJF55IMmYMmZlyrrMn4UnFt9RcUBRpTrJTkRH2gnEATCpd71QS9vWpJ7pUUKGa0FgFdm8qTAnEqteM2tlCEroPtorfZxRSfCTG8IzgkVkDQrUZtotLeU0jUM4xmtUkP10tTe17PJ)CyI)AWzrQFVA8cCMjK5L7ebnwV6jst24TzkAOAovk8GRxjH5LyCO6nYh5uik3GYDzEc)cnLsGiN5PQbPKUFIoyCWOTy(v5S0hH1b0ulhl(Crnbb3bkSzZOmUScKge9artrLlfwIqGof0boE6(tNADJH(Wd2xFWq9b7F(GWbnCU1eSwNaDewYwaPG(vm0BBOlMQH(bZjqed1g(ympJrfyQFwVJpoEjrw7GpS)GHNO)(H6)T(GENe7UQov6xjH8b1(OHiwyrNE2GdpTVETImfIewWHOio9qQGxVwMvty3UP4to5F5FZBF2dGKFtWOZdducPd8ri42xNtCEzWOJD)cgTElqAX)ZZ0fT2yJn2r04fl6Shx0AN90A)yqfhqaX)egUfhFXz9Gt94G303A2CV1jJoIg7TOBBjz0zBTUpgKHofT7CNQEJEdyw(lwzXeVXHS0q7UIwT7UyNUsQO9U7OTZpqDYflxMNoPDB5Q3ArNTvesNxGVVN)HeYpB75uE)IsJuKIq6KixBGQ4lJVfo1Sm6EB5hO56DSBdPJGN)8I8aKB9mkiL16j34mRp)Yd6uAnsUwmNuPQwiu5KOw1(CUlwzuv2kp25QNKptghJf1YPxBrHZYxsTTpCIQ4CfXe4q0I0wVrHzKbMuHu8DunuHDWdrOWXhl5vDzfScXJOJHqxYYX9d9o(S3DXXYbfhYddj2VtUHb5EepFGM850HYAeapbcwdTLgym3GGUotSKLOBrrafRYyiNGXN4orSk4te8ZBZYxrcaSAGZLJ2odhLx060b7d1ax0)Wbdbo599guPmaKXStmRmXR5U(mtAJC2(l75E9aKASIa9QcuUAZeRR5E3yXrFJEe2mQh4yQYZ8q(zIfRIZvLAB0hktCrvhn91xNeNb(EOOu1STCcvOmUtdMo(AZGCYu7uRxtZCoEOMrAAssbdyC5hoemlpVM8TI1m1Y0qTboVDMQ)8bkXglo98n1ZXEflo)plSAwH14UZTYsAFfDGCyITeYsJN4yo3LLPK6TCKzz8xHFna6SRH(Nbc0Aka1X9EhyU(fx2KlzKLg6xg1Yc4JZp80dMtnVg3yDty183cYAMbcdypeKnnU0Qf(D4tLEu0p48E96JPxFdDISC873b)Yh4JWA2T3UNw38DTmNHZ1AH0PqIk0xTb0Xf)(ne61qjp5u447GZrGhxqSCQ(OJY1VAJ3tOKox81wq5cf6AQ1SO2H(Te3B7seFTmaN3MIVPg(2EwH6qX7QBTNYXVMgzEON8BWHH(7GeYGdh464IhrycKIMykg6D0AVR22g6RarF3oOI34)(d \ No newline at end of file diff --git a/FreshShit/RIOChecker/init.lua b/FreshShit/RIOChecker/init.lua index 7951f36..a819d6d 100644 --- a/FreshShit/RIOChecker/init.lua +++ b/FreshShit/RIOChecker/init.lua @@ -3,6 +3,117 @@ aura_env.reading = false aura_env.fullMessage = {} aura_env.displayString = "" +---@class ScoreColorer +---@field colors table +---@field breakpoints table +aura_env.ScoreColorer = { + --- 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 = 1, g = 0.2, b = 0.23 }, + { r = 0, g = 0.8, b = 1.0 }, -- Blizzard Blue + }, + breakpoints = { 0, 100, 200, 300, 400, 550, 750, 9999 }, + + ---@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, #aura_env.ScoreColorer.breakpoints do + if value < aura_env.ScoreColorer.breakpoints[i] then + bracket[2] = { i, aura_env.ScoreColorer.breakpoints[i] } + break + end + bracket[1] = { i, aura_env.ScoreColorer.breakpoints[i] } + end + + ---@type Color + local startColor = aura_env.ScoreColorer.colors[bracket[1][1]] + ---@type Color + local endColor = aura_env.ScoreColorer.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.ScoreColorer.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 +} +---@class KeyLevel +---@field colors table +---@field breakpoints table +aura_env.KeyLevel = { + --- 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 = 1, g = 0.2, b = 0.23 }, + { r = 0, g = 0.8, b = 1.0 }, -- Blizzard Blue + }, + breakpoints = { 1, 10, 15, 20, 25, 29, 33, 9999 }, + + ---@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, #aura_env.KeyLevel.breakpoints do + if value < aura_env.KeyLevel.breakpoints[i] then + bracket[2] = { i, aura_env.KeyLevel.breakpoints[i] } + break + end + bracket[1] = { i, aura_env.KeyLevel.breakpoints[i] } + end + + ---@type Color + local startColor = aura_env.KeyLevel.colors[bracket[1][1]] + ---@type Color + local endColor = aura_env.KeyLevel.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.KeyLevel.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 +} + if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end if not WeakAurasSaved.Cyka.MData then WeakAurasSaved.Cyka.MData = {} end @@ -11,7 +122,7 @@ if not WeakAurasSaved.Cyka.MData then WeakAurasSaved.Cyka.MData = {} end ---@field role string ---@field level string ---@field time string ----@field score string +---@field score number Key = { ---@return Key ---@param name string @@ -23,14 +134,30 @@ Key = { local self = setmetatable({}, { __index = Key, __tostring = function(self) - return string.format("%-30s %-8s %-8s %-10s %-10s", self.name, self.role, self.level, self.time, self.score) + local score = self.score + local keyLevel = tonumber(self.level:match("%d+$")) or 0 + + local formattedScore, err = aura_env.ScoreColorer.Interpolate(self.score) + if not err then + score = string.format("|cff%02x%02x%02x%d|r", formattedScore.r * 255, formattedScore.g * 255, + formattedScore.b * 255, self.score) + end + + local formattedLevel, err = aura_env.KeyLevel.Interpolate(keyLevel) + if not err then + level = string.format("|cff%02x%02x%02x%s|r", formattedLevel.r * 255, formattedLevel.g * 255, + formattedLevel.b * 255, self.level) + end + + return string.format("%-30s %-8s %-8s %-10s %-10s", self.name, self.role, level, self.time, + score) end, }) self.name = name self.role = role self.level = level self.time = time - self.score = score + self.score = tonumber(score) or 0 return self end, ---@return string