diff --git a/FreshShit/Absorbs/color.lua b/FreshShit/Absorbs/color.lua index 35337f6..81ecc1e 100644 --- a/FreshShit/Absorbs/color.lua +++ b/FreshShit/Absorbs/color.lua @@ -1,3 +1,3 @@ function(progress) - return Display.color.r, Display.color.g, Display.color.b, 1 + return aura_env.Display.color.r, aura_env.Display.color.g, aura_env.Display.color.b, 1 end diff --git a/FreshShit/Absorbs/duration.lua b/FreshShit/Absorbs/duration.lua index 869ca12..6558a26 100644 --- a/FreshShit/Absorbs/duration.lua +++ b/FreshShit/Absorbs/duration.lua @@ -1,4 +1,4 @@ function() - local current, max = ShieldManager.GetStats() + local current, max = aura_env.ShieldManager.GetStats() return current, max, 1 end \ No newline at end of file diff --git a/FreshShit/Absorbs/event.lua b/FreshShit/Absorbs/event.lua index a9e4ed4..e2d2668 100644 --- a/FreshShit/Absorbs/event.lua +++ b/FreshShit/Absorbs/event.lua @@ -1,8 +1,8 @@ -- TICKER_500 function() - for _, shield in pairs(Shields) do + for _, shield in pairs(aura_env.Shields) do shield:Update() end - Display.Update() + aura_env.Display.Update() return true end \ No newline at end of file diff --git a/FreshShit/Absorbs/export b/FreshShit/Absorbs/export index 09d48e3..71fc212 100644 --- a/FreshShit/Absorbs/export +++ b/FreshShit/Absorbs/export @@ -1 +1 @@ -!DRrIYPns2VLXBLAHjyIegJ9KACQXhqmESbxiCMK1Jb1GAanwiXQdSD8g9TVV(sQ1jyxjBT7wKil19RF3hTA9gPoA4iTLJ0mi)dU1BfY9()W0WFXOEQkJ0M44AGDpbn9EdxNvJ0oXY8RFf5AeQp0XXY3eg6X(ZM5H9h1daFAGNVZYH4h9hPnlWEQVPJDLQHxeQZ(5I9dCTd1pZ0BLf6P6tdCDX2(1Ihzj6rPNCMD(QWlW2a79KGm72qbOeYE6ch3RDmTbsDA7EdBpagmW3z0jCPyGJpIqFkJLyKRCmWJ0o(MH9PlbWt)vKX9anaGnZPWIMacGJTFhl0CVrA9Vz4LD71Mn34PowoUaS9uP)Rb96E0Rnjxj4W2h7AJS(e21JYdnAbmb2AwkoEcxZ21UJlqoczNGCpnMaDAD4HhC4(h2y)9A1y)MT2B0SD3Fpcr7SVYHTAQEytLgTo4GghqNPzAgXa7HaDoYhtWnvnWuKFowVWg4lSbcMmapNRm6rDp8FAfMOOCraRng(pGxG(Kzad9yVfidNh(SW8OkwaGjFQJafk2TVzAd(ZBHoKchXimsRJPlku)khBh4k2WmyzcIlPVazGGmfkYusHmg0FjYtsvmESHH5v4s8uWm)4E9jgEkCRn9mNyHjUy0Nt4e2TxV2dgpO7hpFOW98lsHg0f8xq8H5SNIT)rYOM5xXaNh5z)50lLa0qQIv4m6tKXxNvq9)ZTcx2UZ)5mcnjgbwIYXEum0m6zgEOb1swe2KranDZkooKsIoFeSXCaNA)ZaKlouVtGLvO(FSWec3fq4WLHMeED)xPdZE)VSdtwRwHoorvs(U76eB68jc2cS58fKiyY8UMZNdfkIZ4Ygio5lRUk14Gxdfm1cMnZ8XrAJp9yTHJ1gE8GHcGgVW0qAfZX2yxZPAlCEOVnGa6FpgkmVgaIIRrANJrwqbFTaBt4jsHxIZjddNrQDqQGLB9ClNPiWHlUmou(ou)OqDTfMylJRq2iqoQ)rSVgyz8YBRajwlCvLxVNYBqP3HDp93bdZ(k0QvylRUg860crC3DHDJebv4f5XOZCCd1hdO3JYyH6MaPxHmD9QWyvVQH6goXlq8Jb)7VzLb4zjJrGjJFqSFLSGjetF3amxY42jMLLBceg2RDXudR21TV8YrA2OLyU0AGNagDMB85TV86o3Cjz4aBjNfHgH5Izy69xuvbXuJSSGl0hgYwaDxqqWKcbwlheD)F(ilGlOf3xga7VJsBFX4zgEQfYZlZOgMG35uyKNYmLlAko7GowzhC16vfqut75UobRYm(me1SNzCWRzA2bjXRPg0NVFOtaYAW3K4zNb6yp8XgKqFSbg8PFKStkgTOYUNpY1NV1rseemKHZyUT4ez)0D)nKLjYluNM5lu)z33hQBhSCc2fCnNl)WKOh(w4fKvsv18vIDzJnJ5lttkdZ5JGem)AekOG(HeqoXfJUFfjHxkWbWeyMe((CSd8UKWRRq3dvx8ci1yeudzNgHiRhqpb)DbAnaN)cYsahyHGeQ7mJe3aoSyVFku)tTh8Lq9UxDD)bdpU3WFkbn)ns4rHIKaqbVKKLf)Egc)OZPuVvdIcw(HjrpeQ)TAeAgQ)rx8tzrdzMiuPwtm88upZqOAm2OLHlLRuJ5Q04rjbxHTldpPyjL6nBkjGhEqmQoXkOCoQvtj9udvj08l7fJMRdCxzvgIuZWs7xlxzRVlYEE5S0VutgphkJN67hJPlj1tbLLJLXlsxjJq16kY6kXR6MuRbZhDFc3FQtiGrcnaLh9At61w1eusLoRQIIcNuxK0Rhs)GwgQVgriPiUjbeIck0qbax2Mw)lpiKYEEmCDjV95khlOweLTIQisXB1S6hrDCwAPJsPWMhDxS9tMX3yyBQh5PC(qH8XeOmX9yFbN8mJ4CBZZm3lsGgJpsHdAPEZi3W)gpVw9e2Q8k1l(zolYa8RrjCLx(TM3rtVzxmoIDqOsYTnUtimM1kgNFBBqiSKIblXUskIzuFTmdd7Ly3z11kYSsluEAKpMGWSK43gZDW)U71tfGj3inAiOrrizMlRapfjv4Ed7kRcbCaBz8DWSsiLyMZc1ff4KEpO9xlVv0yfu1YDrPIZT3Fxcz0cI5RSUwSgaaOwSOuDRTNrBnpoftI99wuwlu(zS4ZoP0z9lpBx65iYAYuBis6jsUMQflqad(ZGbtLAKaa1FlLT(zc5tUXEW5hE7TLy4Twi5UQW1XS0pJhBABGFuw5dHlu7S0o1yVxXjWM2tTDnx8u4nZ9kkTyEWo053X4vXQbjiOrSegqmxc6MDZCcfEbyopLFsjraHn(HKwGeyS4ImK3ANUWek4NzP2l0JxwNNp)evFohstOz9us8rP1bLUkMM8BfauKrGUdWnvskfJuwGUmlqZktl)EXwL2xy(Ok8Tj(LzzYx7kdgfGpT5TOKiVXXRwr4YeEmecwlbc3GT7wzTntBiZnB24uj5iVjpxdwEb1mQSxUcROSxFe7Ff)GssOlkoOrCUkkf4CroAdEvkPYjsIw1TEppFGtTTBdocgBD(gGsDqZDqcNWq6rmpigJe5nRSbVDYA)HA5oLDGvVeR3AYLJs5kNYv8T5NLcku1OAboQm)07YxhYO5RthswBM6H5uClrHiB6R6lEvePjs9YmYhhbVivs7ah3fx6kjLkUIvj1QiO4hFjQxqXjMmDex4YhgUIm)0auiMex1xwNwhK)k7Pu97CnIcZ6xWRLYoD0xsGtIsnSai8u)kQhau4gBt)JdCrv2HDI17utsvwTA(rfjqy5z4sPYlTod2YdV1yABRFlzrFpR6zLymvDRcq5haViMs8yoHwVKsvLMORyH8vFg8IFXyNF3Bf4sOMyCBLQVWDiLQ4v2QgV0Yb)xTgIZX)W1sIpTt5aLOET4dfTTAZs2wuYpn1pmnUGdO)9f4pg9M8s8x09FpTAj)2CBH1JN1UCRNaOe4SmFa9kUOhQUzxH0Wj8i6zofVTEfVMphzMTFcBdwf3ku3rwiedwELJKkP6Gp2sKFLDEtD1zxrQsfHU3rrx1AfdkLvIbRaJ529AGPjHYS7ZWnkkk5YoCyJyhoCf7CLTIe)BKM8lxjODoBoKsRCgNVMbOhkAzfnfTBYYBhQKjkBrWCDIoqW8yj25nYpxsHGMQkBE7(zl9HRjl11ILXc9SjrlLG8fSJ)GSdk23(NKKsSnQCwwQ21lrYQcbwoZ4MWOqAKESm8kaNFBHGgzxtIAIhmrf8Zuh5nU8oYNfCgu)UTajSnqMnM6nVzNAzqzz6)mNRT0x6PsbSDj76p9b7kf0k)DCy(yFqSlYmFV1BvvoCVwTUtYHK(gh7O5eaEBxIXtxSt1Ajxqt1CwWzi37d1Vgy8KW3q5GMh0il8FgTg5Ao9V7r(e1ZHiZq9(Rc8OlgefAxbyAB6TiUxaakC6MBIjpFZP3)uuZVmzKwGPXiTlrFn4tdw2T)d(Kg9XCjs0XbIMaG3Wo2o2Wvd(6596Hh8Y72gEe8VezANT9EO23JPnJvblv7rwxAcHX4hPaISwTaXA(wYQhMaHpfpXjuOP3(X4BheFBhiPKux(SY1zUl2ZRSU3LSS6U1spY8mJmPw0bQrDZeTQvSW8eLrc8W8wm7Ke2UTtRsSBlDC8xCnN3jDFrYM3WKAlDPD46q5(Av0UCIgXfw5dS2GEpsNhr77xpANvj6WtMExnUhEl3TsP((roGNl38x4hbTkG32wRVPl5JnJSVhii4TD8eph3jGr)RoGXmQDDjsGVZ01Iwl(aL9ueZDUPHb2EKwV2FI0EA0XgkOanzXm0u8FEkcCWTNFcY9pVP7UXpTRgLaAZG31hR5d6zMiY6PToKrzAnTth0UDpINJ9mZ5IMFHWsX9z8zSwpMoGJRjK8L3jzN3Fq3)r)Edp(skcmmLA(64oiNvVemG8)suZKg)H)XTkSVbzkAIQEKwJ6QTQV3iT1aSnBqISh9V) \ No newline at end of file +!LVXcZPTr6Fl13K5GgmbHXy3mnzQFGJX1g8GWPjNRbTGwavlK4wjHTtUWV97BFjT6jYPjDMoDspS0U737Ns67gPnA4i9LJ0nP)hCP3ke5(FZY0FXOEAne33F2mpS)hg1dw4r(nSRNg457UCi(r)r6ZcCM6B56uP6Ml2yW)hb7hqC2yGciOXyN11p1YBLn6P6tdieSJFTm2Aj6XSw2D25R2Cb2b4ZNKCWUn3hycKZ0fUKRDTCaU4Ko9g2zaSyGV7OJfS)axFeL1sWZ3SYe5JhPhi(7e007NtCdCmpX12LaAJEAuq61K97ESFBb)wF)raPqmX1JP08reF4cQAWYXYBb)A4s6Q6MUJ5uLYrIR03D3D)fKTfYBJbJCBm(m51BmCcwobtanWC1BMeEZx2CbfYP2ipjKycFTzwyBZngtPRb75JMyJ)5quWo6BJDYjem6(vufxIJdhl0aijHXBaomY0cOzJXvO7XBm8ci4iYICsIzK9dONG)UaTgoN)ckiOLyPeTXWD2gdWBGyH9(HngVVZGpUXO7vx3FWWJ6n8hIrZFX)Pv4CLn5bL8sCww(VpdoMS9AuVDtQMw9MjH3SX4l1O0CJX7i4NsJg6oHOsRMC55jUNJqTiS9BlS8XfYvArCvs80igxHDkcpjyPg1B1srap8GiuDSDqXCu7wk6PMAkO5N2lcnxhqwzxeI0sXs7xltzRpb5mVyw6NQPINdvXt99JW0LwZx4dklxWH)5ORurOw9gQ6kRp9jeXmPwd2p86yU)mNqaJuAakp2VTy)2UMKsASD1A0OHGuxe3RhYIHwUXynIsszCtStit1YcfaC5yz))8GqkN5rNRRJpMSY1gY2XyRWu2m8wnT(X2DkYweojfKif28WRISFQm(wdBtCRi3ZBZLpMqGm0yFjN8zoXf2MpZDVObAC(iboMrfbRq3W)vYeC1Jz0mDtJb5)SMfAj(zLkvzGNBTUJLWZjFKf5YWKTBBENu8SQvcK)LYGzaK8pgusn)nLCL2FAUItMc8n4fbZZ0ZQWEsOFykoGNX)2i(f(V7(6jhw0dqPiwtjXUilpLyC(BybMqfpsmAixUyxfzi(uri(ocWDC9PU3qFl7uA9UqoNr4DXWKZkcN6DvT7G0vDJXRGDvexQtA6tDrobD3d86AqzauzfYI4vjsLuT4inMKE793LTzWgsMvzDTinjCYArYu1sRmsQyP2IluGjV0XOStfl2DsH76xCA8K7rL145Sr08U0KOvZxGag8hblNgZAbh04Lm26hPK)IykfiIfAPEjgAuMMuUssLnpb74XwoM4hZ0Car9mxaLUt1xq7Z84GzZs0Ikbp1Ly6LxfGSo7q3FfJxfPyuoblXdLbK7fYAXyG0nWkTf5qISSlXfj5jCWpe34edJ5xy1dBpJbymD)N5LZYnQitRq2mwyZjzWduIxpHO)MKkJcHIRs)sohk0SWA)DB1JtWifLvqLfyLBy9ECrPkSjTJmnFzIX5MOS1UQhJDG3V9(ZILB5OvROCzmxhkbRfdHBX2DRQ2MRnu5MTBCQeFLxKLRbp3Hwkv2ZxHLxgU3H9Vc9yADr(rplfhVrooxJRf2NMsThfrRAP7Z7TcQvUE5Km26Snaf6GM5IuoHJ0yDke6n3ylE7uy)UA5oH)(CEowV10FEtcx5eUIVm7SuqXSMvZXrL7NEx26qon)60HuytvZmJYDXkn5WEphYNdtzJepjN6lLruTkUDirE(ckMfNK5xdRGQxuu8xyrRNr5kUW9gHuM9zeQ2StmWoXKOgcYS(zDqJuzVgv)gx(i3cc584683p5ZjMkwviESfEQFfTdakCJJL)rG0wzh67tft2PMIoTA1CE4fvewCYVe6(clbHT9WLgtLT0UIP918cRvIWu1sf7EfYbnpJWn56ze19CkNvyYW8L2WIzEIy)OQzj4ZTvrlImIREPePsfhNTRu9z2ovIkDPlX8CRD83dvLG1)URUmeFVKIpuSQ8a3Pd5M9kRATGMPKVfqf703vvVKvy)9z4Hg(wduy0WR)wA(I(6vBPXQWYf8m7fBgLhkgolYzWOcb9q1T7tK8CsxJEwtXL19iUiNrLtrkY6sKxPAbTXcTtRHBZFnyHsJCXY9sW4AR6Gx3sKFLDErDTzxrlPfIUxXqx1A5FugReDSCSQL7XjtsIgZUpf30OrJmzhXzdzhX5Y3llD5lXxjn(3bus7mAYKrRmwxaZa0d5bwEBX((Sz1PlDJIac27SW3czwSe)LCkEFTj)UWjljNvptL0RUMQ4xlsy3UVonqQaQSG)IvOnGDogz7VGM)s2fwgGL3xlpwcTTdLAA0stdPeRCBPOKeoXLBhMq3I4eJgaq1x)iloO845m1xKD(e7vph0Y7JnD06lEXo1YNiLYGM)3wq5B0vzBcBbpGsYxHTskd1pfh3F(TPA4n13o)wTghUx723Lv4a7XL2r3na81VeJNUyNQ1IdzlTIG8ue5(ngxdYuCaB24Gwh0Saa)aAnIyn9F7rNeH5qUJng9xf4XWciUJ8PdHby)MdbRE8X5yy4cSlbvr0ez4fmbVg8d1HgeSECK(4tosF4y9HhnGodhyAFddzaCENlV(SBUCKEaDap05rYJ0zad7YIXhPtFUkp(GGWPWPGmWgdLmNvMVffAZSbf2hfLp5msj8AcMjH6x35YlPdjd22URzmMDmx3iKPOHwzJXWUN8RDgmEFACuwcYF(gb5a(AEU8kjF0TCJQsFEP(WNqB3MPcycK3i9iPyK(CSdg8J0x4(qFW64X(7rGGTo07y8clZixfFQPxXpsQE4ECMwE)btVqbhzBZhvO14HCaUYfWuVD1AWgrOPUoJNQmUrASXnsJnUrASXnsJpkrqAbhK97bpz2Km1SnWOWJ3MyUNOZWKjXDvxNZiUWgtOlruMNPZAF4HhC4(h2C)9A3C)wT3B0SD3FpkrpB)gh2UL2HTA0S9bh08a2oTsYiMypKp1rgtXDSXRIjy6hDZW(XgBSpYg7kW1BaEUyGPebImpmQzeyXXW)dWpWh0DWp6p2BbY09Hpih2lnjaaM8ztCg7u8lFX0MI7lHUKDUzuTJ(zweeK8W1Xf(fBAfSmgXlEoWIqg)0FmCU00KRhzG4Qf2QRT8SGKV0HblKv4jw6FZWl72RJy9yd2w3E9a31bDF35dLJ82hvMepga)b4gAn7PiVHq0RB9jWNRz40Y9bfqjuZhMpeF96du3NkJFDwbT)ryfUSZz)vyeAffKaA7jUetAvg(FfSfl6oCnpgbAfE)0TR4eNurziwbBohOR()narhUVZcSTftUw4jCfCFlkVU)xPdZE)9XHjphKKosz4WeovQFNDzGRwGPd8giUmySwY74qzgv1nfTHiQW7HHsqqTFHzYX1btXZsKLt6wKc8WctfD2AHgwWpYmXS1ggVBk6UpX2fzVAbIp8WSFFIpiUuyokc83fD5GOlpdQKQ0W0kI7Cc2ZRudzmf(6KA5U1883AsTWV2jRPdP6oIZpMXJ5Omvhe4YPWbiSDrSrWgEEdIBWk2Gzhy7BXAlJ6Zckuh)ulZEfaPw10cAIDkSYtP2cE6bC6fDTtV4Q1RYHOqlJttT4m(JLKdJ3mnsOE3jw0x07WXaiMIoko9uMN3rM0afSjg6b(rENn8MDoPWKhIX1gcXME)tH9GpHnJ4qiv)vYX4MQlDDMznNFT3sxx)fxlC4Oo8X5blgsiSMAgQ2kJmdPShSJLrVWZTTeZpQ(jd60PNO)ppwVLIA7ZOhcEifKpI5H9jxiAQNCs8pxj8MMLiGaq2XE9nDPZJkY5E55SmnXqVS968EAcf2AdLNN9mMGXc)7NGa1IZ8JrKF)MU7gD3U6uaeWrftF3PRLTEEqJ9ODnBbDtF0epxYepPeFSWGmspAkzh66cw3vHzbar6b()3lGHfgfoz7z)dOK7s0NcE)GLD7)aRLykhf1g6P8otzl4sSapoXtBDE)bD)p97n8Olzgytlfdov)tbGMS9mB0CVOS7uxGr6nRR1UouLAnWhTAszLr))d \ No newline at end of file diff --git a/FreshShit/Absorbs/init.lua b/FreshShit/Absorbs/init.lua index 96c2f89..45fe552 100644 --- a/FreshShit/Absorbs/init.lua +++ b/FreshShit/Absorbs/init.lua @@ -2,7 +2,7 @@ ---@class Colorer ---@field colors table ---@field breakpoints table -Colorer = { +aura_env.Colorer = { --- Make sure colors and breakpoints always have the same number of entries! VERY IMPORTANT! ---@type table colors = { @@ -24,23 +24,27 @@ Colorer = { ---@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] } + 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, Colorer.breakpoints[i] } + bracket[1] = { i, aura_env.Colorer.breakpoints[i] } end ---@type Color - local startColor = Colorer.colors[bracket[1][1]] + local startColor = aura_env.Colorer.colors[bracket[1][1]] ---@type Color - local endColor = Colorer.colors[bracket[2][1]] + local endColor = aura_env.Colorer.colors[bracket[2][1]] + + if startColor == nil or endColor == nil then + return color, "Color not found" + end 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) + color[k] = aura_env.Colorer.lerp(v, endColor[k], fraction) end return color, nil @@ -54,18 +58,18 @@ Colorer = { return a * (1 - t) + b * t end } -setmetatable(Colorer, { __index = Colorer }) +setmetatable(aura_env.Colorer, { __index = aura_env.Colorer }) ---@class ShieldBuffer ---@field records table ---@field recordsToKeep number ---@field pointer number -ShieldBuffer = { +aura_env.ShieldBuffer = { ---@param recordsToKeep number ---@return ShieldBuffer new = function(recordsToKeep) local self = setmetatable({}, { - __index = ShieldBuffer + __index = aura_env.ShieldBuffer }) self.recordsToKeep = recordsToKeep self.records = {} @@ -108,16 +112,16 @@ ShieldBuffer = { ---@field name string ---@field value number ---@field buffer ShieldBuffer -Shield = { +aura_env.Shield = { ---@param name string ---@return Shield new = function(name) local self = setmetatable({}, { - __index = Shield + __index = aura_env.Shield }) self.name = name self.value = 0 - self.buffer = ShieldBuffer.new(30) + self.buffer = aura_env.ShieldBuffer.new(30) return self end, @@ -135,11 +139,11 @@ Shield = { } ---@class ShieldManager -ShieldManager = { +aura_env.ShieldManager = { ---@return number GetMax = function() local value = 0 - for _, shield in pairs(Shields) do + for _, shield in pairs(aura_env.Shields) do value = value + shield.buffer:GetMax() end return value @@ -147,7 +151,7 @@ ShieldManager = { ---@return number GetCurrent = function() local value = 0 - for _, shield in pairs(Shields) do + for _, shield in pairs(aura_env.Shields) do value = value + shield.buffer:GetCurrent() end return value @@ -157,7 +161,7 @@ ShieldManager = { GetStats = function() local max = 0 local current = 0 - for _, shield in pairs(Shields) do + for _, shield in pairs(aura_env.Shields) do max = max + shield.buffer:GetMax() current = current + shield.buffer:GetCurrent() end @@ -168,7 +172,7 @@ ShieldManager = { ---@return number current (raw) ---@return number max (raw) GetStatsNice = function() - local current, max = ShieldManager.GetStats() + local current, max = aura_env.ShieldManager.GetStats() if max > 1e6 or current > 1e6 then return string.format("%.1fM", current / 1e6), string.format("%.1fM", max / 1e6), current, max end @@ -185,25 +189,25 @@ ShieldManager = { ---@field ofHpRaw number ---@field ofHpRawFraction number ---@field color Color -Display = { +aura_env.Display = { Update = function() - local current, max, currentRaw, maxRaw = ShieldManager.GetStatsNice() + local current, max, currentRaw, maxRaw = aura_env.ShieldManager.GetStatsNice() local hp = UnitHealthMax("player") - Display.current = current - Display.max = max - Display.currentRaw = currentRaw - Display.maxRaw = maxRaw - Display.ofHpRaw = currentRaw / hp * 100 - Display.ofHpRawFraction = Display.ofHpRaw / 100 - Display.ofHp = string.format("%.0f%%", Display.ofHpRaw) - Display.color = Colorer.Interpolate(Display.ofHpRawFraction) + aura_env.Display.current = current + aura_env.Display.max = max + aura_env.Display.currentRaw = currentRaw + aura_env.Display.maxRaw = maxRaw + aura_env.Display.ofHpRaw = currentRaw / hp * 100 + aura_env.Display.ofHpRawFraction = aura_env.Display.ofHpRaw / 100 + aura_env.Display.ofHp = string.format("%.0f%%", aura_env.Display.ofHpRaw) + aura_env.Display.color = aura_env.Colorer.Interpolate(aura_env.Display.ofHpRawFraction) return nil end } ---@type table -Shields = { - [108366] = Shield.new("Soul Leech"), - [108416] = Shield.new("Dark Pact"), - [207472] = Shield.new("Xavaric's Magnum Opus"), +aura_env.Shields = { + [108366] = aura_env.Shield.new("Soul Leech"), + [108416] = aura_env.Shield.new("Dark Pact"), + [207472] = aura_env.Shield.new("Xavaric's Magnum Opus"), } diff --git a/FreshShit/Absorbs/text.lua b/FreshShit/Absorbs/text.lua index 6a63d58..660d4fb 100644 --- a/FreshShit/Absorbs/text.lua +++ b/FreshShit/Absorbs/text.lua @@ -1,3 +1,3 @@ function() - return Display.current, Display.max, Display.ofHp + return aura_env.Display.current, aura_env.Display.max, aura_env.Display.ofHp end \ No newline at end of file diff --git a/FreshShit/BattlePassTimer/export b/FreshShit/BattlePassTimer/export index a947484..4d260e7 100644 --- a/FreshShit/BattlePassTimer/export +++ b/FreshShit/BattlePassTimer/export @@ -1 +1 @@ -!DJvxZPnox4)lStMbMTK1gOjzV49ccH0qwQjd2PTzBJbHTmOgJeRSmb67w)BFp6dJnjHws6U7f7qlXs(OZNspNhHVTVNV7CF3q5)GhtwG439EsOyMVJTLz8GOOeS4d(oWeR1d8DADmmcrdMX4xXiuHVBNUoEDhAwZqMajimQArBnZBzHyF32x7nW3Dck4UPCwknSdlMXbpWXwUcNgQVBQ(UL)5hDsRx36y7wNy)RnSFDZJ8JQ)6M(GnfCY0PyEIELEBMq946fGHcstemictsNGxIPc30OiYkF3rDA76nY1R9qq0q8eyAp1cUOB)Ro)6(WKPCDi4A77QwleJZqISXVfNKGMIlu6vCSsPUx1TpSYukbKDrmAn4jUu0CS0bfYebooUxOzuk1Ovbzoom3vhP9BZRYD)61ZgFv)230D4ivAUNZBg9(bd7F2MP73T97kM9YOuAG07RIRLDz2y9NywakoBmHgIxLn()Ln(NEpgDxBiqtCrlXHh2z9DOd7ZMsO9OrSpEneioG7xTIoyQu72p6XcrRVf05gTsIYgJb1b6RYt6JvYglMHPfRi)Zl16F0eb)C2y7BvbY)xTmpirQg(gSq(C1AF9Xgv6U)yggmz2FcwHsI3vK93teERuwwQ4XX1JTiMgwmjoob)eLLT2J8puvzF8zLVQD4lRx)x4P0sw9q3aeTRC7Fs1DSFQ2tSS92zR0WQrR6wnR3Ozf9MNNTomhpt8DFgNj3CaFgrIaQp0RGbkaTeWha87fdKzqnUaJIbi8DHpPv1zBW3KGlE968BGhBBzzTdWdowKYHm(CKy2HrXmgVkcuXimD5HDqXbPXibEanMqX66DTxLn(4gwwWFSvL7I0wjR99X92FxtWtXglTvU2OTNiz7gss(SsLlXY(zRHVud80IP6wbveqssaJokOuFkBvFkBvFkBzFk4BPCubMtrXVd6lP6a24iOsGJJEqFYjiEPUENFsRJpU5rTSSA16Og22QECTk1jSKfcXjiHS6H9NSvp6B0TBtNmepfmDP2IQCRSCbwDe8)I9z4vIrjZqHS7)qEVD78faAs(EJu6hpyHz4EKkuYfXKrD3vl4qBZ7rR3YMFZ((LuIw6BY9W625ZxKx1ukuZUKKqMeJ9pTKlO7U7DbSzAW1E975018YTiX0ZXrDU9CVC2nBSPLr(pdBMirRlkKCjZgSNk74mqQx9k)WdxP0nCjFrUHYswaA(YkaI)7xag27nx8VrfOLScmHXdX8rjQ5BTzSwfQZPLkh6xUrOGVF6ZizPuIzgCOKdP7FKI4qNYZtJb2eVFgbovNlblNSTgRAgMmDgm8eiCIzidJDCGIeFASGKdQLMGbpB(eKqcqeeJssEKmQW9btkmOjNgdyOgI6NDMsFTdLzDCio8TOvsTMsauw2zC2GAO77UAQmNtMR7Oi9lbIlKpKtJ2GVNGbyuGbSjJszuS0SZre6(lDeHssMT3YlEyea2cIaUcK0Rm0Og9xJCUjekBqf(orhySrM(kNw0VAhKl10Wk4lUdzaESF1Wo67YsDFu5wsxs5zxQySPMmeo5uTYb3u)G51piusT6frq(55o7qdpN4)BD5KFyFPqrBL1YU8BX4rj9g(jp(AxICzSkEveJNn(UxjVtMSiraNLSar4jvF2(CnOwYE6R7iv(w0Y33RVSXL1pa33Q6J0v9c9RVb2tD5e4(iplRuCPH9t)BD5NYd2qnuQA9Do0ics6CsuafTUefnrtxNVWGtYYwgWBIitZV6oGlEHbaUPPFskhwv34Lx3lB8PXi6D5YrcdXaXANUVBZViIxU89K8dJqb4p1bb9XOtpfX)019QxmQURCbsqjbt1cLfSmNm5XwnLCMLGVNIeIy8va4UmRayxrCyhbCZbKaP4qGIxmt)096FsNJT28J2CUuwn2NBNHD76yCZo7dbxP3uW9u(aJtaE7M7tCXGH9(9boET7RYHHKCivyXRk1sgIpWtgSO41YeTVBJdTp6WM(Ulbd2QH0M()1d \ No newline at end of file +!DJ1BZPnot8VlCtMjm3bNnqd55f9feItHCutgSttZ1wdcBzqngjozzsOpx9N9BLSSnKaTK07UxCdjG969FA1U)2v2Z0Z1ZzHNtG8p4Y4Li(D3qceZ9Snn03pmmmglEVNnqaLiMZ4dxkimAmiHWZzD2Z9SB1wYa1hy4kgHcpQRLTR1iTAgXeiPyk9SfL3YcWEoDU2DiiVFUQDIfiUiZgekrELtaBSFsSGTW7mph9voKW0j3Gr31jHJIDqRWb17U(ou6Kx)60jusu6eXCmDF8Ko5))10jyAq6L7rr1hWMrO9PHSdrLBX9gkp9sxwaATIyasGpUYr3w7Of1okOs1dW0F4AieyJwaYTmcTgZRu9tpp3zpA45S(3Lk(GAz93GVuQOTIAPxIaTmgtxvVlkYpjcIDdPrek2LSaR4omHQYAogcKPtY(eX8rsFjNhJYhfY4PtU7xsNquBseWzjlreE8XVuFUkSLYknq(hz8uAdPoyjIm)n9p3ko9eHY)u45zx8ZPto(j6QwP(jujPQpvF4Oy8ZYkVbR0oempm9R2M21nCSiHt1Q(s1JK1YHqXC8CvDnCNGtMndZLf82k0inb1LRxIllZJtMIxHPcNKWqYdEoJ72XXDSJBNrU5mnEorIKinOerd2jvaooMEokrbeP5ir6K3IJJrZWL68kowPtNRSgmqZCSNZvd6CR1OXkuS(2Vz8ndhn480jAYdS68UcQL(zTAfCCicMEzr6l(P5VeAa(b1g0p9IlOUSuRYmsCwPALD6Jv2xA5l16FqVcGmltDTDr2K62I0TVU7cOFmd)PdVG7h0qBvyU5667vYa1N7yBzRCK)H2voeFw5RAO4A1(vEYMq71D8rulvXYX7jFQ6oe7GD2knmA0QMrZAnAwjl55zRd5Og4OO(b6Pv0afzqlAqHeQ(cnWbfuHM9e5GhozAdquWtbWhxLS9SgC1fxpiJPsqljOMDJxoqM2t6HrrWqy7dGktvNxaWjXCC7393G4VPHHXEWuYbKxGeZRhgXy8J)w9wpUAvOjz7gggWpMQSGsOXnS2UdQBchE4UMGNG1wAliDT22rW2jGe)zLkxHLJFUoBgYvy3m2udxc7iYPi9z0X(SigpRBJ8VgQVBQ(UL8B10McmNIIEh0xsnWAJtKAMSilAVXOP6DwkJIl73OJdXyWCqAhOWfic9W5UOb5HXpiXueVB5Y6ItB1UDZtAzy0Q1jnmnpXlS2RAPwQgpEPgGJrcPMXEt3AC)BZgtpz6i8m9a56(ZkZlZBaRog(VmHh)GyC8Cua7(3NFMaZCbanjFUMRSlpAP(2dyprXxitMzz9Wso0a)E06TS5gra56Sy1A8iLKX9T5EynZC64Oq95wYoksHjDiFrMczOjTIetMgHLhbrD)wh5PVTTc9(c38ZcvyPC5)mKltcxxE8iU8CqyxvmXEOTvUKV)XskDMm0h3Eqj1WRDh0hyxixNVOnaX)v3ag1)n9(3DhOvzXbeQNY4bYogz)Q9qvHAbTy1IQvX9(F)WNMZnw)Ak4a50So)rcIdDYVijcM25M5eOQoNdw(H0ZqmMJjZMd3EkSWIyi1H)tIXGtSyksKHfG9vVDGKibjhR1pcfh)eQQvYJik0OjNfbG56d4F(5kJ0jqg)Xb4G3IEOa2P73pfCBzbivqwUcEYDtqPmGE5dFyJTpf4FSQzIo5qzw5EEchi2xc6hI8XFSlcYoOZodX)419RvExnhPaA5k87E6iztDkIszwrRUUF6KZIquqac0n7mKqeHVccFYwRGp(fg0pt)kvyQuzM)Q8goTnAAK)ws6rccWqpEBR3jtvZsLUGdZOKTQD6oYYYgABijbtDGeivz)9zVgN2sfHIwopJkefcjZYFRksdQq(tK(i7CoByv09wpmdUHtG(465l6nCu)FFOTBNbkneq249)mf5F3molHg8nbaU4KtB9QwTnBDQ5)RH5RAQ6k1uLNuw3RRhLe9CAu38K6n9CwbkSvdzgG3F9 \ No newline at end of file diff --git a/FreshShit/ChatKeyScanner/event.lua b/FreshShit/ChatKeyScanner/event.lua index 0ff1f41..7b2786f 100644 --- a/FreshShit/ChatKeyScanner/event.lua +++ b/FreshShit/ChatKeyScanner/event.lua @@ -27,7 +27,7 @@ function(allstates, e, ...) local targetLevel = aura_env.config[keykeyname] or 15 local leveldelta = level - targetLevel - local color, _ = Colorer.Interpolate(leveldelta) + 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) diff --git a/FreshShit/ChatKeyScanner/init.lua b/FreshShit/ChatKeyScanner/init.lua index b176fbb..d883109 100644 --- a/FreshShit/ChatKeyScanner/init.lua +++ b/FreshShit/ChatKeyScanner/init.lua @@ -1,7 +1,7 @@ ---@class Colorer ---@field colors table ---@field breakpoints table -Colorer = { +aura_env.Colorer = { --- Make sure colors and breakpoints always have the same number of entries! VERY IMPORTANT! ---@type table colors = { @@ -23,23 +23,23 @@ Colorer = { ---@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] } + 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, Colorer.breakpoints[i] } + bracket[1] = { i, aura_env.Colorer.breakpoints[i] } end ---@type Color - local startColor = Colorer.colors[bracket[1][1]] + local startColor = aura_env.Colorer.colors[bracket[1][1]] ---@type Color - local endColor = Colorer.colors[bracket[2][1]] + 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] = Colorer.lerp(v, endColor[k], fraction) + color[k] = aura_env.Colorer.lerp(v, endColor[k], fraction) end return color, nil @@ -53,7 +53,7 @@ Colorer = { return a * (1 - t) + b * t end } -setmetatable(Colorer, { __index = Colorer }) +setmetatable(aura_env.Colorer, { __index = aura_env.Colorer }) aura_env.KeystoneIdMap = { [197] = "Eye of Azshara", diff --git a/FreshShit/PersonalAnnouncer/event.lua b/FreshShit/PersonalAnnouncer/event.lua index 4a18fc1..e5b422e 100644 --- a/FreshShit/PersonalAnnouncer/event.lua +++ b/FreshShit/PersonalAnnouncer/event.lua @@ -1,12 +1,12 @@ -w-- TICKER_500 +-- TICKER_500 function(e) - if ActiveSet == nil then - ActiveSet = Cooldowns[UnitClass("player")] - if ActiveSet == nil then - ActiveSet = {} + if aura_env.ActiveSet == nil then + aura_env.ActiveSet = aura_env.Cooldowns[UnitClass("player")] + if aura_env.ActiveSet == nil then + aura_env.ActiveSet = {} end end - for _, cooldown in ipairs(ActiveSet) do + for _, cooldown in ipairs(aura_env.ActiveSet) do if aura_env.debug then print(string.format("Calling update on %s", cooldown.name)) end cooldown:Update() end diff --git a/FreshShit/PersonalAnnouncer/export b/FreshShit/PersonalAnnouncer/export new file mode 100644 index 0000000..16c9d4f --- /dev/null +++ b/FreshShit/PersonalAnnouncer/export @@ -0,0 +1 @@ +!DRrdtjUsY)lu1whuhsbiFOwVDVtDXB1Zf9zWZ7QNVaJjtGznKHAYeuE7j)2VUNjjKqsu4TU7Z3vIqspZ0t)90DsB2WCGPXutdB8dCjpq6Y8OMgxC9GZpTFptdhUN0G9BuZ(nAAAi5wZPcFg3ZSF367wVUPHf3LlG12VH6tt137Q(Uf(TeqnZFMlzXa6JWnVBMPXIlCC8PsZ(W6jEwt4Il5mpyWJ71FqVRmn8PUoHGo6IbdU4ZMgpMync6yGegSygqPsfwTc8L8P4oC9mBIeGhe(ljagGizw3WSLtmnoeUhGAjbm4J8SVKiKWfawyEm8kdB(qncnpkc1iIeKHuV51SP3fmE5O3VCKdX1NU8SLNTZo783TCj((lhDeXNEmN7AZFWtpGdJ6AVCKhzkD5iFPG5no1aomxAHdYWvgm9oQiny)l8I3Lr3bxrjP3oINhpWZIAN)Wc6ucWUWUfJ(ygmflG85xbECK(pefZicY00KwodNMLYzcOnXDeR7nMrPXO6VLEQcQmq4TUunAgE0h06bGrr9zzMDv9gxDn0xz1II(ZLBrCbcem1uibmUMsLej5oxA5V(u1uS96)nCiZZM(OAH5l3YS0NYHgWnVgkhFVsCM)4Ab57dLOzMt8WArDTX(b3vouguc(G)mSuLTCH)f162KL5YFGkuRRigCLbEHmbZjJ9W7XjZanKCc1Rynr2DiKUC4cWVVCPgpE7TVZhzNutnhILQ9M)9UrVRwdN49kfZSj7TND(sL1d7OKgJMb7SS8AeWXckeYZEnVLrpWKtsgLjpHrLcOaTbAQGnjI7L3Kte35fMzIqqWmRNDwro)kx0ZsiPQIXCZjII2xoF3WetZkCWta6uf8OS)mQR7P2heffQs8vvZgJtFct6ap4oxnnMFMqo4joWSTbvlUAfQsU0YHXfkgfzujkCUC0hqbje73oj2bG7wiMsRfcrZFn5Y3z5O)bvoGnLwUssbFsRupUCDIsre5y)8YUZhGophZNoZLk175Z5sUrgCf6EPi81XJI0ZHBsiR(PLJAuFJzgdoyJSDmIueuiFSHUPPaSj(GRU7B1BlPgmRNYZ4Aasa7tGOs5fG9upjv4qSO3ERbop)BVL4sfsFmOBn(4XBsq(cJPwOYj3yTVZhLVlhXDCw57gg3xjovCIoSlSHYCd7wT4nnwlfjqQSPhACdLC)Had6xZWI41Bo1t6xU0LNF4)ziKwF)pQOIyS(QOPrZ7FmA5H(Ww9hKQM4oL7l))mv(YZEATcymWZcpiTYowkQg8nsnbAA5vTya(DFP4u6Rb7WwHuLqLOmzq8Ug9UkoCI6oGj(7OWJcWCEvCej8qkADx)xi)MCWw(YjncIYjcYDqrFrdxPO9nZzg5J9KtRAbXHkELQPG28jS4pvsNwKbpo2Be7DfP8NhZ90K7RO1E(i(nJXosEVDT1pkWX5GcFgvm)dbrWCAINz0k0h448w5PbHKYFE8estUVIEc5J488ea8xBLYT46KED9ycfUrLscCi9XzmXIWN3Ml1swUda9ApMe5LYLqjlveN1u4ZM4SNPo4e8u(LmHzbMOs7ONQexKGA2Sh10MiaJLzRy06BywC5wqEeE2IIWJiYKfGhbB7l(gmMxo6ZCbSyx29W3LUeMqpKSO2L(dR28umz66YBVTLL)mSiGZsF3lBpHvv8nFBLRxyjCPcy8JVi9HuTDZ3CfCfxPw4oS91LLQURVlLwV5ALFGfutdnZ)ERsaGV10jjQ9vUyggDepl(NsE0)h(V45cRscs7DAqL63LbowweOfbvZfFFibYIa6VEAv)sPBicbJlk9RRpuMKrv1wPYqPr9UT72cFTnhohsRqDkAJADQuDZwD3g7JR9iIuI6KJfl2oe0SE72TAJO4c7fipDsWwJIon3VRIiOcFQ4Em672XenBUFtfcC5C77iYj5S(NQUMKgCIUFlL071QbM4sPpse3VC0Lel5wsO1B1T7UigU2dSevUexr95UZPBjI2Vt993dre4Bdrc(ermN6VrudwOIchTB3qj0(eL4kN4l5EBerGHTuRVUssqj2pWqF6qsGMNb4tkFo8DT7aNC5pr9E3H7apMXJbLUUrcgedqDP698h9A41)oudKIU7XWMWSXgcaYrY20ym1Jkywgt4pCHNPHV6xT7lCxWDQLEPG6WE00W4YENF(kWgaNHGhE8HgdgAm4WRgeUx(Mgdo94)zVRg2w18dHefMaXk4lploSDYioPICMmqYZN9zbXEYgf5xW0OpglZlop6k)6leaFZjJxGC(6tVqIDPUXbZ(EyIxygqw4)ZimHF5SBbe83M)T)(rjUUkpTGWsyWdz1N7yfxQ3Z92qJM1bHf9V(XjWxGrK(Dj6RBPKaSLsm0Qdtde7HdeA6Q95mnqQ3Xr3slFQ35xEY1NRx(khbzyV08fLXfAgd8JUvwMthON2N5Glq)DAuhN7dCH9ncYmtJBIVIHjd4rC)xrTXtZoMgFbmJzolmnoV3jdWwYHnvvUuY2Jj0n0JJThuu9uHUH(uloKxbUNygPB(SJdcSzZhBrhqcFjq7CGhommZBHQlFMWfxmlQREqCdzyrH4iWrHymLWgn6eeQwmBC8v961hjIhP26UdQFtDln55WgRXYdk4N0PoeWE)w71UEt4Nw7z6StR9b1dsoFQRZ)UYNDLSkaHmHYgprclODNUWXXD2BVo1B2PDJWfGCclbr6YjQgVsczK5jBQAhRaavXXfvWZaw9WCYa1MbHTSailYmKas)llqUBwGZMpRGnfCDe8GzzG7OBMQmWbhbRSaXEjBnGsDBMzACIG9Blh9ZbeBuRbHuvYiiMBZAn6uBxtJ5GMSvtSPYm)F \ No newline at end of file diff --git a/FreshShit/PersonalAnnouncer/init.lua b/FreshShit/PersonalAnnouncer/init.lua index 29153d8..59a545c 100644 --- a/FreshShit/PersonalAnnouncer/init.lua +++ b/FreshShit/PersonalAnnouncer/init.lua @@ -7,14 +7,14 @@ aura_env.debug = true ---@field isOnCooldown boolean ---@field announced boolean ---@field remaining number -BaseCooldown = { +aura_env.BaseCooldown = { ---@param id number ---@param name string ---@param playbackSpeed number? ---@return BaseCooldown new = function(id, name, playbackSpeed) local self = setmetatable({}, { - __index = BaseCooldown + __index = aura_env.BaseCooldown }) self.id = id self.name = name @@ -76,57 +76,57 @@ BaseCooldown = { } ---@class Spell:BaseCooldown -Spell = { +aura_env.Spell = { ---@param id number ---@param name string ---@param playbackSpeed number? ---@return Spell new = function(id, name, playbackSpeed) - local obj = BaseCooldown.new(id, name, playbackSpeed) + local obj = aura_env.BaseCooldown.new(id, name, playbackSpeed) ---@cast obj Spell setmetatable(obj, { - __index = Spell + __index = aura_env.Spell }) return obj end, Update = function(self) - BaseCooldown.Update(self, GetSpellCooldown) + aura_env.BaseCooldown.Update(self, GetSpellCooldown) end, - playComplete = BaseCooldown.playComplete, - playSoon = BaseCooldown.playSoon + playComplete = aura_env.BaseCooldown.playComplete, + playSoon = aura_env.BaseCooldown.playSoon } ---@class Item:BaseCooldown -Item = { +aura_env.Item = { ---@param id number ---@param name string ---@param playbackSpeed number? ---@return Item new = function(id, name, playbackSpeed) - local obj = BaseCooldown.new(id, name, playbackSpeed) + local obj = aura_env.BaseCooldown.new(id, name, playbackSpeed) ---@cast obj Item setmetatable(obj, { - __index = Item + __index = aura_env.Item }) return obj end, Update = function(self) - BaseCooldown.Update(self, GetItemCooldown) + aura_env.BaseCooldown.Update(self, GetItemCooldown) end, - playComplete = BaseCooldown.playComplete, - playSoon = BaseCooldown.playSoon + playComplete = aura_env.BaseCooldown.playComplete, + playSoon = aura_env.BaseCooldown.playSoon } ---@class Buff:BaseCooldown ---@field isActive boolean -Buff = { +aura_env.Buff = { ---@param id number ---@param name string ---@param playbackSpeed number? ---@return Buff new = function(id, name, playbackSpeed) - local obj = BaseCooldown.new(id, name, playbackSpeed) + local obj = aura_env.BaseCooldown.new(id, name, playbackSpeed) ---@cast obj Buff setmetatable(obj, { - __index = Buff + __index = aura_env.Buff }) obj.isActive = false return obj @@ -168,22 +168,22 @@ Buff = { } ---@type table|nil -ActiveSet = nil +aura_env.ActiveSet = nil ---@type table> -Cooldowns = { +aura_env.Cooldowns = { ["Warrior"] = { - Spell.new(107574, "Avatar", 1.6), - Spell.new(1719, "Battle Cry", 1.6), - Spell.new(205545, "Odyns Fury", 1.6), - Spell.new(26297, "Berserking", 1.6), - Spell.new(12292, "Bloodbath", 1.6), + aura_env.Spell.new(107574, "Avatar", 1.6), + aura_env.Spell.new(1719, "Battle Cry", 1.6), + aura_env.Spell.new(205545, "Odyns Fury", 1.6), + aura_env.Spell.new(26297, "Berserking", 1.6), + aura_env.Spell.new(12292, "Bloodbath", 1.6), }, ["Warlock"] = { - Spell.new(108416, "Dark Pact", 1.6), - Spell.new(104773, "Unending Resolve", 1.6), - Spell.new(196098, "Soul Harvest", 1.6), - Item.new(5512, "Healthstone", 1.6), - Buff.new(0, "Deadwind Harvester", 1.6), + aura_env.Spell.new(108416, "Dark Pact", 1.6), + aura_env.Spell.new(104773, "Unending Resolve", 1.6), + aura_env.Spell.new(196098, "Soul Harvest", 1.6), + aura_env.Item.new(5512, "Healthstone", 1.6), + aura_env.Buff.new(0, "Deadwind Harvester", 1.6), } } diff --git a/FreshShit/PrydazBar/export b/FreshShit/PrydazBar/export index a499b34..3d289fb 100644 --- a/FreshShit/PrydazBar/export +++ b/FreshShit/PrydazBar/export @@ -1 +1 @@ -!nFvBVTTnq4)l5tPalg2jzTFAdWwwUXfoYEwsRBafsIwKwMnYKAKuoXfd63(o(IKTRNtZ(2qAvipEhVN7fE3LKbjrjHBtcX6)blLviXtFMIvBscg03TF(61sI6pscac7TBmRrS8nCXcoLPsc98dI8xMe(noFR508APIVnI8IkUcJuKKWA3Vnx6sUcPOCMH3tO8ihdmnmoAEs4ku(tfcEnd7Xl5caIbd0seCR57DMV3dF79ZjaiucArbriT8f1rWAAKYYPGHEB)pC)hUfGJKKIwj5IvgnokjSGWicAE4g(ZZzGeMFpmxr3PrpJcAOQeThUVqgAlrRgv3f72zn70nuTrOOBj4oAQ9vanYoI2Fz3yprF5TKTsiRxziewVEn9LKWuVHHrPHXEE(HHwOBWZi39jHaW8hhnmkD28pM6)7qWinoyY0zqmXFCNs94BxHunzZ4fq4RwGImOyu8KjqcazfOnlLh8NTys8mRMA9CJoG3BUPj7vuyZN0mmHlAYK8TKMmbbj5SMm1gydtVQSg1KTdIvu9omNi1hay7zU4PMSRFMQ2asdPe1Wj)AtMXemRm4PjtJF4BvvjLG71R37A(06AwUof6AYp1Kzj1Kz)PKNJaHADSW5ebaVFbSJz(Xlqcjr07JeWJBz46tfNU2jqZFdIWOLgBHDGH2F0gELaEsCnW(7o)CbrvlosocddBorpTyeqhORRcx4pBw6W4LdthUyXSP(JV6skV1i1oik(Y2OnG(DM4)zt9TAYxY0p1f89SFjJtHefKlh)gtKQa4X5)VmU)vC4ct2WSTQeKpd8NfdVTngXv26nx9oltwB)hbzhuYuIAYpWBB2y(4EQZRf5KyxPfm8cZuJo8U(hQjTqqm1Km5La5dI0vD0uATT8YiDzXA2HsXknbmv(vZRvDTveBp8XSjYYMPKCWnqpiGxAoNLMFudGbMgadmnagyAamWWhtremu5VBlRam9E9Dt3ATcDtaWdQmngmL5GkrKdMPRaTKaQdkNdx4weL925EnLrLBEZ8RST3WcE1u2ebhkqVkj8LJAWUcj8UGv3)GvJjsOiPq3AfKVsWleePeIs5u5jnyT38FAjuVAjPao(OELg8PdBGEtH)dxoOq4KvCbMis5oKDFlVWLypQJf7ibgKdmb9(7cBQoEYF1o5doIZDGbSQ00A2rHGla9g(x1ib0izsTUpWN3q1tv44qs)grFrg)7gcTydG47633MfP9qLCKzwhfQeYMng426sfTnZ0s)mY5LiP8mQyk0GohOS)SJeOCY5e5LNtSAx1fukLPN(P6m6Rr5TP0NqhkPKForTl57iQC5eJa1IDtCnE8HmsVx91MBClliKh)WYGzQBv3dcR(u08N2pUTMYkDUMcYwMx1ElAVmNTMwyxdvrgI)kmXbbtWpIErlIClNR2SWLKRZmoLlQ5IfMu7OJtOBtqAFQbs(SDo3BD5gqQJ2nSC6hFamiuz1gK2E1OKRz34VEOlJYMFxlar8l3fpTjlGlGrJOW4Ble7XOV5ejQLTP6YtqKJ8fpe4myfJqIVep9Md7UjulGtoTHO457AlM9H(M0ylmOymbQlhatETS10g5IDDaAujIb32Ab0kbgfgPCgK5r6envRlk0BPVFa4k1yNSF6UyVk)QF7oNY8ElvE1WK05MgBRjzQiXfui121ibGB0uVHZsNgald9nrCm9OmG1q0zsjQagPDEC0SPb(6IMLRp9VZqNpbJY3BW77bWChaJ7VvJKK)5 \ No newline at end of file +!nFvBVTTnq4)l5tPalgooznFAdWwwU1foYEMwTBafsIw8SnBKf1iPCIlg0V9D8fzNed3M9THKQiD8oE3ZDhp(0KRtwKq2MqyMFXxvvu5dFHZ0BsIUUR)7PRwPa9FMeHcO16nc50knxuQql0jK9U1DlxMJlptWlXfccJweopH8DHyRD1LcjdKdO5pWKIQesyXU4XnzdkOLp491CHMA2BR(VqY9cgKq6hVyk6M8w)tuAQu7cKv8sUAJ7D8vJuctKMxR0yaSmH4FJGkyuxuQhvqxRsitJxmzCuiAwUOmnxuiKOXrxB)TN95n2N3AEA3EnilPfFgKkB0279yOafREf0x6X64Yrs0DMGyjvgCgh09OdyGIQRLunySPskwlbLAMeY5QxKECj))YjOE5CyTpZezRT69vGPQjPOFtX)HBo6WdRGM4QkTvNuf)7GjoA)2vsTXnAe8K(q(rFqNNNX6Abu3xdiVM7WWFzbKm4GeGTgJdYFxtLqt2O6IIMSVSHJaVvdHV)6wxDBdWxVb)8MUiK1s(61yr4iGDcCnZqrXyS1Ux37U9UEys1KqnzpYnOPRHsqYZjBepoffPS)Tp2zTdDDjDl47VRnTsKQc6EtwQUe2bMsSMVfyT9uPB4MUtVSAfKsxQeYL2M2bTj72(pt5yHvYG4rJoShoL8BVzpSEEWbG4JhVcbITlP6MSjI12YOvmPE1k(tjK0G(KfPK4GGqcX0nTexW5Ypgoz2O4jop0MIg43w8SqW07h0Fr6KPFin8ZyBCAC0OXtWU5WHEBe1YCiUn28EgBnTEMmlCYKJq9QRAY(b7yZNmkmsiBYuITy9xcuLOSjtVb)O08wrnTjBN7CwtgtakZciWFuiFOj7Yh56nO14qIACLFVjZgo23SORjZKUXNvvfCG1PtN318Pv1L2rixc)stMtutM7NcrofnQfx46GedVFdXXKW4zuPcKD(aGPANcx(sZ5R8g08pOjL8clwkpQq7pgGxjXPfxIQ)Utxxc45)NzhuYWpEHFAJrm6qFDHn1N2pEE)0(ZMnzC4WloNZBbPjbXzNhJU2JxbX)Zq9Tc5Zb9ZKcEfyWlcwdNVEneu6i8u9)ZbJTU6klUYQB4f2)I6Nzo1zbXfU5rx8oNsoS)ZczFOKPL1W5cON)H9bEe)4b(JJbnJ4AhJnWnM84Ox7CAgx9n7XmZ8uA5E3127Gfo1SJgJUczzG6wiOw(h8Y1srDLLvsDHM3UxAAHzO3RfNxqvQtKY44qWCuY(twssZHtfkkovy1UQZ4uS6KFIWvokjNjW7D6MyUL9vc1(R0hGMW80Dgo8ijIGFiVKUD(vBkXo4DbEpDCfZqFGu7)7tpJNgw(6Z(gQkWa290NmKmS(o4NZ9PMJxXb7hVloOkS6pUbTCRqO3mZtsXCRWl3FEPz)LwQjlEoHK2R4BPhnOLb5ij2K7uLempmmYtntzVMD(4p8rm3TYOeEHpvtnHMnpzAFkzb)q(i(mLfVF8azch5MAjCGxAKqUTvnoJbijHi8cS5EzlAvFSHmi2aaFnGQ0yl8aQ8RXJV64xxrmg4TZKl0I8DTuhVRRLjJjRotUNr)ULLTWMmkQ24W2Joo59SCS5BPTnBT0FpWTXZIqby6czm4zEG3KcgmVLYlF7AFGq9BtFt3NOCfFDlfCdebhbge3dDuATeAfsoESWtgdtPlgh0Fs64i8vsODBy8N9FXWu7TTOAE(d7h2sJBPTmI876C977G9H7Wu1T9mnPj)7d \ No newline at end of file diff --git a/FreshShit/PrydazBar/init.lua b/FreshShit/PrydazBar/init.lua deleted file mode 100644 index ee215b6..0000000 --- a/FreshShit/PrydazBar/init.lua +++ /dev/null @@ -1,1037 +0,0 @@ -CLEUEventInfo = { - ["GENERIC"] = { - ["timestamp"] = 1, - ["subevent"] = 2, - ["hideCaster"] = 3, - ["sourceGUID"] = 4, - ["sourceName"] = 5, - ["sourceFlags"] = 6, - ["sourceRaidFlags"] = 7, - ["destGUID"] = 8, - ["destName"] = 9, - ["destFlags"] = 10, - ["destRaidFlags"] = 11, - }, - ["GENERIC_SPELL"] = { - ["spellId"] = 12, - ["spellName"] = 13, - ["spellSchool"] = 14, - }, - ["GENERIC_DAMAGE"] = { - ["amount"] = 15, - ["overkill"] = 16, - ["school"] = 17, - ["resisted"] = 18, - ["blocked"] = 19, - ["absorbed"] = 20, - ["critical"] = 21, - ["glancing"] = 22, - ["crushing"] = 23, - ["isOffHand"] = 24, - }, - ["GENERIC_MISSED"] = { - ["missType"] = 15, - ["isOffHand"] = 16, - ["amountMissed"] = 17, - ["critical"] = 18, - }, - ["GENERIC_HEAL"] = { - ["amount"] = 15, - ["overhealing"] = 16, - ["absorbed"] = 17, - ["critical"] = 18, - }, - ["GENERIC_HEAL_ABSORBED"] = { - ["extraGUID"] = 15, - ["extraName"] = 16, - ["extraFlags"] = 17, - ["extraRaidFlags"] = 18, - ["extraSpellID"] = 19, - ["extraSpellName"] = 20, - ["extraSchool"] = 21, - ["absorbedAmount"] = 22, - ["totalAmount"] = 23, - }, - ["GENERIC_ENERGIZE"] = { - ["amount"] = 15, - ["overEnergize"] = 16, - ["powerType"] = 17, - }, - ["GENERIC_DRAIN"] = { - ["amount"] = 15, - ["powerType"] = 16, - ["extraAmount"] = 17, - }, - ["GENERIC_LEECH"] = { - ["amount"] = 15, - ["powerType"] = 16, - ["extraAmount"] = 17, - }, - ["GENERIC_INTERRUPT"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17, - }, - ["GENERIC_DISPEL"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17, - ["auraType"] = 18, - }, - ["GENERIC_DISPEL_FAILED"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17, - }, - ["GENERIC_STOLEN"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17, - ["auraType"] = 18, - }, - ["GENERIC_EXTRA_ATTACKS"] = { - ["amount"] = 15, - }, - ["GENERIC_AURA_APPLIED"] = { - ["auraType"] = 15, - ["amount"] = 16, - }, - ["GENERIC_AURA_REMOVED"] = { - ["auraType"] = 15, - ["amount"] = 16, - }, - ["GENERIC_AURA_APPLIED_DOSE"] = { - ["auraType"] = 15, - ["amount"] = 16, - }, - ["GENERIC_AURA_REMOVED_DOSE"] = { - ["auraType"] = 15, - ["amount"] = 16, - }, - ["GENERIC_AURA_REFRESH"] = { - ["auraType"] = 15, - }, - ["GENERIC_AURA_BROKEN"] = { - ["auraType"] = 15, - }, - ["GENERIC_AURA_BROKEN_SPELL"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17, - ["auraType"] = 18, - }, - ["GENERIC_CAST_START"] = { - }, - ["GENERIC_CAST_SUCCESS"] = { - }, - ["GENERIC_CAST_FAILED"] = { - }, -} - -CLEUEventInfo["SWING_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] -CLEUEventInfo["SWING_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] -CLEUEventInfo["SWING_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] -CLEUEventInfo["SWING_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"] -CLEUEventInfo["SWING_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] -CLEUEventInfo["SWING_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] -CLEUEventInfo["SWING_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] -CLEUEventInfo["SWING_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] -CLEUEventInfo["SWING_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] -CLEUEventInfo["SWING_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"] -CLEUEventInfo["SWING_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] -CLEUEventInfo["SWING_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] -CLEUEventInfo["SWING_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] -CLEUEventInfo["SWING_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] -CLEUEventInfo["SWING_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] -CLEUEventInfo["SWING_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] -CLEUEventInfo["SWING_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] -CLEUEventInfo["SWING_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] -CLEUEventInfo["SWING_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] -CLEUEventInfo["SWING_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] -CLEUEventInfo["SWING_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] -CLEUEventInfo["SWING_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] - -CLEUEventInfo["RANGE_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] -CLEUEventInfo["RANGE_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] -CLEUEventInfo["RANGE_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] -CLEUEventInfo["RANGE_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"] -CLEUEventInfo["RANGE_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] -CLEUEventInfo["RANGE_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] -CLEUEventInfo["RANGE_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] -CLEUEventInfo["RANGE_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] -CLEUEventInfo["RANGE_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] -CLEUEventInfo["RANGE_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"] -CLEUEventInfo["RANGE_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] -CLEUEventInfo["RANGE_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] -CLEUEventInfo["RANGE_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] -CLEUEventInfo["RANGE_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] -CLEUEventInfo["RANGE_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] -CLEUEventInfo["RANGE_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] -CLEUEventInfo["RANGE_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] -CLEUEventInfo["RANGE_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] -CLEUEventInfo["RANGE_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] -CLEUEventInfo["RANGE_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] -CLEUEventInfo["RANGE_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] -CLEUEventInfo["RANGE_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] - -CLEUEventInfo["SPELL_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] -CLEUEventInfo["SPELL_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] -CLEUEventInfo["SPELL_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] -CLEUEventInfo["SPELL_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"] -CLEUEventInfo["SPELL_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] -CLEUEventInfo["SPELL_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] -CLEUEventInfo["SPELL_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] -CLEUEventInfo["SPELL_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] -CLEUEventInfo["SPELL_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] -CLEUEventInfo["SPELL_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"] -CLEUEventInfo["SPELL_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] -CLEUEventInfo["SPELL_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] -CLEUEventInfo["SPELL_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] -CLEUEventInfo["SPELL_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] -CLEUEventInfo["SPELL_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] -CLEUEventInfo["SPELL_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] -CLEUEventInfo["SPELL_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] -CLEUEventInfo["SPELL_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] -CLEUEventInfo["SPELL_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] -CLEUEventInfo["SPELL_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] -CLEUEventInfo["SPELL_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] -CLEUEventInfo["SPELL_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] - -CLEUEventInfo["SPELL_PERIODIC_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] -CLEUEventInfo["SPELL_PERIODIC_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] -CLEUEventInfo["SPELL_PERIODIC_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] -CLEUEventInfo["SPELL_PERIODIC_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"] -CLEUEventInfo["SPELL_PERIODIC_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] -CLEUEventInfo["SPELL_PERIODIC_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] -CLEUEventInfo["SPELL_PERIODIC_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] -CLEUEventInfo["SPELL_PERIODIC_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] -CLEUEventInfo["SPELL_PERIODIC_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] -CLEUEventInfo["SPELL_PERIODIC_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"] -CLEUEventInfo["SPELL_PERIODIC_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] -CLEUEventInfo["SPELL_PERIODIC_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] -CLEUEventInfo["SPELL_PERIODIC_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] -CLEUEventInfo["SPELL_PERIODIC_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] -CLEUEventInfo["SPELL_PERIODIC_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] -CLEUEventInfo["SPELL_PERIODIC_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] -CLEUEventInfo["SPELL_PERIODIC_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] -CLEUEventInfo["SPELL_PERIODIC_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] -CLEUEventInfo["SPELL_PERIODIC_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] -CLEUEventInfo["SPELL_PERIODIC_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] -CLEUEventInfo["SPELL_PERIODIC_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] -CLEUEventInfo["SPELL_PERIODIC_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] - ----@class CLEUParser -CLEUParser = { - ---@param ... any - ---@return number, nil|string - GetTimestamp = function(...) - local val = select(CLEUEventInfo["GENERIC"]["timestamp"], ...) - if val == nil then return 0, "Timestamp is nil or missing" end - if type(val) ~= "number" then return 0, "Timestamp is not a number" end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetSubevent = function(...) - local val = select(CLEUEventInfo["GENERIC"]["subevent"], ...) - if val == nil then return "", "Subevent is nil or missing" end - if type(val) ~= "string" then return "", "Subevent is not a string" end - return val, nil - end, - ---@param ... any - ---@return boolean, nil|string - GetHideCaster = function(...) - local val = select(CLEUEventInfo["GENERIC"]["hideCaster"], ...) - if val == nil then return false, "HideCaster is nil or missing" end - if type(val) ~= "boolean" then return false, "HideCaster is not a boolean" end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetSourceGUID = function(...) - local val = select(CLEUEventInfo["GENERIC"]["sourceGUID"], ...) - if val == nil then return "", "SourceGUID is nil or missing" end - if type(val) ~= "string" then return "", "SourceGUID is not a string" end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetSourceName = function(...) - local val = select(CLEUEventInfo["GENERIC"]["sourceName"], ...) - if val == nil then return "", "SourceName is nil or missing" end - if type(val) ~= "string" then return "", "SourceName is not a string" end - return val, nil - end, - ---@param ... any - ---@return number, nil|string - GetSourceFlags = function(...) - local val = select(CLEUEventInfo["GENERIC"]["sourceFlags"], ...) - if val == nil then return 0, "SourceFlags is nil or missing" end - if type(val) ~= "number" then return 0, "SourceFlags is not a number" end - return val, nil - end, - ---@param ... any - ---@return number, nil|string - GetSourceRaidFlags = function(...) - local val = select(CLEUEventInfo["GENERIC"]["sourceRaidFlags"], ...) - if val == nil then return 0, "SourceRaidFlags is nil or missing" end - if type(val) ~= "number" then return 0, "SourceRaidFlags is not a number" end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetDestGUID = function(...) - local val = select(CLEUEventInfo["GENERIC"]["destGUID"], ...) - if val == nil then return "", "DestGUID is nil or missing" end - if type(val) ~= "string" then return "", "DestGUID is not a string" end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetDestName = function(...) - local val = select(CLEUEventInfo["GENERIC"]["destName"], ...) - if val == nil then return "", "DestName is nil or missing" end - if type(val) ~= "string" then return "", "DestName is not a string" end - return val, nil - end, - ---@param ... any - ---@return number, nil|string - GetDestFlags = function(...) - local val = select(CLEUEventInfo["GENERIC"]["destFlags"], ...) - if val == nil then return 0, "DestFlags is nil or missing" end - if type(val) ~= "number" then return 0, "DestFlags is not a number" end - return val, nil - end, - ---@param ... any - ---@return number, nil|string - GetDestRaidFlags = function(...) - local val = select(CLEUEventInfo["GENERIC"]["destRaidFlags"], ...) - if val == nil then return 0, "DestRaidFlags is nil or missing" end - if type(val) ~= "number" then return 0, "DestRaidFlags is not a number" end - return val, nil - end, - - - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - ---@param ... any - ---@return number, nil|string - GetSpellId = function(...) - local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellId"], ...) - if val == nil then return 0, "SpellId is nil or missing" end - if type(val) ~= "number" then return 0, "SpellId is not a number" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - ---@param ... any - ---@return string, nil|string - GetSpellName = function(...) - local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellName"], ...) - if val == nil then return "", "SpellName is nil or missing" end - if type(val) ~= "string" then return "", "SpellName is not a string" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - ---@param ... any - ---@return number, nil|string - GetSpellSchool = function(...) - local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellSchool"], ...) - if val == nil then return 0, "SpellSchool is nil or missing" end - if type(val) ~= "number" then return 0, "SpellSchool is not a number" end - return val, nil - end, - - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- |_HEAL| - --- |_ENERGIZE| - --- |_DRAIN| - --- |_LEECH| - --- |_EXTRA_ATTACKS| - --- |_AURA_APPLIED| - --- |_AURA_REMOVED| - --- |_AURA_APPLIED_DOSE| - --- |_AURA_REMOVED_DOSE| - ---@param ... any - ---@return number, nil|string - GetAmount = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["amount"], ...) - if val == nil then return 0, "Amount is nil or missing" end - if type(val) ~= "number" then return 0, "Amount is not a number" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - ---@param ... any - ---@return number, nil|string - GetOverkill = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["overkill"], ...) - if val == nil then return 0, "Overkill is nil or missing" end - if type(val) ~= "number" then return 0, "Overkill is not a number" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - ---@param ... any - ---@return number, nil|string - GetSchool = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["school"], ...) - if val == nil then return 0, "School is nil or missing" end - if type(val) ~= "number" then return 0, "School is not a number" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- - --- Apparently this is allowed to be nil? - ---@param ... any - ---@return boolean, nil|string - GetResisted = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["resisted"], ...) - if val == nil then return false, "Resisted is nil or missing" end - if type(val) ~= "boolean" then return false, "Resisted is not a boolean" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- - --- Apparently this is allowed to be nil? - ---@param ... any - ---@return boolean, nil|string - GetBlocked = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["blocked"], ...) - if val == nil then return false, "Blocked is nil or missing" end - if type(val) ~= "boolean" then return false, "Blocked is not a boolean" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- |_HEAL| - --- - --- Apparently this is allowed to be nil? - ---@param ... any - ---@return boolean, nil|string - GetAbsorbed = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["absorbed"], ...) - if val == nil then return false, "Absorbed is nil or missing" end - if type(val) ~= "boolean" then return false, "Absorbed is not a boolean" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- |_MISSED| - --- |_HEAL| - ---@param ... any - ---@return boolean, nil|string - GetCritical = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["critical"], ...) - if val == nil then return false, "Critical is nil or missing" end - if type(val) ~= "boolean" then return false, "Critical is not a boolean" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - ---@param ... any - ---@return boolean, nil|string - GetGlancing = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["glancing"], ...) - if val == nil then return false, "Glancing is nil or missing" end - if type(val) ~= "boolean" then return false, "Glancing is not a boolean" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - ---@param ... any - ---@return boolean, nil|string - GetCrushing = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["crushing"], ...) - if val == nil then return false, "Crushing is nil or missing" end - if type(val) ~= "boolean" then return false, "Crushing is not a boolean" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- |_MISSED| - ---@param ... any - ---@return boolean, nil|string - GetIsOffHand = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["isOffHand"], ...) - if val == nil then return false, "IsOffHand is nil or missing" end - if type(val) ~= "boolean" then return false, "IsOffHand is not a boolean" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_MISSED| - --- - --- return type is unconfirmed! - ---@param ... any - ---@return string, nil|string - GetMissType = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return "", string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["missType"], ...) - if val == nil then return "", "MissType is nil or missing" end - if type(val) ~= "string" then return "", "MissType is not a string" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_MISSED| - ---@param ... any - ---@return number, nil|string - --- - --- return type is unconfirmed! - GetAmountMissed = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["amountMissed"], ...) - if val == nil then return 0, "AmountMissed is nil or missing" end - if type(val) ~= "number" then return 0, "AmountMissed is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL| - --- - --- return type is unconfirmed! - ---@param ... any - ---@return number, nil|string - GetOverhealing = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["overhealing"], ...) - if val == nil then return 0, "Overhealing is nil or missing" end - if type(val) ~= "number" then return 0, "Overhealing is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return string, nil|string - GetExtraGUID = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return "", string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraGUID"], ...) - if val == nil then return "", "ExtraGUID is nil or missing" end - if type(val) ~= "string" then return "", "ExtraGUID is not a string" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return string, nil|string - GetExtraName = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return "", string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraName"], ...) - if val == nil then return "", "ExtraName is nil or missing" end - if type(val) ~= "string" then return "", "ExtraName is not a string" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return number, nil|string - GetExtraFlags = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraFlags"], ...) - if val == nil then return 0, "ExtraFlags is nil or missing" end - if type(val) ~= "number" then return 0, "ExtraFlags is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return number, nil|string - GetExtraRaidFlags = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraRaidFlags"], ...) - if val == nil then return 0, "ExtraRaidFlags is nil or missing" end - if type(val) ~= "number" then return 0, "ExtraRaidFlags is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - --- - --- WARNING! Different from "GetExtraSpellId" (capital ID!)
- --- This is the doing of Blizzard, not me.
- ---@see CLEUParser.GetExtraSpellId - ---@param ... any - ---@return number, nil|string - GetExtraSpellID = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraSpellID"], ...) - if val == nil then return 0, "ExtraSpellID is nil or missing" end - if type(val) ~= "number" then return 0, "ExtraSpellID is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - --- |_INTERRUPT| - --- |_DISPEL| - --- |_DISPEL_FAILED| - --- |_STOLEN| - --- |_AURA_BROKEN_SPELL| - ---@param ... any - ---@return string, nil|string - GetExtraSpellName = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return "", string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraSpellName"], ...) - if val == nil then return "", "extraSpellName is nil or missing" end - if type(val) ~= "string" then return "", "extraSpellName is not a string" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - --- |_INTERRUPT| - --- |_DISPEL| - --- |_DISPEL_FAILED| - --- |_STOLEN| - --- |_AURA_BROKEN_SPELL| - ---@param ... any - ---@return number, nil|string - GetExtraSchool = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraSchool"], ...) - if val == nil then return 0, "ExtraSchool is nil or missing" end - if type(val) ~= "number" then return 0, "ExtraSchool is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return number, nil|string - GetAbsorbedAmount = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["absorbedAmount"], ...) - if val == nil then return 0, "AbsorbedAmount is nil or missing" end - if type(val) ~= "number" then return 0, "AbsorbedAmount is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_ENERGIZE| - ---@param ... any - ---@return number, nil|string - GetOverEnergize = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["overEnergize"], ...) - if val == nil then return 0, "OverEnergize is nil or missing" end - if type(val) ~= "number" then return 0, "OverEnergize is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_ENERGIZE| - --- |_DRAIN| - --- |_LEECH| - --- - --- return type is unconfirmed! - ---@param ... any - ---@return number, nil|string - GetPowerType = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["powerType"], ...) - if val == nil then return 0, "PowerType is nil or missing" end - if type(val) ~= "number" then return 0, "PowerType is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DRAIN| - --- |_LEECH| - ---@param ... any - ---@return number, nil|string - GetExtraAmount = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraAmount"], ...) - if val == nil then return 0, "ExtraAmount is nil or missing" end - if type(val) ~= "number" then return 0, "ExtraAmount is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_INTERRUPT| - --- |_DISPEL| - --- |_DISPEL_FAILED| - --- |_STOLEN| - --- |_AURA_BROKEN_SPELL| - --- - --- WARNING! Different from "GetExtraSpellID" (capital ID!)
- --- This is the doing of Blizzard, not me.
- ---@see CLEUParser.GetExtraSpellID - ---@param ... any - ---@return number, nil|string - GetExtraSpellId = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraSpellId"], ...) - if val == nil then return 0, "ExtraSpellId is nil or missing" end - if type(val) ~= "number" then return 0, "ExtraSpellId is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DISPEL| - --- |_STOLEN| - --- |_AURA_APPLIED| - --- |_AURA_REMOVED| - --- |_AURA_APPLIED_DOSE| - --- |_AURA_REMOVED_DOSE| - --- |_AURA_REFRESH| - --- |_AURA_BROKEN| - --- |_AURA_BROKEN_SPELL| - ---@param ... any - ---@return number, nil|string - GetExtraAuraType = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["auraType"], ...) - if val == nil then return 0, "AuraType is nil or missing" end - if type(val) ~= "number" then return 0, "AuraType is not a number" end - return val, nil - end, -} \ No newline at end of file diff --git a/FreshShit/RaiderlosSA/event.lua b/FreshShit/RaiderlosSA/event.lua index 28dad60..39e8a9a 100644 --- a/FreshShit/RaiderlosSA/event.lua +++ b/FreshShit/RaiderlosSA/event.lua @@ -7,12 +7,20 @@ function(allstates, e, ...) local spellId, err = CLEUParser.GetSpellId(...) if err then return end - local eventMap = EventMap[subevent] + local spellname, err = CLEUParser.GetSpellName(...) + local subevent, err = CLEUParser.GetSubevent(...) + aura_env.LogSpell(spellname, spellId, subevent, ...) + + local eventMap = aura_env.EventMap[subevent] if eventMap == nil then return end local alert = eventMap[spellId] if alert == nil then return end local err = alert:Trigger(allstates, ...) if err then print(err) end + + -- aura_env.LogSpell = function(spellName, spellId, subevent, ...) + -- WeakAurasSaved.Cyka.CLEUExample[#WeakAurasSaved.Cyka.CLEUExample + 1] = varargToString(spellName, spellId, subevent, ...) + -- end return true end diff --git a/FreshShit/RaiderlosSA/event2.lua b/FreshShit/RaiderlosSA/event2.lua index a2636a0..51cd592 100644 --- a/FreshShit/RaiderlosSA/event2.lua +++ b/FreshShit/RaiderlosSA/event2.lua @@ -1,11 +1,11 @@ -- TICKER_100 function() - GUIDUnitMap = {} + aura_env.GUIDUnitMap = {} for i = 1, 40 do local unit = string.format("nameplate%d", i) local GUID = UnitGUID(unit) if GUID then - GUIDUnitMap[GUID] = unit + aura_env.GUIDUnitMap[GUID] = unit end end end \ No newline at end of file diff --git a/FreshShit/RaiderlosSA/export b/FreshShit/RaiderlosSA/export index 447774f..e4bbc5b 100644 --- a/FreshShit/RaiderlosSA/export +++ b/FreshShit/RaiderlosSA/export @@ -1 +1 @@ -!S3ZI2TTnY(TuDo5S2N64REl7E227kBj54u)AfLB6EtRTHiHKydfPw(iooPXF73zaajbFkAjQe3gLDBIn5GzgmVhqaYBQDZOBuCUrP((1AVFJBuMFJIg()HRo126(Bu6D5BU4gLXw2Au7JiQVtZ2AXnkhzO)XpsS1E8UrwwgU6WL(WLtM4qDV5IQ3O8G0ptmvNzzFLLUP7nkh3)Ir9h6JVJTmSSbsDrneYlQZ(7gS)UjEryaapOSGOsXFvHO6QBz6WyzxITl8dait0n1DMX)z4h5xf(zxB9PtP2oCcmk4c4pQrh7nzYOhwqVr5v9p7QbxFgCF2Vs8Sj1bcSGAyCQMdhVoEJPVNA6QaJs)d3OC7XDvgDRYOUdbK5HevzHb5ba5bGELnLbQYv9pdqo7AaXOed3z3OysMtD85upZqwZLFjvldV5MHtDBIMUNdiJQYeP6ZjOOqwsOObmoEXB5ZdhQQLjW)IPLPLjfr8CIUzXHoq2wm4Hrqm0NAgQObUJnXqlbqYmKovObbqnSimdnph6TQgehNBgZK7Q4fN7bMv(ci(DJFvh9psJFr4YJfwPYwx1ywx1ywx1ywxv3VfJDzIskJYQedUW2th8b25Q)B3)OAl9M6N6BVIqX)P(AtHzTY)1JytF8UbEggpE3BMPdisXMnf5MwApa6zDvWtYBH)qvqU(c0cZc0BCjh4RPRXhYWEOrVlx9Isnqodcrt3bG1pmFug2T3PxRGckMTrDF867Y1eeS6ZblYlAbAhl13dUamC1PAd04bNBdj6WioZYrP7J3DcN7a6mrFkxZGSZB01advejCp4b2GjlNhvoEy)(xGgbgteo2JU8kFg5utgFaYXj4qa3oIlH7)AREg1CkI2gTr7ypxaXxUWn0MaTQ0L(DW24m2Szm6C7sTnjg)I)mQEB2qcCWT8Cn0rX5Lxp6StVOptiz)oUK5xLIgLYCrnxRfwSinDh0jFe9dWV8IffimNkeCuZ6EtL71bADKGFgkREJCLZT0awQ71JUmCSmtnC2dIg8FZlSg3zu1ZX1AU))E7mDePU6ZPAljq2uQj1wxvzM19xc(WoS)Tle099u5iwXJLfn(NGQIWeW8I6TqdDXc4Rx(Yx(4DhF55h1D0TND5j32)xaX1TxFXGtpdKA9794Rbi(xGCHm)X7a3lhygAonYv3F)9F8oI5dp(6jEMSSc7qmmyuZzpyq7Xaz3hF9J3X)FgwG3nGkX0hHX2(X7(rGroR)1xrSDO27FcfKlCa2j6W1NigG7mQP)fTPUE2WVrn1ssiE6JSPd)(pDYeNqmU9CYcgn6l(L36pp)9y4oeyaAtDdFkL3ubIkA7Yqpna9CUpg29bmpuhmagW)WiUTBeLxurI)WDT9Op(AgsINCMXwqQOCmPaJVzu13fy6Mrs6ullGB2(leBDYydWfqjTu2qaJ8CfZ1TlM7ug8wO3du01Ph)Z9hEBTQvLCaKeANC9P9Ug8k9Tl(0NdV3elW(sND5AG0Uz1hVtZk82Xu(OVndwUt4(WOH8L7ubJgaE8U0xOvbWI(UzIbKxyyazi8x2bXzkWJMqCGzgojUFktU3I)8VZWoJrtmMi2ZSFb(R0Jm6BffkBJfltOMIgTlnlMumpWCh)btrHHsHax8IzFpv4aWc8ZZYGX5VTazJslBOY7O0fDXsOChIjuW8f3djLFJnbsx9MGFIL0rKGVw1O1UpMyNSYPe1LRrDiUyjHSCtGDk1VGbwfQtSqr1aB9p(4D)BpIgwcay2oksg5)tYQcfz0ckehyMBH)l0bJNvXBSOGmrjh3YZ(Yy(GRXkpelhs87QlVBdbKVx3rhC1Xe2IRqZUEpbewbLF5Iyf5vOoHBDMrGK4)QV8TM0uWLvhbdk(p(cim3p94DVybeZZ9Hre7PuFakG9adoUCV)hau44Cp5HiCrbA3sc6)Jpp)YA(xpSCpEjkS6uP86HU4sSERaMG7rm6vGZuqXySBgPoPtV4cWvJv7i)6)hjdrg4)b4bQp5HWsQcOGOo6GsV(14dnulYulRKgrhQ922JfF9zTMy5YDjB6S0dhD5OrxEEjRksyJWAmbl20W6(b20)Rh1u9bSFSgsAc8MSI)pXWxAnMpe(e8kiGJb)c(DuGKh)Dz(EQruzDgkmg1osG)z6QVZe0zSwRWR8RXqy0Gn4vuc6CKXqqliWOR1M)Rh536ilpWmQ(0zO9yq2fu0CTOcz)kL97m2fWRPB9eD(IDmBc5JysfoqfSNznDOaev4kpK4w2y)KjUOLrYloHVqmjU(I3VidMj1U6H6jyTEwW(6zzoocqVMOnPE9ysIUAOLjvJQDo5dSSrbMK1QZAY0cxTevE(jLUWVN6sjPOzDl0IJdH1Vv6lSecJOqSJcljdlTNv69PMtS4fCfw1XBRCsFW760JR87XVviiyniaFmFHaiOYSuGYVYqbq1tfiSOMJjGaXwawJ0XLLNTkfRFsawZCa7cOApbyTYbSbgKPoc4ANdC4YpidBNuHfkXWvI)oitGK4UdZeiz6vRAMGfN1QjRj(8EPOwVLvFEEkxr3k(ymD1gdiPzsTgzdg0mJLLHpGnxkh2R75DpPFESizULxGDvT01Xwq8M3PBeq3m0Wr4T01SqkrD0J1hQ0vTJHgiExiqPRAjJDSShhav901SQ26qaaIpBvpD3RPgqKDiOKpu1ZaxEoZKGkD9KUdK14veZagB5APZpvrPFV80sZ1DCW8F5RNIt6muuCv(5akdLXDkI0lI6k9PYR639SYWCBg0sCOOoRjsutGsDsCB3JuUC4r5RwGe42ePivzmHyGj7H3oBWIecQt2WLiC1bzdlFjN6LV)uiKsCAgEvCyL93ZWXYxd1vwTNH7LluVOruaBSuvf(pNC6)xPeIRVj1Eku9q(APfw3tTL9f7S8OWd7E6fRlhMGU5yefrkwag8S(9p(vpNzWtX(ogE9vJwQ3Os0uUTkUTEE8RsM52YqJFkwBWZoMvsH6ztK1vhuWP0Td6E6zfiO4Zd1GYOlpR)f)Tsn0)xhnS7TDhnQ7X)SYQ5YMoI7EnI3RU6StZx9gNLBT3YPE7Ir9H9p)YF5Rg1fZ9B7DPs)VUcGVUSWGH9vE1Qs9CW8rdV8NZ3zCTq8Y7g7VC(6HpQOKtR8gX1hFCFfLN0yYkSooe8ri96iR0XBRO8MtV4KOTxgdIeTGMokI07tgOiaM0rHuphzGabezp84v7NdEKbnDegRM0mWLeuziCLQAmlzRaK0rGCvDzGaFqshbXR6kdKidwgtf5YHYAU4dtEOiQDAUyke00ryKAdYatbWKHIoLCXzPTJbA6imLCWzGVyqMd6IMunp0fc5Y5o5uufGf9bF58zrrCmWZfXYz0YhN(qMd6IKglpSfa4srwKuxlhLbGNoItK1idmgbU8qvK0j5ISaiZbDfXdokGjZ(mS7fN0F9Y(WrXAL9HJIvo7t4WlPSpCeU2zFec3vp7dhbRr2hockHSpIPY6K9rgfLs2hocxRSpcfD5L9HJWsl7Je6kJSpj5Usk7ts(SKY(ebXRF2hj0T(zFsGSYk7dhXLs2hzuvczFKqxzK9HjawZEFyOy969HHIvV3NGHxw9(Wq4637dx4Ug9(WqW607ddbLrVp8PYA17JekkNEFyiC969HROlXEFyiS869jeDLsVpj4UYQ3Ne8zz17JmIlHEFcrxj07tCKvA9(WqC507JeQkJEFcrx5L95ka2l7fFhESAPHcWvjKpkaxRzIPi4PuZqfG5skvvOMyDZzfGP1o5vaMkTSyHZY1pDwmCvI51cWCjKGl0oPSZ0fG5soLxu8wE5(sLFl1KGPY5LA2W4uOSslgfVLv(X0WA5MOmGcLygZy4S0sDgfVRuou8aeY2w0YNgpo5e)CSN7vQN4q5B6F60m9MpMAVh7GV9N(NxXGdSe1DK)(7LrHGJSv0J6wSdo17X)cp5vudQQ7oPpjR87r28Wjo(CYhUkoct)05vfgzfjUu3ragEAXW9DiUn8IDEQKXnUZ93biWUWf(tGev4sKkfIowUGO1xiMfv8XaqeUCoYb7AVvqPX1tzR08plOBcDw4w5ELvzvWdExLqMCTvzCrqLcrhHklyiFHuzJTSmOeZS1zVky3VVj0AY7T(vwVnHy4Ghq5kY86AR8esMkfNAcvy4aFU42fCYe2ioEsN7H111tIr3WoFXP0xj3VIP6WDlZMt1X3loLIQJZOFjuDsu6RKQBzvOOeEcE2C6oXwvF9QsjcNUrRtjjL(kvPsXuEbhgGnNcu68gugkrjo(lGImo1EMw2zpX5EBtOfdptDRza0qMCZg(mgDEMM3RN4uiUPuzLsoVqMCZRYE(NVRN)zcDtPZkLWKsC5gnazC68mnpxp5tO7MsXvA54IXTBCf4gk)2RLFTnXE3DPSGQQprxf4eRW3PwajxWELfr1GUkF4hInO)K)(m6pJF5xI)jXvzBwJexLTsGPF1G1hmJBF01NEwVtV4K)Ctu(f)0eu2gK(lER0jiFnl6YNp3SfBfHkLEKKV9m)wAx3(hrLnSby505DiZUHB8ogHk96q2ghmvdr(HGAdBk6FsRkH4H(87MpMyekvIjNFEys(MegvBcd1yW2fKAWSCs2tn(BCX0NAjNBInjtYRJ7QKKx1FBHKcEW94rYlZ2WgPGh5DmqYBl)i0Z4UIh)D(JL9WXZhbPas5eBGFw)FcHfw1xvRz8Uuv2Dm27YYbeDd06zk11fz7as)4DAEu0t6hE8Ux4uHZj7MHVArIMf8Azn8y5UErW8LQB0GxriYFRQN7VVXSkhN2lfVYN262672g(sWA9CCdLSBux3yKzRZ73qoVp5cX)BURRt50ZWxK2f2aDkS1PDd3LqmAUaCIbHQXdOgwxSMSeddR7rEaL7JPmn1)7MyFqnu8kw8RV7V)gq65qiGWx8KR)U3kucV537wXOv5VZT2gs4V)HeoI)(uDBeb5icbVKzx)acbY3nF8GOKAB4G)sVoIpRcs0v8QADBuIilwxWRy41pmrOeEZhNigT2gO4Vobk4NW2IeaPK88pw8cYERNVSNF4Rn813ZpucV598JrRTE()DAL)wQV8jIVKbB9LL9Ld)(oS((YHs4nVVCmAT1x(BkF5JfFVr26lhnVS)xHLYiVSVe(lrE5i0ARV8FTRiVK8Xp1)t2ZwNCzNCPVKrRVxUKmEZ7MhNyLLF(wp9Y0tp1ESJcuWNFAWeGRlbNt8lLV9CQ23Tb2m3Nl(gF91psaBBu)Cimq4N9S1CVNhkB3SB98y0PK255B9930((LW(Uz1JGeShz5Fs(2UVDIUtz9)qfwg7xwFj8xGDnBesvA75)TbckVabl9jYv6LauKDDR4lF52OaYB82GphOR)EVnq(UX3(TrP02qaptdbe8kJDtCcn77)fIDBv9bo0sF1CxZY6LKUB266JtOTf2)nRZ8t84w)nHZCPC(WLKUFbCMl)Zh(wN5NvoZlRw7(bFT13wQDeN5s5nGJS0DJwODccTTo7Vz9MxLxquFl4rxAVxRIlL38E2BS3SvB9U)I4Dhd230D4fa79DpExp9jtO2mR)j2wZXn7KWl2)l09J3TJkzHUlAuEAVVB3)5y7Fkg6gfSn5b7hWnYI5xzbwAhzO)XpsS12tyZmNUFIX)VCO04E7YCWMkmfh992gKksqkHuPucrfiH38bOIsQTHN(lw4j42bF8JszdbX(QdL11fFHrsEB(xwOmED7i)5zzJTifRYlgUVjwPcLs71zhnMCEZUMfPsTTlCX2OnB4OnfRGMTVVrsjstP8shjI89lq1mBKxuHBdV8xOvsX)KJU912x6Ne4ULZRVVys5n7gsknIT17(zO3D6VwrlVnxuFtQ9u9ps36wlV7I8LkLX2lkucVX3FrXi1wh6)Y4q)eFpb)vExjEL19u7NhNmHNlrnw4lsw3qgsY2nA8I40zBWINJN)WchsOeBEFBD(P08E5uKFe57MV59TL3)C3b)zZI)TYpw2EF1FSS92Spw2Th)Q0ESSAL4JLv7l3JLD7XV65C1ozeXl3qAF1(wOibYGH9vEvUHC)A(Wy66zt22SwKvUvirw71SnqYUzxT2OKPCID9zm8fEawU2u39CYcMG7tWvVYG8a1oyRcG3g)LDQSGDJkGWcTGp1utxLIVpsTbavnioygEnh8UV8Frm0jWVFmE5JTmqPYNyWGO6hK2ZcQ4nHl8j7PJp10f(jxYyd6)Kp7(jac4gVI(H434Z87OWWtac)mN68fcrg(9K5fO6IWFHV1q)uO45tjfMbCod2kVHyBRBzxzVuGKpx)XurtGUHnvfqDxTdpa4UATAH)D1dF8UpVxUdfeg(dT6(DWXwD)21y)tZgPp60UwGWJpNoU9Hh1UN8usEqlxMCfXGOPBwsYK6nBIsJMO5FTdA)0Kjh2MjmycuqcT6YKbnp44J6U6YKxbnFrlnZKoOWOEnutxRwZNMiPDhMS4GgCZKwRSiPB3En6uF1fjdTM6rllJeMgwyQu9jjrQTF1Q7jzR0S2QBKmyqZ2hSgoo26uh3YvK4)3RGir6Fwhrc8NvxK0JsCN94D)SP(0zULwuwut3aNBTo4jgJL78uRo7FQVgXyBwRFJ1iEIYmYCszfILPLzZP61R90eicFhMJheuPZklqQwTt1ERrsNZjtlRGjTXqJ1o8quE0O1ttEuxKPHNl(W6RS8OXGJ70)OvxEafMGFnaklxMgSssA0MjtEIonT4PAe)ZHRUtZbDo4G(9xdBelZ3vIUm8yR1AvFfCzcY60U6A4YmyWHRr6ME2E6ALA2MA15jGxP8VnpK9pzL9UqjB6CC1URtYM5wqFsLBTASOjnX4b1R(edU2MhvTgxW05WvVuTgnQE8HXfmS2(eTlRy5zQna6)EOLfN3RCkkfMquP)2VXURZV9BSpYYDnO2U)2VvbhT0QtmfmM879IFJC3u6c66VgeSLOa7VCGT18tauTdIpPMXfW7bGWypP2vFlc6Vhck2uTaUm2J2MwMu2oN(AgyS2ONGZX4Tq7pceD(9oZbOyt9pzgRhxxI9uQBYRWAc9uTFqADCwaiX9HrrhWNlGyKpeCHogyzNJSeWV)QKKI5SzGBrAEcCUEz3xmRyGvlfOKNIjX1NLxvvj9V0krTeJMmw7j(e3hnc9zmcXNax7BUfBPQEHd)(OreYs7gXKbq((scOGLnjeNjHpHOikEYIbLLWIL6cJ3G0GDlzAMftkJJOxjYcnYxjfPLXjohPgCl02JVsHHRTYBJG6yURXhktFL2czLQOkMY5pvhm4foVW5pXy4Xq9(brg3lMuy3iRkMSapHzZ6hganFCN7i7Ud4l6fybB1ddjuex)JjoByhFbNZaOAk3NnnY8UI5e)(FL80JsgC2c3)wP)JnfhPpNEUcxVe8ZrGs6jcYC3arpOxqP)oXcjGmNqQMEcPa2uoHKkhHvsZEenBd0tSFi(DL1tstOeWfQVcMOjXLKwZj44VwC)dXkcZkCGFLj6ud85VP5BCh5Yo(fJe1BsCx)NKgFnDdCPeVeL)POeWeUVNW)ifCrMmXqx1LQD6sauhQfI4If)5ZV8ztmFiPObYZTuUnx7LY7juFasBA(tPtP049uGl)jBAptjHgliYa9(Op4iD2ZQN7bX539IWo7LorZ5HnrnMiYL5oN6syt(D(eg6lNkUV9wDtnrHZXy5GimPqtKy7lmR11YjqOi)YuhVX7iMTGxjRaYBRS7Yhi(rAZMnYS4cjl(0k24fo7BnDksWi1Ple(zHuFliXdZjomtqR5B91COEd(VfeDBND4JCxC3zKTuxIgVL)004vqy7rtnTqwkazJXFmQ1C6JiD74Fmdd8mOAG)C0mrXJPXmiZ7r977CXTCJz9j78zyaHHDPoY)yXEkVJS1NoLAh11dP3Es4kZNEjBl8qz6fhxmXdXvS1B817oShnOE2plvwmFF380FgW(h(0N2dbowInzwEeYH6AucYG)q6WC6eXmHXG8zYykRRxm55J3TdFlmCCxLr3QmQ7Wr7g25Y9SV)9IpAIaOJPQephezu73JsBeBQwwVJQLHuvbku9EM48Eyy3tqHjUBpaNg2GzKHZFwE2QuEtROYf)InA)ah6j6SphachqukVWiQXr8Pmcl9d6oOVDSXW4KzK3tzpwySmem(gJG4DujMsuMXFIQmqmnXkDAoGTxVytKOqhIZWPkxWZQ4qqyujFhHXBOeNerY4Rn47NmKH)(GoEsHvEfejLRCsr1tmSPeThsv5F9Xh3xrz3aMehdkduffm7BpeSBkS8NJSWKmmMkhDKNlxJeD88XsgB5fBMMksUW6(yYdDxEaLG9jhr11lSTp(gMJDd(kDCXLJIHbROsOmJl8hSWcCBguIaLQ5HPVKcuKbkdzohwcpItwWZ4XSJmXIjafjoFreJix95(8e8BqXD4fRHoOQwOn1oZH69ewJGbh6(Xym0uyXckXwO8Q5KHdmBxlL0wSYCIjiRnEOIVDj72beHZDEomsln)xazTv1xyief3RJp5QeofzgK1wn7WRS4hy0Jvj(A60Z3YpApwXBGe4QSRwZnyHMIIKKlaLan5hfxKpQ3L9v8ni1OoU81NLpXybO5wMDpE01DplF)QRnnOS9II7)iQPAqsaQuyJPwU5KlcaYbRZ4E2Mw18FG23qOO7THsjkgUf5NePzcIDYA2Bha76gpSllYHCldj4dF0lAQsYanuyfHicM9DMyqM7NrTfovgqUnHhsooPru1zAG2tq6LzEY2GtS8T8KGI5c7YHwtblEw6ldu01ymYa(XSThszujwiPNWytzboZQQ3SKPA6o4(OAe9dU(RFx0YHZwo(JPigJkiaaK39w5ljtLtkw105pfXGm9fF)QGEzMT)CYh2bJqaH23bm2)E26chelYF1i(FWhIu1Q7MlE75bvW7x6FaYr0TtC89sjsiwyKDZJk9OVFKLLHZT98MViaBzebZFLrz1HND4D2DxYJoYzM19bnrLZdksDgXCQ4JbYsaDHT1uBQ0hpOkyA1uFSFbQ0pSq3Mosx0eRqhMZa0K1eYQMCgdXZ16vq99fzoe2pDyJizcC8(jLST3BzE2sbbK8MYv6MAeKerxwkLtUg8jJYK2Z(lntYGEcFB8fsq7LVqJ9gxIVYh7fRz4D)D)Llmnd5K9nh7kFFKyGSadYpIrc2BStYvmdD3g7jTcuSMO33KE)oD6Gpb0kdP)HhuBaZKQcBPGURsYI7RWEQMa09F91)sf(pj(ZRVo8p)I)FQS7ErzJti2wUZ0tJrQ3SzZASnGBpQQ(8cYj8V6tqvcriLmwBxVodRdOGa6iR5Jj2AZHQGkdC38W2hYoYd2enD1mzzST4arNh4ZqUN8ad7zJ5AvBZ(QvsSn5B7MCX6iI57e1ym2YXjjUznzsnMXEkZzqYQh0MpJnCXcbhz5PoRGsPWzvMtOoTpGRCDSmyXPpH8XyZl5tjqcLWYWF1wDyQcZjgSyzhBzB7TixvYE5szLfyHLvc)XV77YrD1OgtDzzcT2X6Arzbwh4YNGmdS8TfQ2IPyu0xmdJ4U(ZmxcBBlj(PyZlEBBq4gSY5xPpDgsX5ZjMArHrjyNki4Zw1yBmAqf4ABTapyoNRBYCE4DGtX0PZTSPXxjK0XwRM8zT3C2wgzifhe0Jg686uqSELLn7GY9Zu6cCnnEfXHmMAKLCUwBESqIHUl0rXiOb3c6aKPYRXHSTbmyzyyqwWBO9nw2gAlhX9S0MUutJQ(b3Cang0MYreB7ceWidCZAwee3e7LOD60QvDM2XaKSGbcXu3b3rplxTeblnyBv6kkZSuH4xNrmvPRRa)GQ8an9NZEjbGSXvEgyNANydj40Eke4jnv6WmEwDALYAwvmk3HB2E8mSsgn8qEc1h68ecTMtGniQnxdHRj46RA6unMQrzMnzHjl1mY1lZSfdO4KlrAvLVp5IsK8nVKPq6(e)SU5)ykR2L89lA18q2wjRYal7P80aq9HVJMaHPmW6IGpGGEmwV3tz4nBFa70BajIbjKDbGVthgF2tNm2YaJvJLgvKXXRlb3hFg6oZkWiAZ2JDv6AAQpt3GxKu8r9leBSKpWyWzjORXHTRYdzq0Wo5kQacgxnXxiuQ9dlh(MvBYcWDoX(DSyi20cnQdzr7VGQcglOyT)8X2e1cWGh0PbJG9vNzHpMbCLD7zznVitTd56sGvHQ80DC8StsWJbhDZLye2O2bhYfU6VhZ(Ffr1Tat6d40FGofFUhfvJ0QDDwOL3mt3M)DAtHmUi2UTQFqnztaiYHg1PaJR1bIaL6gg8aLwwAjR9z6uBY8LLbSvZM8mGdjGC1YZHXhFSaZ7MT52iVH8okxnpaRyTadS(H14XwGXDKnmC7Iyr2GrTb8QIhc9mU8b1Pkp6Gum0N04Bjk6bgKDrcEvTrNKKlLr21EQ3scq0QDtEJaqP4cXl7aUuahWghYl40YZySb7WWS0O2DQZhZiOotpgJpel(APJRwlEMqgTcc8gzmN)a0OS63h9IGjgMjBiBDLFLLXskjhsf2PryOHZbLhUDNwg7vTATQSCOkevB8i2tz7kcJLoqqGWdIXJbGbWU3CzJQ2HnpmuYdrmzbax(OAb(GSrDFq8dvqMrlc9A5xO)IcoZQwToBdMxPRTkbnSocAr4JfyynA2IpmBwOkr157()3CxR)M4ijX)FjF525dtKFHFCFyLc5XKCdKKfts0T7DmBd0awbSr(rYKiDZF7x9OTbsGXv0PtANrtgc4YU7U66XVQRQO9hhlR)10Kz46i56IaQyJCDH9(JbiRp(b8HWokWZMMI3RtNRNHSI4ficOwFS22UK6IU5veARtkkuvllB)jg6WRo1eEP6LvsuRbuA0qDPQKhQFzF6Epfe81tZXBnQi4CaHsk(lxJs3TOoWoYnyBRmpOw2(2e3WoEU1(hLsqGfkZ55eerIo3tPOeM7rTBsZ13yd9ILz0S8IQLRss3VpwVJ4ihBIyyRmngHfrr6RDdcyFvJNKLNE4v)3X0S8Bcf3y0w5p(ZBYhlzC6xVVepiUyeOB7u5zBfyGfz8edBxJViyn1Wcrm1KcPtxQvpjyzj01UZoUM(mGnwG7B21rgZSL5U1Gy3tQL7XfUQCZz(hxQYBXsODT2akH2qqskbRB2DCSi1QxIj8NaH)ilEl4VvHzW6haZIvuhg4AFvQc26QKyzkYlKwJplxH5LtF18KjsOINtXAuirmrrD2bxD8kLaapGXDoMmeDMfezsKGLPWqJ5tTUS4zkQvTtMtqin9o)fTuXdBBpgwgfw8Z0Lzc1Aa6Dd5O0NuKKwQNxFUuD1QvsOoiQjIpplrSYkY3HwuUfGxmHvtPwkIooImXa8wIS(kmkz57bsf6EeAQRK6DwtEux2MHwFoEV3LckvEY48bWZMSqGr6o8cyF10PAo5AgKPeyZZ2Lv72nNRyBupWwXcUDZ0E8gZZWGzJTuKzG5WmjEv4gYBvqPaKxth0WdG)fVJyAlioWo51cy)VQnF4Sdyu2Obze74Y23eHu5qBIgUOc1rzKXYwTwaPwE(7EExuazbViYB3LtFhUiDpQl8(zp)byDbghQVnB5lRYYxqW0x0oDUDIcmXPNSHDD2tkbu5BBakoPQa5z9WL3ubUHyh5BwBJxNRqgIQD8EirES(v4QlKO)biXGCAqwsTvdP0zTJz9H6vRXw6q7IpHSh8duRwVpFWVur51gU59E1ofF1(9a1NzPMnHfcDYomKvX3WsqO8saOctahwn)LzyIN1mof8mJC9mNsNr68sZ3N)T7nGhh(aaR5li42PjsqIyhb(wY99wDQUSjyMlYKWNIy92Ny023ntcuchxMD0OaI0rjCtfqCGz)7KYKzViGclEZ05FFnAaTNKWfGuXiSIxWL8coofsQFhQ7rC0PlvpJ5lSo9vbdtGmNnHVV9l34y)DP5vi)(FQBhZd(q4Ci4b0Y5u0AkMl9cutfAc5TAEQkp7rj4fPs9(iEFy5hq4hWlYleCsR(bw4dmbogeEOWKlsHyyqho(ov57rttFKfsEXd4lkABvYLDud9VqTQyRn3NHhpD7b7WJdKDCY3XZdLGcGHHqlGZ65Bq0G1iqp98crBXj7h9uyTTB0tH(xLQleqUNfhl5UekyPAgd9yH)Uum)O4724tMehk8CPMkYrxKRMt5gs7u4yo0TSIv42cPHEQJtKj(aJb7ELBumw1(dnSthoolduRXAoya44xvUeBogKmdbNffm7CSaNNdzpnvOx6L4rNFOqxDTEzj4Ph4bkMaW9uj5TDZTnHVVK4wscDGJtT7cBabaOSZN2(oQWqBFZI2RygujKmCnZK(bsGbdkbTnOnwNqkbhMLI9ElbE4fA26wjiY6yl8XYiEnTyzYujbf0et26865089bJLs8zWK7ZQxAd5yqaX)UnpB9c9KKp0HvzBBI1)PA4nPSS43ZsLi4eWbe93QaufPLjPI20ycwqDKvoPyIoTqayjqTFi7atTrnjitGzNjKA1rjgXEkbbp8hgFWcvHrV3eb698D5ygIFBKmHctbACjvjytHfFEXxRb1wGybfBnjqb5G9muLoNocTh0ThaphRWadA5cQAtpWG8EmOXBzF7bqsfyxTjazXY3umDxPYLC0bbbSvgS4faHbmUP5c8MYoW1SFsnZGCxiQF7iRqQZoHbSoxlqq3bG73eFM(yAmjiwCwHSE7HGW1AGgbQTIS3jk37x5W7hD(DcBcdNKdCHJZFpynZGxxweJ9DOww0r91LAjiDCmXLPN6jWJLhe6(qqhBJrzomyuWIYaf4lvjThHk7qWpjoEeufb9vqJX7O5U1u(N9vq51RluTCo8UaJKtJGkWrMz1zwARYzG37bBNYC3JzAj5iLWyFd3b(m1o)PmPp0iFFNn5xROvCxGTg0qZfj56XsoCfNG3fjW(yV)DPGd)hOL1WAI6LmyLazDynSxKNvuooPuGvhaKs0wN4USnHWtYKroNcAK0Cnv9qsAPaRhorMKYPhQkcb2mtlHiBVnPSQwAyXb9sDI2jamSQdbSGiZU6UGycJSNs5ljpr73eX53p)6HzoGubmGh5y3GlgHsvXncebmxgPqmyQct2LlbMB7NmKJn1z(ochD4yegHReSJiIZ9UZsWOmJryxIqsOfpcXrgAdvqi2HD58rq1WzaSEsp)kCJR5yCMth4jGMNYzGujIxG2dJSsXcz5CbWcQpcb2K1oLUGeQBoTTC1YKxLdaJiU2A5Khxw74BmEeaLvtL4rQldBSj1LYqpEa90l1s0o3XkKxPrTdd0RH1yrjgamSzyNycDGUT9LCrWnCc84aUSjhToF6CjppFom7xLJ2HiQFor0d0NJtZduPEJMtKKLtW4KpGVRWfK5jKpM3cUcQLT64XRo9nzlUWdW0jm0eDnW1BcJqf(L3Im9iHmmO9Dsc)N6M6Z2nw9TAMD70N1PB6V(R)4FqTE)T7S8nnFef3gD2Q5JW1j0BA(i01x)9qW34RFRl)4FAhlH6)syv2wpmA6xj)8YI8Dx(b6Kk7TmRFdX)bpoXgvi1Qs2TrHq3b6hJkH)gJvw1TzGbLrXDVz4WB6pkwTC9c1ORTHpCvww5IBnf23OUJIRk0NmflKF9u90(jPJgpkoxph05GL9hqBvUASkhFr5IS8BOZKRy0q82nCuCjDrLzZbytJIFu)YO4Xza8MCQTPnkEQUyYOyWwCzEgEkepVWamJ6hszLnf3dsZFROPpzsDqJ6svSmRUy45pSbjfxJBezyDUrZMZWNimXWA9dFYefDP7p(TlIPXYHJSziUmC((CY0Yf4eQC01ohywnh2oxpD6dcV1ffo((atyjv(g)4pFcSLtsPptfD((7PbCn930ce4Vre2ZG)l09(b6oXfdOE6Hg4a7g5IjZGXAVZVaMejtYs)wrYu4gn4QVCj8oJbT7ZjnKm3HyIxBHtA8NU0p9gDrGJvhWbXoa6DF)Oa)rZ(ChxAV1Av(JBtRnrRnrRnslnw4R7snA3d(ilyPu)DmKEJIpF5t3Df5Hu6JWqeModuWqmVxwr8jgchwFXBAJOMoKwxv()6UR(8MF7ZXibg6WvKYSjGNpyOqgDDGfa4OEWKGhk9O4Rp)(ZhqBMZW15z5WcDmEqoS8Hzb1dPtLAQwpChbv6VB2AmbwQZwb)pUwCcrkW9(g9R49974szCXeqw970NAebTmKmCN7YlB(GU0vtV8lBE5GnV8IQuyhytV85thO5oYAkaz3VPtF6yQSm3t)GSrvAr1ywOFx1P10ZF2XWvnGE1ptBzdr03DOZpEl1bTP0ejVzKCmBLaRg9JG3KVnh12TqwxN8q)vw3OCVlRVV5u(ZMLYAALTnmBAPWVPrvsFWXMMjS47AZk)Fpwx2Ddx7xOB3Fy)VPYENRcf(TCE)B5U9Bz)P2F671a4p9dp83goMD(70Fi(yDZG9TbM1WlJd9Z2bJ3NJ(OS6Dyk3Zgx(fSM3)))s7BApd)pUcx3xzOVIzm)7TL89BV2MRJVw2jN48muSBJc2xiLJ1nsGVXkO5g9tbAmALkjDJMBS)nFa92J)RUE7)YWjAUUpo3ywsAsXcKFCGRzB(e5wdlgIuq(G1DxpmhJxsskA0xJF2KSSLae0u0jIZskqqftroBwEcIQKSNhF5ndU63V56HN0JU9ttQDQfUxVMbSwC6uHENe7A)Pe7lU8XHJ5rZtW8ZZb9Yz0)9p \ No newline at end of file +!S3ZI2jUXs(TeoNCU2N44L3pY5MSxmGFK4xlcN5E2KytJOb0DesSTKgpEYm(BFRQ7wsTescmiMXjdozSbPQRQ66D1QL09LUFW9Ao3Rv(4s1pUY9AZVxBm()WrNYSF8ETU38MRVxBKnBmLDcr)TJz2lUx7etJp8bcB8ZdhyBB6Aah693mzId19(RlEV2t(FUwr4Bel9z2SBTnSCVxRtVRh0RVpg7yBAZaIDDjCCxxM)7k8FxfpimaGl0wq0P4x1i6Ug2woCM2LWCHpaGmXWYWzM4ZWhfhf(SlZy6ukZrqGbbha)4y6iVjtg80c69AN37YBp9UlHZZ)kXJrkdeyb108IXoc864nI(oQLRgmkJ3FV2dDARn4bTbT7diZdjQ2ctYtaY1SiZPYrXhcqakX0DwisULr5ir72ExEjcNNviR5kyEDBtV5wHtDgzSHNdiJeIuJ5euuOkj0gdmoEWheZdhQUTfW)YPLLTffr8CIH16dDGSD9GhgbX0yQvOIg4o(edTlG5FF6uPgea10MWn18COpOBsCCUFexURJhCUhyy5RkfNn(rDm(an(bHdpsANQADvIBDvIBDvIBDv84AC2LlkPCkRtmfcByQnXyQGjfwQ45fFQ34PW8v7)ZJWOpp8uptZNh(Mzgak0y8jNWOA8tGDGHo4f5TWFOAi)EnABzdAmHmdmWDfQsucnLzmwm((D5Sbi(SCpfS7HzIw)2DV4onueXTkk7JxF3TQGi1yUb64b6fB93bg)Cm3Oyf0SXa8T7tmGrCPTJw7NhEMG78WtCWT)FT)pfRzu14cqTZaJyWFH4seoECF4tXJkypTo9717A0mWCI01EWn36ZqxyX5NsIj0Bmgdw)ipry6xsTMIFRsD0o2Zfq7nlCdTjqRkdLVd2gxYNtJqNBxkZIy(R(ZRY15djWbhemS3kjxPIYVlKo)BU8DP5vmgqgNGpfDTNofSh0El9POXRGGho6GfUn41AB688WhNrDNrzpp0g(NLT7ZdHV(8qXy(haa644EEOb(XzeRPuiYPRTem5jTNi)o4opL6Yhg3QhfbDrkEIi2csz(ioHJFGop98WocqhtNqaNbuy9OumasiWsj5z1utmgVy6Cf5TuhjlGh)5Hut6CiA1ZdFNHJXitkFIAfHlvyBDIJRykY)QF0WLy(Z44(nCmnGJe640yCq5o2Wbr1a67HV8TlusUKwQfDiL0y7hTaebt4tKwb9vDZICKRShdSv77gCd3EWgJSQlmI0AdFpX0oAJTFacZ7qMIHosojecJUNdGrKlKFsRZL9URhMf4cRjGjWp(8W)85F(5HI)73kCwVR71)Iof(J4NkeexdGYUK5lKav6OKGYpzJeOYjc0miyqhqXrzsWQKmUS9y60ZU7IUsWQMbyxdQzjy1YaStnjtDKWvpd4WawQW2irybByxf(RzQaPWDTsfiv6vQyQGfN1kPQj(0rjOwFGNYplLRSSdFmMSAJdKYmPuL0btdCrSn9bS6k5WUTVQ9z9YIfjZT9cSRkLSo2gY98wdZa6MIgocVLSMLrDmad0ajsYQ2rM26VneOKvTKrqI3rbqvoznRodY)aLc4dvYUxtnHGpgwt9HQCk4YZzMcujRNmCGyANtScySvRLU6cnTEDZsln3WXbZvNTEkoPtrrju5xbOmug3yDKEruxjpvoVx7lZdZTzqv2HI60MirnbY1jXdTpr7M(NKTAbYJXikrQszcXbt1dVE6GfjeuJ0HBPWvnthwnEyOUz7pfcPcNMIxLawv)9uCS81qTvv7P4E5cPWnJcyLvQQW)C2f)V5siUEwu2uOQ(S1slSFKYu9fBS6OW9BFX1BlhUeDZWikIuCnyWl71RZ5VMzWlWQb7F3TdwP3Ow0uU1wFB9S4xTuZTLIg)cS2GxDmRIc1Jru1vnxZP0dN2(IlxJGIVoudqBSx276)wPg69Vh0V9dThmODNFrBZCztgXTVdX7T3E5fzREJZY1oA1uV(6r9(9U6MF9lg1LZ9h6EJwVVScGVSSWP97PD(Ms9mW8j9V5xY2zCRq8Q7g7VC(6Hll9YtRSgXDD60tt7fnM0cRJd5tWx)5iR0XVvq7nxC9zrBVmgel1cAYOisVpPGIaysgfk9CKccKqK(WJxTFg4rf0KrySAstbxkqLIWvPQX0KTsqsgbQv1Lcc8bjzeeVQRuqIkyPmvulhkT5IpmzHIO2PzIPqqtgHrQnifmfatkk6eYfNM2ogOjJWeYbNc(IbzgOlAs1SqxiKRM7utrTgSOp4RMpxxehd8mrSAgTSXPpKzGUiPXYcBbaUsKfj11Qrza4jJ4LYAKcgJaxwOks6KmrwaKzGU1XdokGlN9PF7RpR32L9rGITk7JafBC2NWHNtzFeiCRZ(ifUBE2hbc2ISpceKdzFKtLTj7JkkYLSpceUvzFKk68l7JaH5w2hf0LhzFwM7YPSplZN5u2NiiE7Z(OGUTp7ZsilVY(iqCUK9rfv5q2hf0LhzF4cGTS3hok2UEF4OyZ79jy45vVpCeU99(ieUBrVpCeSn9(WrqE07JyQSv9(OGI8P3hoc3UEFek6CS3hocZVEFcrxU07ZsCxE17Zs8zE17JkIZHEFcrxo07tCKLB9(WrC(07JcQYJEFcrx(L95wa2B6gFhESzPHcWvoKpkaxBzIPi4jxZqfG5CkvvOMyBZzfGPTo5vaMYTSyHZYTpDwmCLJ51cWCoKGl0ojVZ0fG5CoLxu8MF5(sKFZ1KGjY55A2W4uiVslgfV5v(XKWA(MOmGc5ygZy4m3sDgfVBuo0V)7)()fFdylgYTeMdLjiN8ZXUUx4awqyK5pp84Jp(5HeRNIEsg11Jz98qlV5JOSJGpyy(rhxMH10qapJ6oWF)9YPWepl(2p(aaPhU8fj00wNy(8W3H)cG2HAs1Dpi5jzH)iYMh(ioJMaonM4JWFKZK8T0nW4(tGIWilOWL4M(MdgUR0X9DiUn8EEi1ACY4g3j6hae4q4aFeirbHePWArhC71t8fIPrfFmaeriNdbbG)OnqPj0tPR00KB36DHolCRCVXQScfqzzitU1QmHiOWArhPklyiFMuzJSTnPeR01zNhS733fAn19w)gR3MqmDOOivLx3ALNuYuy9PMufgoWxlUDb3zc7ehpL77HT11tHr3XoFXP0xi3V1t1H7wMDNQtSxCYfvNGr)CO6uO0xiv3QQqrl8o4z3P7KBv9TRkLiC6oToLLP0xOkvwpLxWndWUtbQC)gKhkrfo(ZGImo1ELw2zx5992UqlgEp1TLbqdzYDB4Zy05vAEVUY7cXDLklxY5fYK7Ev2R)8DD9VNq3v6SCjmPcxUtdqgNoVsZZ1v9o0DxP4YTCCX42DUcChLFt8FHARNhQTGQBmXqx8epWFPmasUG)uqbFuim6PFi2G(O4rKYhJF4Vh)zPJY3SglDu(kbM8rdwFWuo9j3DXLDV46Z(4UO8lXDtqEBq6V4Tk3b5Bzrx(85UTyRiuj3JK81N53k762)wuzhBaMpDEhYS74gVJrOCVoK9Xbt0quCtqTJnf9VtRYH4H(87UpMyekLJjNFDys(MLmQ2fgQXGTni1Gz5K0NAINUBjp1wEUj3KmlFCCxLS8r93wijGhCpES8H5ByJeWJ6ogy5tREj0t5SYl)D2JLFXXZgbjas(eBqCV()ccl4B7cOKYybxNxXfQ9yLlp3bPhbGpWLDhfS3XtSzZjUhu4uIHjA9mL66ISDaPFE4yp85IL9p88WV1PGGtomfF11jAMpI)JWBl3TlcMVuDNg8kcr(Bv9C)9nMv(40EJ8r(0E3wF32WhcwBNJBOKDN66gJm7DE)kY59fxi(FZDDDYNEg(S0UWoOtH9oT74UeIrZfGtmiunFc1WgY1KLyAA)O)Jk2ruUM6)ExSpO6lFel(L393Fdi9Aieq4dEYTF3BfkH397DRy0k)35w7dj83)qcNiEEQUpIGAeHGhYSBFaHa57UpEqusTpCWFPxhXxvbjAlFuTUpkrKfRl4rm82hMiucV7JteJw7du8xNafI7W21jaso553r(aYEVNVQNF4Jn8T3ZpucV798JrR9E()DAL)wPV8zY3Kb79Lv9LdF)oS9(YHs4DVVCmAT3x(RkF5oY33i79LJMx2)TWsEKx2xc)5iVCeAT3x(V2vKNt(4x4)k7zVtUQtUYBYOT3lxrgV7DZJtS8YpFVNEE6PNyp2rbYxLGMacDj4CIVkrzZPJ)MDWM5(k574RV8rc4BJ6xdHbcFTNTL798qz7UDRNhJo50opFVV)U23ph23nBEeKG9iR4vY3(9Tt0DkR)lQW8y)Y6lH)mSRzJqQCBp)Vpqq(fiyLxrUCVeG1zx3kFZxUpkG6gVn41b62V3BdKV78TFBukTpeWR0qabpYy3f3HM98FdXUVQ(ahAL3AUBzz9ks3DBD9Xj0(c7)Q1z(fE7w)vHZCUC)HRiD)m4mN)3F47DMFv5mVQAT7f82wFFP2rCMZLNaoQs3DAH2lrO91z)vR38M8aI6Rbp6C75AvCP8U3ZEN9KTAV39NfV7yW(M29VgyVV55HDnMmHY4w)ty2ZXn7K0l2)n09ZdpqNSWWfnkVO73C4)Ce7NIHUbbBtEW(bCJS5(v2GL2jMgF4de24JK2mZPhV04)xouACVDvoyxfMsG(U7dsfjiLuQKlHOcKW7(aurj1(Wt)fl8eC6Gx(rjSHG4V1Hs74Y3WilFAXBwOuEC7O(6zzNTifBYdgUVkwPcTC7XzhnMCE3UMfjsT9lCX(On74OnRxbn7FEJKqKMC5Hose57NHQz2jpOc3hE5VqRKI)Do6(hBFjFNa3oFE89ftkVB3qsjrS9E3Vc9Ut(XkA(T5I6zrztn(aDVBT6UlYxQKhBVOqj8oF)ffJu7DO)lJd9l85e8x4DL4T2pszVoUZeETe1yHVizBdzOiB3PXlItN9blEnE)hU2HeYXM33xNFcnVNpf5hr(U7BEFF59V2DWF1S4FB8LLT7x8llB3D7LLD)TFvsxw2X54LLD8NVll7(B)QxZv7KseVmdP9f7DHIciN2VN25zgY9l5fJPThJSVzTiRCRuIS1RzBGKD3UATrjt(e76ty4l8gy5old3Ril4cU)eo6TMKNOSGTkaEA8lhuyb)efaHfAbFH1ydDk(8iLbaQBsCWm8JDWZ(9)lIPbb(Eh8WDSnrPYFYHbr1pOSNf0Xtch4pzthDHLl8jxYit6)um7(jac4eNtFF8t8jXz044jaHFsqDXcHOc)rQ8cuDr4xeBn0)mu88Nllmd4CoSfEdHXmSzfokbifZ1Fmr0eOB4tvjudl1QjWDLQvd)DXwpp8thL5qbHH)qlECdCSfpUEj(FQwj5rN0XceEI5uN6ToPEx1PK6GwTm5wIjzSHvojtkxTkknQIM)LAw)LjtAvNlm4cuqcT5YKtR2SZjT3CzY5qZx0CZmPbkmkxc10Lkv9LjsQ3GllAwryMuBJfjTB3TsJYBUiPV9upAEzKW1WstLIVijsPJlw8ifBLQL2CJKtpTA9MBHJdZG64MVIe)FVbIeL)SnIe4NnxK0LsCN98WFXYy6m3ClklQPRGZTAnFHXyfopLkZ)t5TigB1s9QSfXt0MrMtYRqSCTmFovUCPxMar67WD8GGkn2ybsXInk2Dls6CfzAEfmPogASuRwO8OsTxM8OSmtJixCRYBS8OYPDA07KnxEafMGVnaYlxMk8ssQuNltEHon1ePAK)P1M700SrZM96Tf2i2wVnhDzeXwlvR8g4YeK1PEXTWL50tBTfPB6Y8mgNRzBkvwKaEJY)wTf)pPL9ETs20OtX2BtYM52qFs5BTA8OjvX4bLl(cdUwxevTKqW0O1MxQwLkf70kUGH32NSDznBpRXNc9F332wW7fUaLcti60F)35N153)D(lz52MuM7V)7fWrRS6etbJj)EVeNiZnLUKU(RbbFjkW(lpLzp)mavhG4tPzCj8EaiC2tPD1Fdb9pcbfBQwcxk7rBlBlkFNtFhhmEB0tW5y8wO9hbIo)ENfaSEt9)0kwpUUe2uQ7YhH3e6fJ)bL1XzbGe3NgeDaFAneJIHGl0XP2SmKLa(9xLKemNTcClsYtqW1R68YzfhSsjaL6uCzC9j1vvvr)RSsuRWOjL1EsmX9rJuFgJqIjWD(MBXwQQV1rCE0iczPdJyYai)yfbuWYMeIZLHFjrru8KgdQkHLl1fgVbPb)uQ0mnMufhrpsKfAuSskklJtCosp4uOTNyLcdxBLFlcQJ5UgFOC9vslKvIIQykNpQF6PFRZ368rmgEmuFCqKXJIjfomYQIPkWxYSz7ddGMpUZDuD3b8f9a8GTgHHewhx)oeNDSJVKZ5aumHZZNgPEw5CsC(VqE6rjdoBHZ)GY)4tXbgZPxPj0lbFocukxrqU7gi6b9ck9piwibK5Ks1KtifWMQjK0fiSqs2JOzBGEI)H4NvvpPmHwcUq9vWeDzCPO1CcU9xxF)d5kcZlCqCKjgut86Vn234oYHD8lgjQ3K8S(xjnXA6g4sjFik)trjGfCEpP)rc4ImzIPHUlD8fRaqdOwiIlw8Np)kMnX8HuIgOo3s40cTxcpNq9biPP5pLmLsI3taUSNSjDnLKASGid0hJEHJm4xREHhKGFpkc7CuYenJl2e1CImxM7CQlHp5p4pXqFzuX9dpyynww4Cmwoictc0ej2XsZAJXzeiuMFzQJ3OdKZwWRKxa5dfoC1deFjTX4JmnUqXIpPIn(wNJTNofjyK60Lc)0qQVfK8I5ehMjO18d(AouVb)BbXG5CGyKhI7oJ0L6k043exnnrfempAIPfstbOAm(JrTMtEejBh)JPyGNcvd8NJMjkEmnUbzwxQFFNlHLBmRpvNpttimSl1r9JB6n47hJCr8gWmMoLYI6AI8Zrk0k1RUjFl(q56nhxmXeXvU1C8TlC4x6qJ0VwR8Cc(Hbs(Ae7FZP(YUiXjvFUkFpaztJXucYL)qYWCXe50HZLIPZikV1ymd7ZdpqSph60wBWdAdA3FWHHT38i)LKV8nRia6iQoXZbrgL9ouKJyt32(T0XPiA1GQzFKltFeg2JeuIIBjeWZIpyoze8NThtNk6SfTaWxRJSNeqpXG)odq6LII6fMrTGIpLryPV3WbdaeBmCozg5Du(1ogRvbdcYjiEgDILcL58NSueettStMMNY3qy8jsuOdXz4uvi45LLijmQKhs48gkXjrKm(AdXModz4VlOTOeyLZHWTcLtcQEIjJsg)uIk)760PNM2HbmjogugOlRQ23Eiylxy7ph5Xs5ymro6epxHgj64fJLmY2l2mnrKCT9JXKhgUIOobBMoIURxyVHIDvh)eILd56Bgedd2rLqPgC4)WJniSzqjcupNhMJtjArkOmK5C4zfjoPbpNhtp8epWauj58frmICnM7ZtW3GkaXdwcDq1TrBQdMdffkTgbdo09JZyOPWIfuctQ8k5KIdmFRnTSTyH5elqwB(ubF7s(PdiIG78C4Kwz(VaIFRBSWukkE0aV8wl5uKAKwME6Xy5XpWOhBCq2KjQV5F0UXI3QjWAPxxNBWssffjlVuvjJMU03naQV35HUEZxCqi2omTmdbr9LjX6EtpnFd4XuhxXI(kee8a6cl52DgCx7lZ2p8oltkFdU4(pIAAhK0GQeMzQTBg5UaGCWIxEKVtyT(hO)ae66rguFY6HBz(mzAPGyT8oipaWUH5thYJ0O2hYs8Hp6LDQPyqhkSIqejZ(wlmO0JZOmPtOjKlu6rLHtDeRIunO7kj9QmNdAQwKZuov47LQqlLGfKl5Lwk66wgza)y6MdjmQLwCQxWytyrttRs60ePJnCW9M1a67D9xtWOLy)YeJrfeaaQ7iSSLKjYjRxf6zpfXWr9KVtSG(JMD8CY7paJLazcoaS1)o(Anhe1YFfo(VWlmvXIhMjE76bDf43oraYr0DqC899kKqUylhgHkj4T5ViQ8sYtpip)SR4Qm5mZ(XG(TY4AkPpJynv(EdzfGUGzpLrvEpdvatUM4vimqt9(fgm6adz)UsvtgdySQawvINXyiEU2Ndv5VoZHWwVd7jjvGJ36PIj7rRYHvX3wXjjtPBIbgwkOXkP8Ylx)Ybps6YeMKjzq7H)w81Cy83)TJ5pCMelsYrX6B(W)WFLftYqE5wSJDKVlXqBb1vhBlQg9svsWESDwEL3WQeg5PSsw8MXp2I(4bnAGxj1c9P)hpOCaU9wb(sknSGO(F1TaEb(vhfGU3pF3Vwq8j5p)8DH)8R()u4WJIYgNry2UZmsIrkxTA1s8nYBxQUX8e4e1or85eXBpkOWGiKsfR1lxMJ1tPGa6e75JiSXZHcFYdCxTv9w8BDcgzSHEQSm25CGOZd0IKhjpXXE6yUuX683(LeMLy77KjwhqSERSSIr2oozJ7615x98cTTSmMzyUMsAnBcqIfyPMlJEEBUuZz8lgEkZOInRleOMUyPLdS90NTMkHqHwQYRg1BkSDCSn55ioJ8b6QTKd0XRc)fR1GRPTMyYJJ2XMX8wKPg)OmPS2cSu1cHF8B(MmSgQuIBnyBbnxY7BsBbwz5QNGC73Sn1kwJRy0mwmdJ2V9ZmxcF3vj)uS5LOXriuhwl(5gtNHuC(CI14yWOWI1kX362G03LzVaV1HUYWI7wkA)NIzXNBZOXxgMLquTQI5Q3C((zPpfHh6neJi4SMi8wBg)U47xO0f4APCoXHmIAMM0TuDrawIPHl0zYaOX610SpvvwLw89OmypyAswiAK(n2mZXRgXDThpDLgef9Jy6a6jODNtim2AefkfCZB6ee3ew6kMg1QvMRymbHkyrqSmCWDA0Q1irWsf(w4UG2mBDiy1LelD62kRBwuezP3C(dVaKnU1ZeB27mgKWC8lHaVOPsdUDZMtRewMS1JYnewSDMHLnngV5tHIrDEbXsZisgeMwOHWLHC7vnnkgt1OnJrwyXt1JC9QSyXWizNTSwrX(3lkrY28sLcj7o8lgw)JP8AHsMOvBX3zBfo1MnveUhQb9TBaXII0YYqrGSFewV5la1H(2IpTuiD1cmAYVLuG02G4LTbHPR3ObF631GmY2eJ3JfUTrisugfU9fnnCMTMO4xjmScuWwYjTaW1lkc0qgJnBMUmmQ98aINOYtide7DgzuAjqHsY3mQu2tRPZ3QqA1Iv5rzVIWElpqgJUgOURTCrZCGsa505sk)BZP2wu5HZYEOAXw80vxt1btEuD2B(igrFtYG3Srf(uON(mB8c2GRrExB75VWWRvA1syHbscO0vdhhp2k9bsUwkKODGZyLktxRsPMTeMlgVdl75wIU7lKHR2uWWNAqXR)0liEaOKxqyPBuuREzEi53mZGjEV7PrgLCW51izFemxUzjvVeiK8yQZldXVaruTAnLjUmmnfjUSThVA77ZHsZke8HLmKNoLrMNrTl1Qwvu7sFcyey75WNOFG(svW1fojVH8wQWS(uStJxyC5VjBhXYTkjsRaK4egqPnj6C1Iv4C6PIoH6tTgVbyPrrrmEL8QBhcRjlkgWcBtISuVyLglZqRpQyt9Cs3iPEvrdKD4Hm5rTW7FRxOrsZkTe9Vy7zoYuEJFTozgc6G2)kymLz7Ti1sfAuwqNbqRoECrr)1O()t4X0ZSgKs1eLSXNayo9vY(HiLphMGxwYuMire(x9K7md9Vl6bbhtSYT(8lfZ52MP3Zju1xJkHziUcSjXDCygExflwQiVsrnIodFaxq57jjZSgdiPfPZeXZXuzpALXak1QARqlaipkplyMdOgeGIpGhdcVRdIg6kOsn)UwxKWSqDwxQzTMYEUSDxResxEJ23KTGSm)McPqBMob9wob6C(dzpIkvRjgbJNOr2VA2erel8xSmMGcEEX8zparfzNaEWJyuYBvREolHzJQL4tNFLAnLobvBAZWfbilIvQuLwcRFp(An02XH4z6MjDAwwie8hZ5KNM7hIp9bjddFoXvWBNjtDfT(giufDmdXkg6Qh0AUf(LRXqqPhsTuRknula4neZmDhQ0Sw1k(1RBXxNNv73vTCJwCFOFLVjbXD)NtMePUSGNtnT5ZOt9mNBix67SgxRYL4Jdmh5mfiRmJxyv8X0OHONlnDBMv6YxvnsX6bly9iSoINhEdB0kyS6(gyyernCrBYCavlvSHSfFz944Je1NYwQjvn4QcXJ90XKsEx2Z(MvkvlsBspsPlYuxwPK)64knaUBb4R8UeQlRJThtUhz0CjS0t9wY3XLVbrXtrYw8uQw5I8qMNJ7D2S9tBvuyl9)4H7d81kGamOAIvy5kIfbm)iRiVsRQn5sXUmcUD1UIm1qFfdqW)Au08EDGVvTiR4J2CIOx50ZBvsSgH8HiN3R0dcYR0SPmBhL668iFbuZCeLB0Kpv69eDnmSlvQQ4sBWVypDPU2R2TgI)1uCzNmCmSCPt9VkSNqjZxXaB0ky1gFCf(cfBvVmFUFl0aNUi6bXCvdrSgGAMgIrCfbxswM9Y8fwLcMuXL)uKt)Tu3msKvxC1eUZc86FNSKaqHOpl78F1eYPRiJhtf7BS(2KSZUuQIi83jmXdRa0Bv56lKzgWQclSU41gbFq6mbY5yVIm0vAk0(OrmQd5xrS3qty9j4gui78)3Dhj6242k)xsXdilq3ul57(akGDw7nP15OwkjD7MNtvSyS1l2sUsY5c41V93CqQdBzsV9aOOnDtSP4XOzgoxKCyV3saEypngqz1MdAcQRdD9EHw(cSb2eFH781O8d5SJOLR03QAnAvELyPO6dQLJ1AGxlB(eOFqFqcu0Z7hDPT0u1lJw8k4ZXCkeiZ12K6n72wUMoKkJZJEYtFdAzjD2C66eKGmcrGH61MB1TLe75SkgnY3XJDgut9BWc7GkMyqabuBPJnJJcuIR3JMuRKYsxXYvyYirlJFh2e2XElxvLLON4r7ZsKb8AVsNyWTmqRftQKCtjMT3SthwkBg(g91x5S5UHyBws7jr4(midW0psDR3q6zMC2egcfd2RzbgsuNhPfVIow6hyW2BRUGPxC6yweksZcC98ideHUS8ZEsbU9JmybTDDgxNjCGKFyMfbAxBjp400GhEvFLRXSgdEzfQLIOsgAGL0dl(axHaM5w1QjL2so44fEpJ7bDr4B6HlOf25lnJ2AknQ9QW41ij8tcTM1JDnVltUb1m5JARWtLHEPhDKlwH3SqV4Ohn45dLkboG5Ls3VPOGNp87lVvN3pSABzy5boEAzjmjDQt7M1KrMVcPaNHKgYcwWI6eniJ6SznOAAVLjf4n)aUhc06jFdoK)obVGRCnzbm6ESqpfRrlPL74bizKywIjousM9ipmXiifFGMKeks03Yg14WA3N8DBpet1PbpfTpfhnkuVzwWyqVCJ6ukO5GHXEZODaK2kBlxf0OKLiLEpcAst7UsNxVhuUKMlLAT2HQtZMSV(J9wHN2KXGXrRJniIxAXUlylL(3e7AGDKDubsdmtnf3Yc7kajNlwKcwdb2MHBG7rEbXA6xlz09tjsHb)ATTvQEZnagClm2xl)rNowTK4M3WnhN5wGOg5w8WGZBGyjlP91RciXsUrHyExtVvqDKSFR1oZ3gtAt1KZj8twe4Bi4sY4aQ2DuhhxLhy0gsh0MHH)C3(a1UTfVUprGVZtd2CvY2DdLba)ybuiTxv(5OqdS8T5GO9JRbtOdtdcnXci9Kv5DFVKPIWe9UcacD7WA)vQpmybo8MiJuJkaIOdugC0e(p2I45Ejsjrt1ljQvDoSt4vkZuYZzuGEONE6CnEPXpxastagAkKngCQHJWGRx4mAvTUrOnAq2160w6ExcDgH3buDngpXcAsUbMzb0cnS(14PIum)w6fBiUZTBZs2XZecWlJHzlwVbiwTRl5o8Eq6GPz)sT6wRdL7TWiygl0pN0gCinl8aNHBJl9r3Pwhw0PlmJyfuD9st6AvkyNvpfUe40IdDofyhdXJNdT7iaRi9O0yCeBztPnQdotKkmyhVTmIaJ8Ecu3FJzTWTBAjv1XHyHcorei(CHxG24Gy1bmTG9oM2pZ)amLERQF1kAF19dGmL3M7T71vVoqG4nwWAWkGhu7axDtoalxBxCdaEnUBrjBpmhcuOX8sPm4PO9yO62QLD(gp2eoToqUANv9HbXI7neSC72BfrPZWuQ8cTtmXMXs6KruXOBrqlAYs6gghLKEFqQEH8GX4DlS8Wg5MG(xUDFogeui4tq2nbHP6LyB3vU3EgHsiqB3FqyO(wnY3eTI9iWOG4IMDl56pp3wp(TRKPSpWGZUDs7endJJ1gHGC73Lr4QsVhZkacGTvMJCOpcR5SLIEIgBBSdOua3FjGF8Ab56GB80BjcoiqbG0s9e5U8o)7dbyyhXWRAG9UtngKqqbvpPp(QatkVYbzODWRL9yfhqMpzW4Nrl4e4VjT4THgMtatVLC5jZxyWVre)QIvmRCO05TWqdZwqKyVfbVTxovqTtPnA6Jlu2a6Gb8nDTVbZ0QZ((KTVDIqlfarLlegeq2SwhgxIZHhlwbyrtRRkaNSBt4YMJ238Xyt2wB3Ub7VF(wwAGH9Kii1JdV6PXOyFQHphyAyAXri4g6OPJIWF0GmP2YvE5u89Ewaz91LGLscJiHgms4m5El38Qiz3PJmEnGTNKvXRXRGgJt07Wg5xv0I)FQSsuXmdFHSXxPefp1PF339BFpD3bum14NL9u848auHSNcFaL2i7Pq1xDrkChx)cv)iTPCfkbsHBorfyKLWv0Fgm3Q67ivWu5P)EJg)zgoXmTiLRvkNPtOEqEUn3kXK9ei(mEMBeN412448kRnmvF160TGqcTfOsGGQuC3bF1bQ8zsL4lUZ(8xP6u84M9FQm16WhJo(sLiaP)rCnouosbYX5DBLE424mRrmohnnkemA6qECroW)n8V3vizybwm)T3EvIio52E(ldWdaaDK4U1b8haSQ52(GKS1RE)nr3C741jpgC7nUdVT30P4T31TRM7LUA(6Pp6dkkU1b(LpUlEXHo5wCfGWRhIKJwS2JhRVXFnMUeYEc1IJo(1h9oIUqmEXBjMjc((m(RY1uDa53SuMgX4HD0uAqQU9YhTVDsjiD3Dy5QvSZlMKEuPHMY54RIp90nsjzQNLDvKurdZtzp4TjYDIWNoAu0mho)xukP8Og)88h3xx6gwP8udMNkieyxsp0W78xV10S9AWu8MtsHFWgIXSozI7KZTGFPkG(iiUCIZuWmROLQ)E38aFOq6ycpXr118v9ZeNcBnQjo0tM4GlDs68jo4jZfhgOOzcWuPGPG2(NVie6f6V9ae2tqxJ5pGjo81ns2OYGcD2txVYh(DoCr3OohFXz975E3Ol(4DdUEW5U3D15dpDK7GXd(qj6MWa1mJUvmlkj2Im9h8IYzJ0YrzXkvLYcZjMAs2sN6)LpmF)FA51P)GOKTMgDyrqr3mNnHarr92zA0YU)F2a9Kx5QZtJvrn8YYdGISUNbWn6Dvf111Bb(sSg12VvMOVoC3j1RniYyYMj9WIxwsLmz6pxPvypQ(XGWQp)vgLGNRY(3JyTYqv1kSP8uhl8Zr2rsjsSTytC0ihbK4mxm9Xm5AQXNVb3M4q7n0jo(I7bHHUK8Qtgm6YHxnsjRktX9ehCmb17zYArzXNBRv(7xIS2DaB5Im)TFX90J)HbJVZQwTcs9kGfR6YHAhMO1Ow12KTzc8EdlXYYpzCAhiy35Pdo)OjZ6Qu6oAJ0TAXjdCL1BLCXujo(zMTR6mxtjwjLrVvRouXfLJB3qbMKmvwfxvCmvWE44hK8FjcfQLe0wb)I(IugXzraKa6WHAgagLEhL56z164)Bt)Uo97gQ6fYB41RbdaaYpuPwtCEuiw1dMDmnDm6g)K7b2jXIhUmkab9(x46EXztCa7Dbpuba5IRChD65dM48Yfp8qIayJHx679IpERHVgn81YhEFrIxkMmqe4GShW7driimmo4TF7x(X1E(qtbZkDDXzZEXpYaWNiiaMbmwmdEPkyzdHHrjGa4Dh8V85CS1fRV)(OyFKKW)9oWh)5rX0RtwzjbVjqis99IGDTQFpL18PGe0Z5j9ZkraE3dto)110TO2W1O4yWfE06gznIK40giSwNGvXlP3LqrW4NuyCRcVc4ZL1I)4)cK89DGdpfZ4iYkShOCQEmEFWlRWCfZZEVwcko2mcOqT)KcMFVLQ8CMREx5ErHH0Hq121Kfva)rFNPoYME65NdZ4CV4sCQbw(NkWosvhtODbpaW(XdWRD3joXrOgvxcjD(film3YFAZwIWcp909eyMTIJNil)UOifYcn)9NsSjAFhyJDstusm(lHSKXIaL3ejgZwe98WyXVUweo9vOUhvVaLaFiiynr8XfkS19Ct4xOldErSGlyKiCgOjL4(WVxeUNTOmUEhemA06l7FCZRI7AeSQuj)0gDyzHnyjoGUpsIodq4r6g(wl(R9zjv3ZQgMlWi1cdDMche)DL0tjLhtlI88jgwOFdtjjFlxVinqPGbqm3fIbxhXkCL2Qou6IBRs9daBsMcL86wpcpMtBxy0ITl8bpEgXMLV6Pv7ayqTuBviyIbE0P2UYiRYgfMk1C0h6EFsbQtVp8bct0Zh5mf(c)Z8Ebri5SBw2O2QOfWKOqmaT4trvU4F9cL54hCOOKewfEsJ8oULnUdP1VseB6P9OpQsDwk3FPeCjyFH3IvZ9iohQY9Pk)kvWl5f)X8UBC(hhcMqaVmvyXxPu0h7dIYBbY3JkUykYcjkm5kMu3woSOQ2Zp7OCLYAI6zwJGx2hcMDeRjuEnIQ3SoS5zqYrC0ErNVoit1(bM6I976Vyx)SFxlgvIw3(wYq3B5(D7zycmZUBJ24gZGEWrYB1O9UxZW8FRJiTFov7qQ7(m6B33OU2O4IS3UO6flY6DMh9kdKT2hU7RLxjNFPKk5xwkqSkgyuC9(sH0XbJ9ZbFPK6seLRzv5hIoc)xpQDJWp8hedRCINURBL)ZYqe6ZQhxxPN)SbgSxcOy3xiHJOYp2kS(OAHLEbH5sUXBpQ)bi3(VnuIS6zMACpzAaUSjZr6XUqTfOtKA9Nb5p3e7TAIZnzFkzzuu68lL58s00SY65din480f3IolIaWlc)Bc8ztcjpCN(4mAfD1A19W221A2Uz3MwwwTA1TDRjp8(M1Z8rpHIEW4t)4jkFy3d7kxh4donw36Dbwdp5r37LT8ePnG1L2hVog66blE6QtPTQr4JkdPhgdex(9Z54XdgCEU1mOvJFiibdsL)evhtwdgn9jvqcAxRoIb4bnap0uGH6dUgTD)TiysbskLC6aL8zgP1aBcc4J9G354rrjo9WXfLqQSBp3Z4JZj9bH4atUFqJOR6vl)YQtEp803l(2Ro995F79oe47efhGlyp7U1jxm(0F(IZD7nIgE)GuzqcGXkZxKrdg6Iu)0isAa8ONGxMg2i(FY)p \ No newline at end of file diff --git a/FreshShit/RaiderlosSA/filterLogBySpell.sh b/FreshShit/RaiderlosSA/filterLogBySpell.sh index 0819eec..0ed46cc 100644 --- a/FreshShit/RaiderlosSA/filterLogBySpell.sh +++ b/FreshShit/RaiderlosSA/filterLogBySpell.sh @@ -1 +1 @@ -IFS=$'\n'; for spell in $(cat spells.txt | grep -P "^#\d+" | sed 's/#//g' | sed 's/!.\+\?$//g'); do grep -P "\[\"$spell-" ../WeakAurasIridian.lua > out/$spell.txt; done \ No newline at end of file +IFS=$'\n'; for spell in $(cat spells.txt | grep -P "^#\d+" | sed 's/#//g' | sed 's/!.\+\?$//g'); do grep -P "\[\"$spell-" ../WeakAurasIridian.lua > out/$spell.txt; grep -P "\[\"$spell-" ../WeakAurasPhatphuckdave.lua >> out/$spell.txt; done \ No newline at end of file diff --git a/FreshShit/RaiderlosSA/init.lua b/FreshShit/RaiderlosSA/init.lua index 2543db1..6243fbe 100644 --- a/FreshShit/RaiderlosSA/init.lua +++ b/FreshShit/RaiderlosSA/init.lua @@ -1,1047 +1,9 @@ -CLEUEventInfo = { - ["GENERIC"] = { - ["timestamp"] = 1, - ["subevent"] = 2, - ["hideCaster"] = 3, - ["sourceGUID"] = 4, - ["sourceName"] = 5, - ["sourceFlags"] = 6, - ["sourceRaidFlags"] = 7, - ["destGUID"] = 8, - ["destName"] = 9, - ["destFlags"] = 10, - ["destRaidFlags"] = 11, - }, - ["GENERIC_SPELL"] = { - ["spellId"] = 12, - ["spellName"] = 13, - ["spellSchool"] = 14, - }, - ["GENERIC_DAMAGE"] = { - ["amount"] = 15, - ["overkill"] = 16, - ["school"] = 17, - ["resisted"] = 18, - ["blocked"] = 19, - ["absorbed"] = 20, - ["critical"] = 21, - ["glancing"] = 22, - ["crushing"] = 23, - ["isOffHand"] = 24, - }, - ["GENERIC_MISSED"] = { - ["missType"] = 15, - ["isOffHand"] = 16, - ["amountMissed"] = 17, - ["critical"] = 18, - }, - ["GENERIC_HEAL"] = { - ["amount"] = 15, - ["overhealing"] = 16, - ["absorbed"] = 17, - ["critical"] = 18, - }, - ["GENERIC_HEAL_ABSORBED"] = { - ["extraGUID"] = 15, - ["extraName"] = 16, - ["extraFlags"] = 17, - ["extraRaidFlags"] = 18, - ["extraSpellID"] = 19, - ["extraSpellName"] = 20, - ["extraSchool"] = 21, - ["absorbedAmount"] = 22, - ["totalAmount"] = 23, - }, - ["GENERIC_ENERGIZE"] = { - ["amount"] = 15, - ["overEnergize"] = 16, - ["powerType"] = 17, - }, - ["GENERIC_DRAIN"] = { - ["amount"] = 15, - ["powerType"] = 16, - ["extraAmount"] = 17, - }, - ["GENERIC_LEECH"] = { - ["amount"] = 15, - ["powerType"] = 16, - ["extraAmount"] = 17, - }, - ["GENERIC_INTERRUPT"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17, - }, - ["GENERIC_DISPEL"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17, - ["auraType"] = 18, - }, - ["GENERIC_DISPEL_FAILED"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17, - }, - ["GENERIC_STOLEN"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17, - ["auraType"] = 18, - }, - ["GENERIC_EXTRA_ATTACKS"] = { - ["amount"] = 15, - }, - ["GENERIC_AURA_APPLIED"] = { - ["auraType"] = 15, - ["amount"] = 16, - }, - ["GENERIC_AURA_REMOVED"] = { - ["auraType"] = 15, - ["amount"] = 16, - }, - ["GENERIC_AURA_APPLIED_DOSE"] = { - ["auraType"] = 15, - ["amount"] = 16, - }, - ["GENERIC_AURA_REMOVED_DOSE"] = { - ["auraType"] = 15, - ["amount"] = 16, - }, - ["GENERIC_AURA_REFRESH"] = { - ["auraType"] = 15, - }, - ["GENERIC_AURA_BROKEN"] = { - ["auraType"] = 15, - }, - ["GENERIC_AURA_BROKEN_SPELL"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17, - ["auraType"] = 18, - }, - ["GENERIC_CAST_START"] = { - }, - ["GENERIC_CAST_SUCCESS"] = { - }, - ["GENERIC_CAST_FAILED"] = { - }, -} - -CLEUEventInfo["SWING_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] -CLEUEventInfo["SWING_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] -CLEUEventInfo["SWING_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] -CLEUEventInfo["SWING_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"] -CLEUEventInfo["SWING_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] -CLEUEventInfo["SWING_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] -CLEUEventInfo["SWING_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] -CLEUEventInfo["SWING_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] -CLEUEventInfo["SWING_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] -CLEUEventInfo["SWING_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"] -CLEUEventInfo["SWING_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] -CLEUEventInfo["SWING_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] -CLEUEventInfo["SWING_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] -CLEUEventInfo["SWING_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] -CLEUEventInfo["SWING_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] -CLEUEventInfo["SWING_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] -CLEUEventInfo["SWING_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] -CLEUEventInfo["SWING_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] -CLEUEventInfo["SWING_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] -CLEUEventInfo["SWING_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] -CLEUEventInfo["SWING_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] -CLEUEventInfo["SWING_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] - -CLEUEventInfo["RANGE_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] -CLEUEventInfo["RANGE_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] -CLEUEventInfo["RANGE_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] -CLEUEventInfo["RANGE_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"] -CLEUEventInfo["RANGE_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] -CLEUEventInfo["RANGE_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] -CLEUEventInfo["RANGE_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] -CLEUEventInfo["RANGE_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] -CLEUEventInfo["RANGE_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] -CLEUEventInfo["RANGE_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"] -CLEUEventInfo["RANGE_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] -CLEUEventInfo["RANGE_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] -CLEUEventInfo["RANGE_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] -CLEUEventInfo["RANGE_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] -CLEUEventInfo["RANGE_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] -CLEUEventInfo["RANGE_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] -CLEUEventInfo["RANGE_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] -CLEUEventInfo["RANGE_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] -CLEUEventInfo["RANGE_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] -CLEUEventInfo["RANGE_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] -CLEUEventInfo["RANGE_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] -CLEUEventInfo["RANGE_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] - -CLEUEventInfo["SPELL_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] -CLEUEventInfo["SPELL_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] -CLEUEventInfo["SPELL_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] -CLEUEventInfo["SPELL_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"] -CLEUEventInfo["SPELL_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] -CLEUEventInfo["SPELL_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] -CLEUEventInfo["SPELL_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] -CLEUEventInfo["SPELL_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] -CLEUEventInfo["SPELL_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] -CLEUEventInfo["SPELL_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"] -CLEUEventInfo["SPELL_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] -CLEUEventInfo["SPELL_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] -CLEUEventInfo["SPELL_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] -CLEUEventInfo["SPELL_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] -CLEUEventInfo["SPELL_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] -CLEUEventInfo["SPELL_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] -CLEUEventInfo["SPELL_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] -CLEUEventInfo["SPELL_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] -CLEUEventInfo["SPELL_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] -CLEUEventInfo["SPELL_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] -CLEUEventInfo["SPELL_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] -CLEUEventInfo["SPELL_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] - -CLEUEventInfo["SPELL_PERIODIC_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] -CLEUEventInfo["SPELL_PERIODIC_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] -CLEUEventInfo["SPELL_PERIODIC_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] -CLEUEventInfo["SPELL_PERIODIC_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"] -CLEUEventInfo["SPELL_PERIODIC_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] -CLEUEventInfo["SPELL_PERIODIC_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] -CLEUEventInfo["SPELL_PERIODIC_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] -CLEUEventInfo["SPELL_PERIODIC_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] -CLEUEventInfo["SPELL_PERIODIC_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] -CLEUEventInfo["SPELL_PERIODIC_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"] -CLEUEventInfo["SPELL_PERIODIC_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] -CLEUEventInfo["SPELL_PERIODIC_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] -CLEUEventInfo["SPELL_PERIODIC_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] -CLEUEventInfo["SPELL_PERIODIC_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] -CLEUEventInfo["SPELL_PERIODIC_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] -CLEUEventInfo["SPELL_PERIODIC_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] -CLEUEventInfo["SPELL_PERIODIC_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] -CLEUEventInfo["SPELL_PERIODIC_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] -CLEUEventInfo["SPELL_PERIODIC_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] -CLEUEventInfo["SPELL_PERIODIC_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] -CLEUEventInfo["SPELL_PERIODIC_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] -CLEUEventInfo["SPELL_PERIODIC_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] - ----@class CLEUParser -CLEUParser = { - ---@param ... any - ---@return number, nil|string - GetTimestamp = function(...) - local val = select(CLEUEventInfo["GENERIC"]["timestamp"], ...) - if val == nil then return 0, "Timestamp is nil or missing" end - if type(val) ~= "number" then return 0, "Timestamp is not a number" end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetSubevent = function(...) - local val = select(CLEUEventInfo["GENERIC"]["subevent"], ...) - if val == nil then return "", "Subevent is nil or missing" end - if type(val) ~= "string" then return "", "Subevent is not a string" end - return val, nil - end, - ---@param ... any - ---@return boolean, nil|string - GetHideCaster = function(...) - local val = select(CLEUEventInfo["GENERIC"]["hideCaster"], ...) - if val == nil then return false, "HideCaster is nil or missing" end - if type(val) ~= "boolean" then return false, "HideCaster is not a boolean" end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetSourceGUID = function(...) - local val = select(CLEUEventInfo["GENERIC"]["sourceGUID"], ...) - if val == nil then return "", "SourceGUID is nil or missing" end - if type(val) ~= "string" then return "", "SourceGUID is not a string" end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetSourceName = function(...) - local val = select(CLEUEventInfo["GENERIC"]["sourceName"], ...) - if val == nil then return "", "SourceName is nil or missing" end - if type(val) ~= "string" then return "", "SourceName is not a string" end - return val, nil - end, - ---@param ... any - ---@return number, nil|string - GetSourceFlags = function(...) - local val = select(CLEUEventInfo["GENERIC"]["sourceFlags"], ...) - if val == nil then return 0, "SourceFlags is nil or missing" end - if type(val) ~= "number" then return 0, "SourceFlags is not a number" end - return val, nil - end, - ---@param ... any - ---@return number, nil|string - GetSourceRaidFlags = function(...) - local val = select(CLEUEventInfo["GENERIC"]["sourceRaidFlags"], ...) - if val == nil then return 0, "SourceRaidFlags is nil or missing" end - if type(val) ~= "number" then return 0, "SourceRaidFlags is not a number" end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetDestGUID = function(...) - local val = select(CLEUEventInfo["GENERIC"]["destGUID"], ...) - if val == nil then return "", "DestGUID is nil or missing" end - if type(val) ~= "string" then return "", "DestGUID is not a string" end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetDestName = function(...) - local val = select(CLEUEventInfo["GENERIC"]["destName"], ...) - if val == nil then return "", "DestName is nil or missing" end - if type(val) ~= "string" then return "", "DestName is not a string" end - return val, nil - end, - ---@param ... any - ---@return number, nil|string - GetDestFlags = function(...) - local val = select(CLEUEventInfo["GENERIC"]["destFlags"], ...) - if val == nil then return 0, "DestFlags is nil or missing" end - if type(val) ~= "number" then return 0, "DestFlags is not a number" end - return val, nil - end, - ---@param ... any - ---@return number, nil|string - GetDestRaidFlags = function(...) - local val = select(CLEUEventInfo["GENERIC"]["destRaidFlags"], ...) - if val == nil then return 0, "DestRaidFlags is nil or missing" end - if type(val) ~= "number" then return 0, "DestRaidFlags is not a number" end - return val, nil - end, - - - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - ---@param ... any - ---@return number, nil|string - GetSpellId = function(...) - local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellId"], ...) - if val == nil then return 0, "SpellId is nil or missing" end - if type(val) ~= "number" then return 0, "SpellId is not a number" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - ---@param ... any - ---@return string, nil|string - GetSpellName = function(...) - local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellName"], ...) - if val == nil then return "", "SpellName is nil or missing" end - if type(val) ~= "string" then return "", "SpellName is not a string" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - ---@param ... any - ---@return number, nil|string - GetSpellSchool = function(...) - local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellSchool"], ...) - if val == nil then return 0, "SpellSchool is nil or missing" end - if type(val) ~= "number" then return 0, "SpellSchool is not a number" end - return val, nil - end, - - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- |_HEAL| - --- |_ENERGIZE| - --- |_DRAIN| - --- |_LEECH| - --- |_EXTRA_ATTACKS| - --- |_AURA_APPLIED| - --- |_AURA_REMOVED| - --- |_AURA_APPLIED_DOSE| - --- |_AURA_REMOVED_DOSE| - ---@param ... any - ---@return number, nil|string - GetAmount = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["amount"], ...) - if val == nil then return 0, "Amount is nil or missing" end - if type(val) ~= "number" then return 0, "Amount is not a number" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - ---@param ... any - ---@return number, nil|string - GetOverkill = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["overkill"], ...) - if val == nil then return 0, "Overkill is nil or missing" end - if type(val) ~= "number" then return 0, "Overkill is not a number" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - ---@param ... any - ---@return number, nil|string - GetSchool = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["school"], ...) - if val == nil then return 0, "School is nil or missing" end - if type(val) ~= "number" then return 0, "School is not a number" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- - --- Apparently this is allowed to be nil? - ---@param ... any - ---@return boolean, nil|string - GetResisted = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["resisted"], ...) - if val == nil then return false, "Resisted is nil or missing" end - if type(val) ~= "boolean" then return false, "Resisted is not a boolean" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- - --- Apparently this is allowed to be nil? - ---@param ... any - ---@return boolean, nil|string - GetBlocked = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["blocked"], ...) - if val == nil then return false, "Blocked is nil or missing" end - if type(val) ~= "boolean" then return false, "Blocked is not a boolean" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- |_HEAL| - --- - --- Apparently this is allowed to be nil? - ---@param ... any - ---@return boolean, nil|string - GetAbsorbed = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["absorbed"], ...) - if val == nil then return false, "Absorbed is nil or missing" end - if type(val) ~= "boolean" then return false, "Absorbed is not a boolean" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- |_MISSED| - --- |_HEAL| - ---@param ... any - ---@return boolean, nil|string - GetCritical = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["critical"], ...) - if val == nil then return false, "Critical is nil or missing" end - if type(val) ~= "boolean" then return false, "Critical is not a boolean" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - ---@param ... any - ---@return boolean, nil|string - GetGlancing = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["glancing"], ...) - if val == nil then return false, "Glancing is nil or missing" end - if type(val) ~= "boolean" then return false, "Glancing is not a boolean" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - ---@param ... any - ---@return boolean, nil|string - GetCrushing = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["crushing"], ...) - if val == nil then return false, "Crushing is nil or missing" end - if type(val) ~= "boolean" then return false, "Crushing is not a boolean" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- |_MISSED| - ---@param ... any - ---@return boolean, nil|string - GetIsOffHand = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["isOffHand"], ...) - if val == nil then return false, "IsOffHand is nil or missing" end - if type(val) ~= "boolean" then return false, "IsOffHand is not a boolean" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_MISSED| - --- - --- return type is unconfirmed! - ---@param ... any - ---@return string, nil|string - GetMissType = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return "", string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["missType"], ...) - if val == nil then return "", "MissType is nil or missing" end - if type(val) ~= "string" then return "", "MissType is not a string" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_MISSED| - ---@param ... any - ---@return number, nil|string - --- - --- return type is unconfirmed! - GetAmountMissed = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["amountMissed"], ...) - if val == nil then return 0, "AmountMissed is nil or missing" end - if type(val) ~= "number" then return 0, "AmountMissed is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL| - --- - --- return type is unconfirmed! - ---@param ... any - ---@return number, nil|string - GetOverhealing = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["overhealing"], ...) - if val == nil then return 0, "Overhealing is nil or missing" end - if type(val) ~= "number" then return 0, "Overhealing is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return string, nil|string - GetExtraGUID = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return "", string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraGUID"], ...) - if val == nil then return "", "ExtraGUID is nil or missing" end - if type(val) ~= "string" then return "", "ExtraGUID is not a string" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return string, nil|string - GetExtraName = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return "", string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraName"], ...) - if val == nil then return "", "ExtraName is nil or missing" end - if type(val) ~= "string" then return "", "ExtraName is not a string" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return number, nil|string - GetExtraFlags = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraFlags"], ...) - if val == nil then return 0, "ExtraFlags is nil or missing" end - if type(val) ~= "number" then return 0, "ExtraFlags is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return number, nil|string - GetExtraRaidFlags = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraRaidFlags"], ...) - if val == nil then return 0, "ExtraRaidFlags is nil or missing" end - if type(val) ~= "number" then return 0, "ExtraRaidFlags is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - --- - --- WARNING! Different from "GetExtraSpellId" (capital ID!)
- --- This is the doing of Blizzard, not me.
- ---@see CLEUParser.GetExtraSpellId - ---@param ... any - ---@return number, nil|string - GetExtraSpellID = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraSpellID"], ...) - if val == nil then return 0, "ExtraSpellID is nil or missing" end - if type(val) ~= "number" then return 0, "ExtraSpellID is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - --- |_INTERRUPT| - --- |_DISPEL| - --- |_DISPEL_FAILED| - --- |_STOLEN| - --- |_AURA_BROKEN_SPELL| - ---@param ... any - ---@return string, nil|string - GetExtraSpellName = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return "", string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraSpellName"], ...) - if val == nil then return "", "extraSpellName is nil or missing" end - if type(val) ~= "string" then return "", "extraSpellName is not a string" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - --- |_INTERRUPT| - --- |_DISPEL| - --- |_DISPEL_FAILED| - --- |_STOLEN| - --- |_AURA_BROKEN_SPELL| - ---@param ... any - ---@return number, nil|string - GetExtraSchool = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraSchool"], ...) - if val == nil then return 0, "ExtraSchool is nil or missing" end - if type(val) ~= "number" then return 0, "ExtraSchool is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return number, nil|string - GetAbsorbedAmount = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["absorbedAmount"], ...) - if val == nil then return 0, "AbsorbedAmount is nil or missing" end - if type(val) ~= "number" then return 0, "AbsorbedAmount is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_ENERGIZE| - ---@param ... any - ---@return number, nil|string - GetOverEnergize = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["overEnergize"], ...) - if val == nil then return 0, "OverEnergize is nil or missing" end - if type(val) ~= "number" then return 0, "OverEnergize is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_ENERGIZE| - --- |_DRAIN| - --- |_LEECH| - --- - --- return type is unconfirmed! - ---@param ... any - ---@return number, nil|string - GetPowerType = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["powerType"], ...) - if val == nil then return 0, "PowerType is nil or missing" end - if type(val) ~= "number" then return 0, "PowerType is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DRAIN| - --- |_LEECH| - ---@param ... any - ---@return number, nil|string - GetExtraAmount = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraAmount"], ...) - if val == nil then return 0, "ExtraAmount is nil or missing" end - if type(val) ~= "number" then return 0, "ExtraAmount is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_INTERRUPT| - --- |_DISPEL| - --- |_DISPEL_FAILED| - --- |_STOLEN| - --- |_AURA_BROKEN_SPELL| - --- - --- WARNING! Different from "GetExtraSpellID" (capital ID!)
- --- This is the doing of Blizzard, not me.
- ---@see CLEUParser.GetExtraSpellID - ---@param ... any - ---@return number, nil|string - GetExtraSpellId = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraSpellId"], ...) - if val == nil then return 0, "ExtraSpellId is nil or missing" end - if type(val) ~= "number" then return 0, "ExtraSpellId is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DISPEL| - --- |_STOLEN| - --- |_AURA_APPLIED| - --- |_AURA_REMOVED| - --- |_AURA_APPLIED_DOSE| - --- |_AURA_REMOVED_DOSE| - --- |_AURA_REFRESH| - --- |_AURA_BROKEN| - --- |_AURA_BROKEN_SPELL| - ---@param ... any - ---@return number, nil|string - GetExtraAuraType = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["auraType"], ...) - if val == nil then return 0, "AuraType is nil or missing" end - if type(val) ~= "number" then return 0, "AuraType is not a number" end - return val, nil - end, -} - -GUIDUnitMap = {} -PlayerName = UnitName("player") +aura_env.GUIDUnitMap = {} +aura_env.PlayerName = UnitName("player") -- Indices are class ids ---@alias ClassColor {className: string, color: {rgbInt: table, rgbHex: table}, rgbString: string} ---@type table -ClassColors = { +aura_env.ClassColors = { { className = "Warrior", color = { @@ -1145,7 +107,7 @@ local SoundFileRoot = "Interface\\Sounds\\spellAlert\\" ---@param guid string ---@return string, nil|string local function GetUnitFromGuid(guid) - local unit = GUIDUnitMap[guid] + local unit = aura_env.GUIDUnitMap[guid] if unit == nil then return "none", "Unit not found" end return unit, nil end @@ -1170,7 +132,7 @@ local function GetTargetInfoForGuid(guid) local targetClassId = select(3, UnitClass(targetUnit)) retval.targetClassId = targetClassId ---@type ClassColor - local classColorInfo = ClassColors[targetClassId] + local classColorInfo = aura_env.ClassColors[targetClassId] if classColorInfo then retval.prettyTarget = string.format("|cFF%s%s|r", classColorInfo.rgbString, retval.target) end @@ -1208,7 +170,7 @@ end ---@field instruction string ---@field afflictedInstruction string ---@field iterator number -Alert = { +aura_env.Alert = { ---@param id number ---@param name string ---@param events table @@ -1217,7 +179,7 @@ Alert = { ---@return Alert new = function(id, name, events, instruction, afflictedInstruction) local self = setmetatable({}, { - __index = Alert + __index = aura_env.Alert }) self.id = id name = string.gsub(name, " ", "_") @@ -1257,13 +219,14 @@ Alert = { if err then return err end local castInfo, err = GetCastInfoForGuid(src) local targetInfo, err = GetTargetInfoForGuid(src) + DevTools_Dump(targetInfo) -- If the event DOES have destName then use that ACTUAL target -- Unless it's the same target we already got -- The reason we don't overwrite the same target we already got is because we can not (easily) infer -- The target class from the destName because we don't know where to look for the unit local target, err = CLEUParser.GetDestName(...) - if err ~= nil and target ~= targetInfo.target then + if err == nil and target ~= targetInfo.target then targetInfo.target = target targetInfo.prettyTarget = target targetInfo.targetClassId = 1 @@ -1274,8 +237,8 @@ Alert = { displayText = self.afflictedInstruction end - local castEnd = math.max(GetTime() + 1, castInfo.endms / 1000) - local castDuration = math.max(1, (castInfo.endms - castInfo.startms) / 1000) + local castEnd = math.max(GetTime() + 5, castInfo.endms / 1000) + local castDuration = math.max(5, (castInfo.endms - castInfo.startms) / 1000) ---@type state local state = { @@ -1300,239 +263,240 @@ Alert = { local alerts = { -- Debug - Alert.new(774, "Rejuvenation", { "SPELL_AURA_APPLIED" }, "REJUV", "REEEEEEEEJUUUUUUUUUUUVVVVVVVVV"), + -- aura_env.Alert.new(774, "Rejuvenation", { "SPELL_AURA_APPLIED" }, "REJUV", "REEEEEEEEJUUUUUUUUUUUVVVVVVVVV"), -- Garothi - Alert.new(244410, "Decimation", { "SPELL_CAST_SUCCESS" }, "", "Move"), - Alert.new(246220, "Fel Bombardment", { "SPELL_CAST_SUCCESS" }, "", "Move"), - Alert.new(244969, "Eradication", { "SPELL_CAST_START" }, "Run away", ""), - Alert.new(244106, "Carnage", { "SPELL_CAST_START" }, "Tank the boss", ""), + aura_env.Alert.new(244410, "Decimation", { "SPELL_CAST_SUCCESS" }, "", "Move"), + aura_env.Alert.new(246220, "Fel Bombardment", { "SPELL_CAST_SUCCESS" }, "", "Move"), + aura_env.Alert.new(244969, "Eradication", { "SPELL_CAST_START" }, "Run away", ""), + aura_env.Alert.new(244106, "Carnage", { "SPELL_CAST_START" }, "Tank the boss", ""), + aura_env.Alert.new(246664, "Annihilation", { "SPELL_CAST_SUCCESS" }, "Soak pools", ""), -- Felhounds - Alert.new(244086, "Molten Touch", { "SPELL_CAST_SUCCESS" }, "", "Run away"), - Alert.new(244768, "Desolate Gaze", { "SPELL_AURA_APPLIED" }, "", "Move away"), - Alert.new(244057, "Enflame Corruption", { "SPELL_CAST_START", "SPELL_AURA_APPLIED" }, "Spread", "Spread!!"), - Alert.new(244131, "Consuming Sphere", { "SPELL_AURA_APPLIED" }, "Move", ""), - Alert.new(244056, "Siphon Corruption", { "SPELL_CAST_START", "SPELL_AURA_APPLIED" }, "Stack", "Stack!!"), + aura_env.Alert.new(244086, "Molten Touch", { "SPELL_CAST_SUCCESS" }, "", "Run away"), + aura_env.Alert.new(244768, "Desolate Gaze", { "SPELL_AURA_APPLIED" }, "", "Move away"), + aura_env.Alert.new(244057, "Enflame Corruption", { "SPELL_CAST_START", "SPELL_AURA_APPLIED" }, "Spread", "Spread!!"), + aura_env.Alert.new(244131, "Consuming Sphere", { "SPELL_AURA_APPLIED" }, "Move", ""), + aura_env.Alert.new(244056, "Siphon Corruption", { "SPELL_CAST_START", "SPELL_AURA_APPLIED" }, "Stack", "Stack!!"), -- Antoran High Command - -- SpellAlert.new(245161, "Entropic Mine"), -- Need more info - -- SpellAlert.new(245546, "Summon Reinforcements"), -- Need more info + -- aura_env.Alert.new(245161, "Entropic Mine"), -- Need more info + -- aura_env.Alert.new(245546, "Summon Reinforcements"), -- Need more info -- Portal Keeper Hasabel - Alert.new(244016, "Reality Tear", { "SPELL_CAST_SUCCESS" }, "", ""), - Alert.new(243983, "Collapsing World", { "SPELL_CAST_SUCCESS" }, "Dodge", ""), - Alert.new(244000, "Felstorm Barrage", { "SPELL_CAST_START" }, "Dodge", ""), + aura_env.Alert.new(244016, "Reality Tear", { "SPELL_CAST_SUCCESS" }, "", ""), + aura_env.Alert.new(243983, "Collapsing World", { "SPELL_CAST_SUCCESS" }, "Dodge", ""), + aura_env.Alert.new(244000, "Felstorm Barrage", { "SPELL_CAST_START" }, "Dodge", ""), -- Imonar - -- SpellAlert.new(247552, "Sleep Canister"), -- Need more info - Alert.new(247367, "Shock Lance", { "SPELL_CAST_SUCCESS" }, "", ""), - Alert.new(248068, "Empowered Pulse Grenade", { "SPELL_CAST_SUCCESS" }, "", ""), -- Need more info - Alert.new(247376, "Pulse Grenade", { "SPELL_CAST_SUCCESS" }, "", ""), -- Need more info - Alert.new(247716, "Charged Blasts", { "SPELL_AURA_APPLIED" }, "", "Move!!"), - Alert.new(247687, "Sever", { "SPELL_CAST_SUCCESS" }, "", ""), - Alert.new(248070, "Empowered Shrapnel Blast", { "SPELL_CAST_START" }, "Mines", ""), - Alert.new(250255, "Empowered Shock Lance", { "SPELL_CAST_START" }, "", ""), + -- aura_env.Alert.new(247552, "Sleep Canister"), -- Need more info + aura_env.Alert.new(247367, "Shock Lance", { "SPELL_CAST_SUCCESS" }, "", ""), + aura_env.Alert.new(248068, "Empowered Pulse Grenade", { "SPELL_CAST_SUCCESS" }, "", ""), -- Need more info + aura_env.Alert.new(247376, "Pulse Grenade", { "SPELL_CAST_SUCCESS" }, "", ""), -- Need more info + aura_env.Alert.new(247716, "Charged Blasts", { "SPELL_AURA_APPLIED" }, "", "Move!!"), + aura_env.Alert.new(247687, "Sever", { "SPELL_CAST_SUCCESS" }, "", ""), + aura_env.Alert.new(248070, "Empowered Shrapnel Blast", { "SPELL_CAST_START" }, "Mines", ""), + aura_env.Alert.new(250255, "Empowered Shock Lance", { "SPELL_CAST_START" }, "", ""), -- Kin'garoth - -- SpellAlert.new(254919, "Forging Strike"), - -- SpellAlert.new(254926, "Reverberating Strike"), - -- SpellAlert.new(246840, "Ruiner"), - -- SpellAlert.new(246779, "Diabolic Bomb"), - -- SpellAlert.new(246706, "Demolish"), - -- SpellAlert.new(246664, "Annihilation"), + aura_env.Alert.new(254919, "Forging Strike", { "SPELL_CAST_START" }, "", ""), + aura_env.Alert.new(254926, "Reverberating Strike", { "SPELL_CAST_START" }, "Dodge", "Dodge"), + -- aura_env.Alert.new(246840, "Ruiner"), -- Need more info + -- aura_env.Alert.new(246779, "Diabolic Bomb"), -- Need more info + -- aura_env.Alert.new(246706, "Demolish"), -- Need more info -- Varimathras - -- SpellAlert.new(243960, "Shadow Strike"), - -- SpellAlert.new(243961, "Misery"), - -- SpellAlert.new(244042, "Marked Prey"), - -- SpellAlert.new(244093, "Necrotic Embrace"), - -- SpellAlert.new(248732, "Echoes of Doom"), - -- SpellAlert.new(243999, "Dark Fissure"), + aura_env.Alert.new(243960, "Shadow Strike", { "SPELL_CAST_SUCCESS" }, "Taunt", "Survive"), + aura_env.Alert.new(243961, "Misery", { "SPELL_AURA_APPLIED" }, "", "Survive"), + aura_env.Alert.new(244042, "Marked Prey", { "SPELL_AURA_APPLIED" }, "Do not soak", "Let someone soak"), + -- aura_env.Alert.new(244093, "Necrotic Embrace"), -- Need more info + -- aura_env.Alert.new(248732, "Echoes of Doom"), -- Need more info + aura_env.Alert.new(243999, "Dark Fissure", { "SPELL_CAST_START" }, "Move", ""), -- Coven - -- SpellAlert.new(253189, "Shivan Pact"), - -- SpellAlert.new(244899, "Fiery Strike"), - -- SpellAlert.new(245627, "Whirling Saber"), - -- SpellAlert.new(245281, "Shadow Blades"), - -- SpellAlert.new(245586, "Chilled Blood"), + -- aura_env.Alert.new(253189, "Shivan Pact"), -- Need more info + aura_env.Alert.new(244899, "Fiery Strike", { "SPELL_CAST_START" }, "", "Prepare"), + aura_env.Alert.new(245627, "Whirling Saber", { "SPELL_CAST_START" }, "Dodge", ""), + aura_env.Alert.new(245281, "Shadow Blades", { "SPELL_CAST_START" }, "Dodge", ""), -- Need more info + aura_env.Alert.new(245586, "Chilled Blood", { "SPELL_AURA_APPLIED" }, "Heal", "Heal"), -- Aggramar - -- SpellAlert.new(254452, "Ravenous Blaze"), - -- SpellAlert.new(244693, "Wake of Flame"), - -- SpellAlert.new(244291, "Foe Braker"), - -- SpellAlert.new(244033, "Flame Rend"), - -- SpellAlert.new(247079, "Empowered Flame Rend"), - -- SpellAlert.new(245983, "Flare"), - -- SpellAlert.new(246037, "Empowered Flare"), + -- aura_env.Alert.new(254452, "Ravenous Blaze"), -- Need more info + aura_env.Alert.new(244693, "Wake of Flame", { "SPELL_CAST_START" }, "Dodge", "Dodge!"), + -- aura_env.Alert.new(244291, "Foe Braker"), -- Need more info + -- aura_env.Alert.new(244033, "Flame Rend"), -- Need more info + -- aura_env.Alert.new(247079, "Empowered Flame Rend"), -- Need more info + -- aura_env.Alert.new(245983, "Flare"), -- Need more info + -- aura_env.Alert.new(246037, "Empowered Flare"), -- Need more info -- Argus - -- SpellAlert.new(256457, "Cone of Death"), - -- SpellAlert.new(248396, "Soulblight"), - -- SpellAlert.new(257296, "Tortured Rage"), - -- SpellAlert.new(251570, "Soulbomb"), + -- aura_env.Alert.new(256457, "Cone of Death"), -- Need more info + aura_env.Alert.new(248396, "Soulblight", { "SPELL_AURA_APPLIED" }, "", "Run away from group"), + aura_env.Alert.new(257296, "Tortured Rage", { "SPELL_CAST_START" }, "Brace", ""), + aura_env.Alert.new(251570, "Soulbomb", { "SPELL_AURA_APPLIED" }, "Brace", "Run far away from group"), -- Mythic+ -- Black Rook Hold - -- SpellAlert.new(225573, "Dark Mending"), - -- SpellAlert.new(200105, "Sacrifice Soul"), - -- SpellAlert.new(225732, "Strike Down"), - -- SpellAlert.new(194996, "Soul Echoes"), - -- SpellAlert.new(195254, "Swirling Scythe"), - -- SpellAlert.new(194956, "Reap Soul"), - -- SpellAlert.new(200248, "Arcane Blitz"), - -- SpellAlert.new(200345, "Arrow Barrage"), - -- SpellAlert.new(200291, "Knife Dance"), - -- SpellAlert.new(200261, "Bonebreaking Strike"), - -- SpellAlert.new(197418, "Vengeful Shear"), - -- SpellAlert.new(201139, "Brutal Assault"), - -- SpellAlert.new(198245, "Brutal Haymaker"), - -- SpellAlert.new(198079, "Hateful Gaze"), + -- aura_env.Alert.new(225573, "Dark Mending"), + -- aura_env.Alert.new(200105, "Sacrifice Soul"), + -- aura_env.Alert.new(225732, "Strike Down"), + -- aura_env.Alert.new(194996, "Soul Echoes"), + -- aura_env.Alert.new(195254, "Swirling Scythe"), + -- aura_env.Alert.new(194956, "Reap Soul"), + aura_env.Alert.new(201858, "Shoot", { "SPELL_CAST_START" }, "", "LOS!"), + -- aura_env.Alert.new(200248, "Arcane Blitz"), + -- aura_env.Alert.new(200345, "Arrow Barrage"), + -- aura_env.Alert.new(200291, "Knife Dance"), + -- aura_env.Alert.new(200261, "Bonebreaking Strike"), + -- aura_env.Alert.new(197418, "Vengeful Shear"), + -- aura_env.Alert.new(201139, "Brutal Assault"), + -- aura_env.Alert.new(198245, "Brutal Haymaker"), + -- aura_env.Alert.new(198079, "Hateful Gaze"), -- Cathedral of Eternal Night - -- SpellAlert.new(241937, "Shadow Wall"), - -- SpellAlert.new(238543, "Demonic Mending"), - -- SpellAlert.new(242792, "Vile Roots"), - -- SpellAlert.new(236627, "Floral Fulmination"), - -- SpellAlert.new(239217, "Blinding Glare"), - -- SpellAlert.new(237726, "Scornful Gaze"), - -- SpellAlert.new(190620, "Felblaze Orb"), - -- SpellAlert.new(239268, "Venom Storm"), - -- SpellAlert.new(234107, "Chaotic Energy"), - -- SpellAlert.new(236543, "Felsoul Cleave"), - -- SpellAlert.new(238315, "Shadow Sweep"), - -- SpellAlert.new(243168, "Demonic Upheaval"), + -- aura_env.Alert.new(241937, "Shadow Wall"), + -- aura_env.Alert.new(238543, "Demonic Mending"), + -- aura_env.Alert.new(242792, "Vile Roots"), + -- aura_env.Alert.new(236627, "Floral Fulmination"), + -- aura_env.Alert.new(239217, "Blinding Glare"), + -- aura_env.Alert.new(237726, "Scornful Gaze"), + -- aura_env.Alert.new(190620, "Felblaze Orb"), + -- aura_env.Alert.new(239268, "Venom Storm"), + -- aura_env.Alert.new(234107, "Chaotic Energy"), + -- aura_env.Alert.new(236543, "Felsoul Cleave"), + -- aura_env.Alert.new(238315, "Shadow Sweep"), + -- aura_env.Alert.new(243168, "Demonic Upheaval"), -- Court of Stars - -- SpellAlert.new(210261, "Sound Alarm"), - -- SpellAlert.new(215204, "Hinder"), - -- SpellAlert.new(209027, "Quelling Strike"), - -- SpellAlert.new(209516, "Mana Fang"), - -- SpellAlert.new(209485, "Drain Magic"), - -- SpellAlert.new(209404, "Seal Magic"), - -- SpellAlert.new(209495, "Charged Smash"), - -- SpellAlert.new(225100, "Charging Station"), - -- SpellAlert.new(219488, "Streetsweeper"), - -- SpellAlert.new(212784, "Eye Storm"), - -- SpellAlert.new(211464, "Fel Detonation"), - -- SpellAlert.new(207980, "Disintegration Beam"), - -- SpellAlert.new(207979, "Shockwave"), - -- SpellAlert.new(209628, "Piercing Gale"), - -- SpellAlert.new(209676, "Slicing Maelstrom"), + -- aura_env.Alert.new(210261, "Sound Alarm"), + -- aura_env.Alert.new(215204, "Hinder"), + -- aura_env.Alert.new(209027, "Quelling Strike"), + -- aura_env.Alert.new(209516, "Mana Fang"), + -- aura_env.Alert.new(209485, "Drain Magic"), + -- aura_env.Alert.new(209404, "Seal Magic"), + -- aura_env.Alert.new(209495, "Charged Smash"), + -- aura_env.Alert.new(225100, "Charging Station"), + -- aura_env.Alert.new(219488, "Streetsweeper"), + -- aura_env.Alert.new(212784, "Eye Storm"), + -- aura_env.Alert.new(211464, "Fel Detonation"), + -- aura_env.Alert.new(207980, "Disintegration Beam"), + -- aura_env.Alert.new(207979, "Shockwave"), + -- aura_env.Alert.new(209628, "Piercing Gale"), + -- aura_env.Alert.new(209676, "Slicing Maelstrom"), -- Darkheart Thicket - -- SpellAlert.new(200631, "Unnerving Screech"), - -- SpellAlert.new(200580, "Maddening Roar"), - -- SpellAlert.new(191326, "Breath of Corruption"), - -- SpellAlert.new(201400, "Dread Inferno"), - -- SpellAlert.new(200238, "Feed on the Weak"), + -- aura_env.Alert.new(200631, "Unnerving Screech"), + -- aura_env.Alert.new(200580, "Maddening Roar"), + -- aura_env.Alert.new(191326, "Breath of Corruption"), + -- aura_env.Alert.new(201400, "Dread Inferno"), + -- aura_env.Alert.new(200238, "Feed on the Weak"), -- Eye of Azshara - -- SpellAlert.new(195172, "Mighty Slam"), - -- SpellAlert.new(195129, "Thundering Stomp"), - -- SpellAlert.new(195046, "Rejuvenating Waters"), - -- SpellAlert.new(162135, "Bellowing Roar"), - -- SpellAlert.new(197105, "Polymorh Fish"), - -- SpellAlert.new(193597, "Static Nova"), - -- SpellAlert.new(193611, "Focused Lightning"), - -- SpellAlert.new(196129, "Spray Sand"), - -- SpellAlert.new(196144, "Sandstorm"), - -- SpellAlert.new(196296, "Roiling Storm"), - -- SpellAlert.new(196290, "Chaotic Tempest"), - -- SpellAlert.new(191848, "Rampage"), + -- aura_env.Alert.new(195172, "Mighty Slam"), + -- aura_env.Alert.new(195129, "Thundering Stomp"), + -- aura_env.Alert.new(195046, "Rejuvenating Waters"), + -- aura_env.Alert.new(162135, "Bellowing Roar"), + -- aura_env.Alert.new(197105, "Polymorh Fish"), + -- aura_env.Alert.new(193597, "Static Nova"), + -- aura_env.Alert.new(193611, "Focused Lightning"), + -- aura_env.Alert.new(196129, "Spray Sand"), + -- aura_env.Alert.new(196144, "Sandstorm"), + -- aura_env.Alert.new(196296, "Roiling Storm"), + -- aura_env.Alert.new(196290, "Chaotic Tempest"), + -- aura_env.Alert.new(191848, "Rampage"), -- Halls of Valor - -- SpellAlert.new(198605, "Thunderstrike"), - -- SpellAlert.new(198888, "Lightning Breath"), - -- SpellAlert.new(191284, "Horn of Valor"), - -- SpellAlert.new(198934, "Rune of Healing"), - -- SpellAlert.new(215433, "Holy Radiance"), - -- SpellAlert.new(199210, "Penetrating Shot"), - -- SpellAlert.new(191976, "Arcing Bolt"), - -- SpellAlert.new(192305, "Eye of the Storm"), - -- SpellAlert.new(192307, "Sanctify"), - -- SpellAlert.new(192048, "Expel Light"), - -- SpellAlert.new(192018, "Shield of Light"), - -- SpellAlert.new(196512, "Claw Frenzy"), - -- SpellAlert.new(199652, "Sever"), - -- SpellAlert.new(199726, "Unruly Yell"), - -- SpellAlert.new(199674, "Wicked Dagger"), - -- SpellAlert.new(193826, "Ragnarok"), - -- SpellAlert.new(198263, "Radiant Tempest"), - -- SpellAlert.new(198072, "Spear of Light"), - -- SpellAlert.new(197961, "Runic Band"), - -- SpellAlert.new(198750, "Surge"), + -- aura_env.Alert.new(198605, "Thunderstrike"), + -- aura_env.Alert.new(198888, "Lightning Breath"), + -- aura_env.Alert.new(191284, "Horn of Valor"), + -- aura_env.Alert.new(198934, "Rune of Healing"), + -- aura_env.Alert.new(215433, "Holy Radiance"), + -- aura_env.Alert.new(199210, "Penetrating Shot"), + -- aura_env.Alert.new(191976, "Arcing Bolt"), + -- aura_env.Alert.new(192305, "Eye of the Storm"), + -- aura_env.Alert.new(192307, "Sanctify"), + -- aura_env.Alert.new(192048, "Expel Light"), + -- aura_env.Alert.new(192018, "Shield of Light"), + -- aura_env.Alert.new(196512, "Claw Frenzy"), + -- aura_env.Alert.new(199652, "Sever"), + -- aura_env.Alert.new(199726, "Unruly Yell"), + -- aura_env.Alert.new(199674, "Wicked Dagger"), + -- aura_env.Alert.new(193826, "Ragnarok"), + -- aura_env.Alert.new(198263, "Radiant Tempest"), + -- aura_env.Alert.new(198072, "Spear of Light"), + -- aura_env.Alert.new(197961, "Runic Band"), + -- aura_env.Alert.new(198750, "Surge"), -- Maw of Souls - -- SpellAlert.new(193364, "Screams of the Dead"), - -- SpellAlert.new(194442, "Six Pound Barrel"), - -- SpellAlert.new(194615, "Sea Legs"), - -- SpellAlert.new(192019, "Lantern of Darkness"), - -- SpellAlert.new(194099, "Bile Breath"), - -- SpellAlert.new(198405, "Bone Chilling Scream"), - -- SpellAlert.new(194325, "Fragment"), - -- SpellAlert.new(194216, "Cosmic Scythe"), - -- SpellAlert.new(195293, "Debilitating Shout"), - -- SpellAlert.new(185539, "Rapid Rupture"), - -- SpellAlert.new(198495, "Torrent"), - -- SpellAlert.new(202098, "Brackwater Barrage"), + -- aura_env.Alert.new(193364, "Screams of the Dead"), + -- aura_env.Alert.new(194442, "Six Pound Barrel"), + -- aura_env.Alert.new(194615, "Sea Legs"), + -- aura_env.Alert.new(192019, "Lantern of Darkness"), + -- aura_env.Alert.new(194099, "Bile Breath"), + -- aura_env.Alert.new(198405, "Bone Chilling Scream"), + -- aura_env.Alert.new(194325, "Fragment"), + -- aura_env.Alert.new(194216, "Cosmic Scythe"), + -- aura_env.Alert.new(195293, "Debilitating Shout"), + -- aura_env.Alert.new(185539, "Rapid Rupture"), + -- aura_env.Alert.new(198495, "Torrent"), + -- aura_env.Alert.new(202098, "Brackwater Barrage"), -- Neltharion's Lair - -- SpellAlert.new(202181, "Stone Gaze"), - -- SpellAlert.new(226296, "Piercing Shards"), - -- SpellAlert.new(188169, "Razor Shards"), - -- SpellAlert.new(198496, "Sunder"), - -- SpellAlert.new(199176, "Spiked Tongue"), - -- SpellAlert.new(193585, "Bound"), - -- SpellAlert.new(200700, "Landslide"), - -- SpellAlert.new(200732, "Molten Crash"), + -- aura_env.Alert.new(202181, "Stone Gaze"), + -- aura_env.Alert.new(226296, "Piercing Shards"), + -- aura_env.Alert.new(188169, "Razor Shards"), + -- aura_env.Alert.new(198496, "Sunder"), + -- aura_env.Alert.new(199176, "Spiked Tongue"), + -- aura_env.Alert.new(193585, "Bound"), + -- aura_env.Alert.new(200700, "Landslide"), + -- aura_env.Alert.new(200732, "Molten Crash"), -- The Arcway - -- SpellAlert.new(211771, "Prophecies of Doom"), - -- SpellAlert.new(211037, "Celerity Zone"), - -- SpellAlert.new(195791, "Quarantine"), - -- SpellAlert.new(226285, "Demonic Ascension"), - -- SpellAlert.new(197810, "Wicked Slam"), - -- SpellAlert.new(211217, "Arcane Slicer"), - -- SpellAlert.new(211115, "Phase Breach"), - -- SpellAlert.new(196392, "Overcharge Mana"), - -- SpellAlert.new(200040, "Nether Venom"), - -- SpellAlert.new(200227, "Tangled Web"), - -- SpellAlert.new(220871, "Unstable Mana"), + -- aura_env.Alert.new(211771, "Prophecies of Doom"), + -- aura_env.Alert.new(211037, "Celerity Zone"), + -- aura_env.Alert.new(195791, "Quarantine"), + -- aura_env.Alert.new(226285, "Demonic Ascension"), + -- aura_env.Alert.new(197810, "Wicked Slam"), + -- aura_env.Alert.new(211217, "Arcane Slicer"), + -- aura_env.Alert.new(211115, "Phase Breach"), + -- aura_env.Alert.new(196392, "Overcharge Mana"), + -- aura_env.Alert.new(200040, "Nether Venom"), + -- aura_env.Alert.new(200227, "Tangled Web"), + -- aura_env.Alert.new(220871, "Unstable Mana"), -- Vault of the Wardens - -- SpellAlert.new(193069, "Nightmares"), - -- SpellAlert.new(197799, "Unleash Fury"), - -- SpellAlert.new(191735, "Deafening Screech"), - -- SpellAlert.new(190836, "Hatred"), - -- SpellAlert.new(202913, "Fel Mortar"), - -- SpellAlert.new(200898, "Teleport"), - -- SpellAlert.new(199917, "Shadow Crash"), - -- SpellAlert.new(202658, "Drain"), - -- SpellAlert.new(194945, "Lingering Gaze"), - -- SpellAlert.new(196249, "Meteor"), - -- SpellAlert.new(192631, "Lava Wreath"), - -- SpellAlert.new(197513, "Detonating Moonglaive"), - -- SpellAlert.new(189469, "Turn Kick"), + -- aura_env.Alert.new(193069, "Nightmares"), + -- aura_env.Alert.new(197799, "Unleash Fury"), + -- aura_env.Alert.new(191735, "Deafening Screech"), + -- aura_env.Alert.new(190836, "Hatred"), + -- aura_env.Alert.new(202913, "Fel Mortar"), + -- aura_env.Alert.new(200898, "Teleport"), + -- aura_env.Alert.new(199917, "Shadow Crash"), + -- aura_env.Alert.new(202658, "Drain"), + -- aura_env.Alert.new(194945, "Lingering Gaze"), + -- aura_env.Alert.new(196249, "Meteor"), + -- aura_env.Alert.new(192631, "Lava Wreath"), + -- aura_env.Alert.new(197513, "Detonating Moonglaive"), + -- aura_env.Alert.new(189469, "Turn Kick"), -- Upper Karazhan - -- SpellAlert.new(230083, "Nullification"), - -- SpellAlert.new(227267, "Summon Volatile Energy"), - -- SpellAlert.new(227254, "Evocation"), - -- SpellAlert.new(229662, "Fel Breath"), - -- SpellAlert.new(36247, "Fel Fireball"), - -- SpellAlert.new(227628, "Piercing Missiles"), - -- SpellAlert.new(227615, "Inferno Bolt"), - -- SpellAlert.new(227592, "Frostbite"), - -- SpellAlert.new(228269, "Flame Wreath"), - -- SpellAlert.new(227779, "Ceaseless Winter"), - -- SpellAlert.new(229706, "Leech Life"), - -- SpellAlert.new(229714, "Consume Magic"), - -- SpellAlert.new(229159, "Chaotic Shadows"), - -- SpellAlert.new(229083, "Burning Blast"), - -- SpellAlert.new(229151, "Disintegrate"), + -- aura_env.Alert.new(230083, "Nullification"), + -- aura_env.Alert.new(227267, "Summon Volatile Energy"), + -- aura_env.Alert.new(227254, "Evocation"), + -- aura_env.Alert.new(229662, "Fel Breath"), + -- aura_env.Alert.new(36247, "Fel Fireball"), + -- aura_env.Alert.new(227628, "Piercing Missiles"), + -- aura_env.Alert.new(227615, "Inferno Bolt"), + -- aura_env.Alert.new(227592, "Frostbite"), + -- aura_env.Alert.new(228269, "Flame Wreath"), + -- aura_env.Alert.new(227779, "Ceaseless Winter"), + -- aura_env.Alert.new(229706, "Leech Life"), + -- aura_env.Alert.new(229714, "Consume Magic"), + -- aura_env.Alert.new(229159, "Chaotic Shadows"), + -- aura_env.Alert.new(229083, "Burning Blast"), + -- aura_env.Alert.new(229151, "Disintegrate"), -- Lower Karazhan - -- SpellAlert.new(228221, "Severe Dusting"), - -- SpellAlert.new(228225, "Sultry Heat"), - -- SpellAlert.new(232153, "Kara Kazham"), - -- SpellAlert.new(227987, "Dinner Bell"), - -- SpellAlert.new(228025, "Heat Wave"), - -- SpellAlert.new(227568, "Burning Leg Sweep"), - -- SpellAlert.new(227776, "Magic Magnificent"), - -- SpellAlert.new(227966, "Flashlight"), - -- SpellAlert.new(228279, "Shadow Rejuvenation"), - -- SpellAlert.new(228278, "Demoralizing Shout"), - -- SpellAlert.new(228277, "Shackles of Servitude"), - -- SpellAlert.new(226316, "Shadow Bolt Volley"), - -- SpellAlert.new(227508, "Mass Repentance"), - -- SpellAlert.new(227793, "Sacred Ground"), - -- SpellAlert.new(227463, "Whirling Edge"), - -- SpellAlert.new(227646, "Iron Whirlwind"), - -- SpellAlert.new(227672, "Will Breaker"), - -- SpellAlert.new(227404, "Intangible Presence"), - -- SpellAlert.new(227493, "Mortal Strike"), - -- SpellAlert.new(228852, "Shared Suffering"), - -- SpellAlert.new(228837, "Bellowing Roar"), + -- aura_env.Alert.new(228221, "Severe Dusting"), + -- aura_env.Alert.new(228225, "Sultry Heat"), + -- aura_env.Alert.new(232153, "Kara Kazham"), + -- aura_env.Alert.new(227987, "Dinner Bell"), + -- aura_env.Alert.new(228025, "Heat Wave"), + -- aura_env.Alert.new(227568, "Burning Leg Sweep"), + -- aura_env.Alert.new(227776, "Magic Magnificent"), + -- aura_env.Alert.new(227966, "Flashlight"), + -- aura_env.Alert.new(228279, "Shadow Rejuvenation"), + -- aura_env.Alert.new(228278, "Demoralizing Shout"), + -- aura_env.Alert.new(228277, "Shackles of Servitude"), + -- aura_env.Alert.new(226316, "Shadow Bolt Volley"), + -- aura_env.Alert.new(227508, "Mass Repentance"), + -- aura_env.Alert.new(227793, "Sacred Ground"), + -- aura_env.Alert.new(227463, "Whirling Edge"), + -- aura_env.Alert.new(227646, "Iron Whirlwind"), + -- aura_env.Alert.new(227672, "Will Breaker"), + -- aura_env.Alert.new(227404, "Intangible Presence"), + -- aura_env.Alert.new(227493, "Mortal Strike"), + -- aura_env.Alert.new(228852, "Shared Suffering"), + -- aura_env.Alert.new(228837, "Bellowing Roar"), } ---@type table> @@ -1545,3 +509,24 @@ for _, alert in ipairs(alerts) do EventMap[event][alert.id] = alert end end + +local function varargToString(...) + local output = {} + for i = 1, select("#", ...) do + output[#output + 1] = string.format("%d = %s", i, tostring(select(i, ...))) + end + return table.concat(output, "; ") +end + +-- C:\Users\Administrator\Seafile\Backup-WoW\Ruski\WTF\Account\phatphuckdave\SavedVariables\WeakAuras.lua +if not WeakAurasSaved then WeakAurasSaved = {} end +if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end +if not WeakAurasSaved.Cyka.CLEUExample then WeakAurasSaved.Cyka.CLEUExample = {} end +--/run WeakAurasSaved.Cyka.CLEUExample = {} +---@param spellName string +---@param spellId number +---@param subevent string +---@param ... any +aura_env.LogSpell = function(spellName, spellId, subevent, ...) + table.insert(WeakAurasSaved.Cyka.CLEUExample, varargToString(spellName, spellId, subevent, ...)) +end diff --git a/FreshShit/RaiderlosSA/logger.lua b/FreshShit/RaiderlosSA/logger.lua index 74714e1..e4358f1 100644 --- a/FreshShit/RaiderlosSA/logger.lua +++ b/FreshShit/RaiderlosSA/logger.lua @@ -10,3 +10,4 @@ function(e, ...) if err then return end aura_env.LogSpell(spellName, spellId, subevent, ...) end + \ No newline at end of file diff --git a/FreshShit/SephuzBar/export b/FreshShit/SephuzBar/export index 5f84664..999298b 100644 --- a/FreshShit/SephuzBar/export +++ b/FreshShit/SephuzBar/export @@ -1 +1 @@ -!nB1AVjoox4)l9lBhPTiGwAh9kTReqHPmIgq1H5Y7hcXe7e8qWoRTdTuTk)23JVeUueZ09BRyM0WXhF8ZZ5YJjQvuyeADeIy(h8QQalx9vgrVmkOtZi0cHKqL9WjRisrreQxo71xXssvCOqKRzGjcvH1LsSMgTicHl1lfYjfAMGRGiQJqSeb3S02jPPkQokaIlMNaUnvW4Gd9heeo4j)H)KqJnB262rwEuqOrOUZcN4xWfVVz9CbaXmPOKt6lYfs4KdAzwiOT9512N3apB0XGPubxpmhNPIqtMfoEuWahoNNCWUBz3Dl7UBz3DllF4AQKJZ)cvQSaT9TrOxoICS1ooyYOASuBErVTaGpxWHNet(cCyUZOIchnrzc(AmJ)(9oLXzQLVB)1U8KPuoIpuc5atDjPuPfRdPVONvqmLruP)VlWY(VnFm8MBBFx7239XoTV56oDUTtu6vDU(GmSnhP0SKvBV3deZPuifzsQsnvstyU82nhvh)URIxU4jAMV5jO1EQHHyb4zo8F4aaGew3Dox4t93u7lee3s7CX1Vzze4eq1DfA9oFs(PnoToWZnabwKtJ6TZcLKbNl6VkXsAv8WY88Q4VUKztIopuSxPMazRclPSSLaIVUzZ9LK()0wpFJBUaBhu14CkxBZcRlHbrlt012pXCsowPoXkHLMYsalBpzjjoHEQrr(Pgl2uCMdLXntKfNypfNupDCKDvbn5uJM82BmQ9no9GJL4LfU)EOVvr7s(b0otjuYJ4xScsj1sr7gfTqJ5FB3iKnSLmqj8A53))BF4JFEL(oZ0tE6B0PE2Pp2gQDPs8AksdT5ytHcPwle6Lt996MgKJXeZoliTD4Hh2xx3Nupx2RwJCO5eSpIqFLIx1f8x9)Mk3sWV61Sumtg4PrF6bGKgcGOfllFT)9(0Kz0UucU8TP9WYUG60vtKyEgfzw170d(wYwnDdi2nmiFZSrvX9YX8vwTDHbyVkeR3lpBiKwKSPwn8UM2UAxqzecLhHcg8ftIdaBklZL3X5flD5Sd4PlLGgmEq)WHp19XbM9SBo1gY(VhbAdySxhz3Y9UBOSgesg0Q6uLqaOch1V745JcGxr2tJtyhC3LwYYYGGTxmYzW8ATml0Wa8nJYPswcAP45jGjL9VDHMVngbvt7gQihV1OjrOlkttDC9HbJNoC24ALlNwSvbJUbakOwMYEbsjthmEC9YEDDRd2PM88aB)HRU)BQQyenrcsIioy3d(txvVlg9fRxG1vXJfzgW6TQzRPK9ybbG2GL5DN9u35DNoD8ObUHU57XqpFmHlw7p5XEDdNpEYNMdL)GW5ZcgoAmmbTBxIszcDMj30ZZJreFIVorC1vvX)Kav9zJddfYQyLyni9kPyLGxfRxcFHBElVexf77oRIjcQYSaq2NfYvvXx(mtVe2n0tucR8NvXw8BFZcPQyZik8SOiNrjnA04dvFoTKB1vUK(7vXotvXUp5IemSP6SgSovcW7paEmEWSPyOZu24tuiD6C4YJ3ol1VHQ)g2cNLB5cFVd1FmeVqcctxcU)HtxhQWLYd2hivcF5OZPgJa6GZ6cBt2rv3lo3HxtstcIrophD103qX)1u99s5Zr9ZKcEdzGBhYONVEbQiAtl()TiZzd6o24RrNbY(vDDaTB(XMDAdT6qOJnZLw(EHt36Ip4CYf4Ff78OowllP)cSB)I9bicSxsyNCPx0BP9woNMK5MA(EPy)pMr9d7uPrWfNN7U6Fdn05M9NjeCfC9M73peHA3O1TnUocTbuhVPT5MJO)5d \ No newline at end of file +!nBvBVjooq4)l9lxxPRiGwAxDs3jb0WwwrdOMW(Y9HKyIDs8sWoNTdTuDk)2VXVKcTCS7EF7eTHKXZKzEg)mpMOErHrbBIcW6)GBLviX6ptXQIi)bDJcwXfyIyekDnwWRIcgvsF(zKa3KeY5LkALlKqYtQAbjk4llgHedz0nxmxGy5Ka9QrbOAvbxmVsr5mjKivuqkVKlS3UBEwMKOI8HmIyPGNl4ugSWyp)qVhC54bUcPJ34wATuX3Ot7YkmsbzU299kOyZf8AgESld(90H433C9sZ1RGRDgOZDgNPMuIYLrbZxgoBQVxuanLZItpi6EMO7zIUNj6E6yHAKiyOYprestH1)63uR3ZXqjnCz4CnYOBSaq3OviHsFdUwymgR2vbUkjqUXqXyFKXzeDM2GOSFEVZOmQS4N2FLTPP3HNYMiGgs0Q9Mg)D7dUU4kK4i)MC119VPF)BE)G(xD5Gbxpik7IbxEWoGPhkv0017U1vN6exj45cIuUqqsP2(6vU2QLN8vddqwV6bsUJp5BiYwuHG3fupXW)qcGc5LvGqSe6wIDSK(mX86DpBzFg8abbSR4dOPoFs)U0QEh45wO8xvsIg9IfcohQJG)QgjinjtQllBs(Cb1WBTEWDJcxz3yki08c4Xl7cq(PdMtk5iZelLPj7vM54AyI0uQqGkujHPoYCAjskpYkMMLrtbl7oAjbkLCSrE5XgR2wDIKkRiPhzmdL2om8Vu49p(LO3QEJrLJxmccb7M1U9wqlqsgI)girqWe89ON00kjPm7Ftwz8pEohgAYO5wsGLHmrG2qcnKQaVzEJdN8WW7bLduzvbshvGCdNRkw44YAkWRlkQHRlmm4Wd5TTmH2rrismrIu6jeIogJ6KKQb7dt)WDTQ23rXyclkW37tASP9YaBZAowuVUwwTrQ2RC7YPnjJkrS1o)0b8mNVXQexR46SR4PBBf4UPRHisHZlcivf1pp(2x1smxIc(mbTEiuWYFBHyhg9mSBRxiqbyW2EE0Egt)UVAY(lMexRF9xk(6FU7U3)X1QB0KCDfqEbp3ABigdCbf4lw1Jaa6HthpCw8uF42apZEhMEWXowwN8qn4dvmnQ6uRYmp2EkJolU7cCCubnphQO9kpwdhk5cqaWsoHre00Gc(JZbtsZ3dHAyRvpISfkEqPlJ(e0sx4nBME7EvDwMLuCN3SftwoRvbRTmSFhxyybk6gc(fBwhnVxOvYC348bMell9n7r29VFr2KeqsfGQsBmJ5BwHunjZ45oBWbgJNF)OHHXZM)HyGF5hgV0FY0zWuK3T7Xrau2ACepC5ddJhUyXSPE2PX49jEKRkMID7iML51IuYsDNF0EuEXfnjFNe38rTdt4IMejFdONkiijN1KOkGhy67kRrnjo2BtcMtK6faW9ixSUj58hPQciAG(udR8hnjgCyUZuKnj6Ps4AvvjLG70PZ7A(ywnZqIoN8Rnjwtnj2pL8ueeuBdbwNiGY73bCmZB5ceqIfD(ab6uwho)1HtZCb083qimAPblS9o0(rd8kbiMDo4(7oEDy)SwCqCG8i8WRYtBncvhKRZmCVxTXD2PsEli1nik(0y0Ul)gi(FgQ)Sq(uq)eTG3agqkiNC69lqWrPzV))cmN8L(cAC7rNOKDRAza97((Ud6duD4vNONen49SQs0oI4S3zDY(I)rOZv1jkrn5hu7Mhmx0Ivu9pJWKqqKyVKWl2yqj5eDpw)YOmxZ2lf7(PnYVzMx1cUOYs7jaBjHw3m)Ob)lGdgT)AIOG(D6DDNlJc2cz5Q(6Z)J(Np \ No newline at end of file diff --git a/FreshShit/SephuzBar/init.lua b/FreshShit/SephuzBar/init.lua deleted file mode 100644 index ee215b6..0000000 --- a/FreshShit/SephuzBar/init.lua +++ /dev/null @@ -1,1037 +0,0 @@ -CLEUEventInfo = { - ["GENERIC"] = { - ["timestamp"] = 1, - ["subevent"] = 2, - ["hideCaster"] = 3, - ["sourceGUID"] = 4, - ["sourceName"] = 5, - ["sourceFlags"] = 6, - ["sourceRaidFlags"] = 7, - ["destGUID"] = 8, - ["destName"] = 9, - ["destFlags"] = 10, - ["destRaidFlags"] = 11, - }, - ["GENERIC_SPELL"] = { - ["spellId"] = 12, - ["spellName"] = 13, - ["spellSchool"] = 14, - }, - ["GENERIC_DAMAGE"] = { - ["amount"] = 15, - ["overkill"] = 16, - ["school"] = 17, - ["resisted"] = 18, - ["blocked"] = 19, - ["absorbed"] = 20, - ["critical"] = 21, - ["glancing"] = 22, - ["crushing"] = 23, - ["isOffHand"] = 24, - }, - ["GENERIC_MISSED"] = { - ["missType"] = 15, - ["isOffHand"] = 16, - ["amountMissed"] = 17, - ["critical"] = 18, - }, - ["GENERIC_HEAL"] = { - ["amount"] = 15, - ["overhealing"] = 16, - ["absorbed"] = 17, - ["critical"] = 18, - }, - ["GENERIC_HEAL_ABSORBED"] = { - ["extraGUID"] = 15, - ["extraName"] = 16, - ["extraFlags"] = 17, - ["extraRaidFlags"] = 18, - ["extraSpellID"] = 19, - ["extraSpellName"] = 20, - ["extraSchool"] = 21, - ["absorbedAmount"] = 22, - ["totalAmount"] = 23, - }, - ["GENERIC_ENERGIZE"] = { - ["amount"] = 15, - ["overEnergize"] = 16, - ["powerType"] = 17, - }, - ["GENERIC_DRAIN"] = { - ["amount"] = 15, - ["powerType"] = 16, - ["extraAmount"] = 17, - }, - ["GENERIC_LEECH"] = { - ["amount"] = 15, - ["powerType"] = 16, - ["extraAmount"] = 17, - }, - ["GENERIC_INTERRUPT"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17, - }, - ["GENERIC_DISPEL"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17, - ["auraType"] = 18, - }, - ["GENERIC_DISPEL_FAILED"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17, - }, - ["GENERIC_STOLEN"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17, - ["auraType"] = 18, - }, - ["GENERIC_EXTRA_ATTACKS"] = { - ["amount"] = 15, - }, - ["GENERIC_AURA_APPLIED"] = { - ["auraType"] = 15, - ["amount"] = 16, - }, - ["GENERIC_AURA_REMOVED"] = { - ["auraType"] = 15, - ["amount"] = 16, - }, - ["GENERIC_AURA_APPLIED_DOSE"] = { - ["auraType"] = 15, - ["amount"] = 16, - }, - ["GENERIC_AURA_REMOVED_DOSE"] = { - ["auraType"] = 15, - ["amount"] = 16, - }, - ["GENERIC_AURA_REFRESH"] = { - ["auraType"] = 15, - }, - ["GENERIC_AURA_BROKEN"] = { - ["auraType"] = 15, - }, - ["GENERIC_AURA_BROKEN_SPELL"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17, - ["auraType"] = 18, - }, - ["GENERIC_CAST_START"] = { - }, - ["GENERIC_CAST_SUCCESS"] = { - }, - ["GENERIC_CAST_FAILED"] = { - }, -} - -CLEUEventInfo["SWING_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] -CLEUEventInfo["SWING_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] -CLEUEventInfo["SWING_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] -CLEUEventInfo["SWING_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"] -CLEUEventInfo["SWING_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] -CLEUEventInfo["SWING_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] -CLEUEventInfo["SWING_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] -CLEUEventInfo["SWING_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] -CLEUEventInfo["SWING_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] -CLEUEventInfo["SWING_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"] -CLEUEventInfo["SWING_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] -CLEUEventInfo["SWING_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] -CLEUEventInfo["SWING_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] -CLEUEventInfo["SWING_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] -CLEUEventInfo["SWING_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] -CLEUEventInfo["SWING_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] -CLEUEventInfo["SWING_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] -CLEUEventInfo["SWING_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] -CLEUEventInfo["SWING_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] -CLEUEventInfo["SWING_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] -CLEUEventInfo["SWING_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] -CLEUEventInfo["SWING_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] - -CLEUEventInfo["RANGE_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] -CLEUEventInfo["RANGE_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] -CLEUEventInfo["RANGE_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] -CLEUEventInfo["RANGE_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"] -CLEUEventInfo["RANGE_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] -CLEUEventInfo["RANGE_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] -CLEUEventInfo["RANGE_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] -CLEUEventInfo["RANGE_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] -CLEUEventInfo["RANGE_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] -CLEUEventInfo["RANGE_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"] -CLEUEventInfo["RANGE_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] -CLEUEventInfo["RANGE_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] -CLEUEventInfo["RANGE_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] -CLEUEventInfo["RANGE_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] -CLEUEventInfo["RANGE_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] -CLEUEventInfo["RANGE_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] -CLEUEventInfo["RANGE_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] -CLEUEventInfo["RANGE_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] -CLEUEventInfo["RANGE_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] -CLEUEventInfo["RANGE_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] -CLEUEventInfo["RANGE_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] -CLEUEventInfo["RANGE_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] - -CLEUEventInfo["SPELL_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] -CLEUEventInfo["SPELL_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] -CLEUEventInfo["SPELL_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] -CLEUEventInfo["SPELL_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"] -CLEUEventInfo["SPELL_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] -CLEUEventInfo["SPELL_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] -CLEUEventInfo["SPELL_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] -CLEUEventInfo["SPELL_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] -CLEUEventInfo["SPELL_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] -CLEUEventInfo["SPELL_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"] -CLEUEventInfo["SPELL_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] -CLEUEventInfo["SPELL_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] -CLEUEventInfo["SPELL_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] -CLEUEventInfo["SPELL_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] -CLEUEventInfo["SPELL_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] -CLEUEventInfo["SPELL_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] -CLEUEventInfo["SPELL_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] -CLEUEventInfo["SPELL_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] -CLEUEventInfo["SPELL_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] -CLEUEventInfo["SPELL_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] -CLEUEventInfo["SPELL_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] -CLEUEventInfo["SPELL_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] - -CLEUEventInfo["SPELL_PERIODIC_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] -CLEUEventInfo["SPELL_PERIODIC_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] -CLEUEventInfo["SPELL_PERIODIC_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] -CLEUEventInfo["SPELL_PERIODIC_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"] -CLEUEventInfo["SPELL_PERIODIC_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] -CLEUEventInfo["SPELL_PERIODIC_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] -CLEUEventInfo["SPELL_PERIODIC_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] -CLEUEventInfo["SPELL_PERIODIC_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] -CLEUEventInfo["SPELL_PERIODIC_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] -CLEUEventInfo["SPELL_PERIODIC_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"] -CLEUEventInfo["SPELL_PERIODIC_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] -CLEUEventInfo["SPELL_PERIODIC_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] -CLEUEventInfo["SPELL_PERIODIC_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] -CLEUEventInfo["SPELL_PERIODIC_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] -CLEUEventInfo["SPELL_PERIODIC_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] -CLEUEventInfo["SPELL_PERIODIC_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] -CLEUEventInfo["SPELL_PERIODIC_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] -CLEUEventInfo["SPELL_PERIODIC_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] -CLEUEventInfo["SPELL_PERIODIC_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] -CLEUEventInfo["SPELL_PERIODIC_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] -CLEUEventInfo["SPELL_PERIODIC_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] -CLEUEventInfo["SPELL_PERIODIC_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] - ----@class CLEUParser -CLEUParser = { - ---@param ... any - ---@return number, nil|string - GetTimestamp = function(...) - local val = select(CLEUEventInfo["GENERIC"]["timestamp"], ...) - if val == nil then return 0, "Timestamp is nil or missing" end - if type(val) ~= "number" then return 0, "Timestamp is not a number" end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetSubevent = function(...) - local val = select(CLEUEventInfo["GENERIC"]["subevent"], ...) - if val == nil then return "", "Subevent is nil or missing" end - if type(val) ~= "string" then return "", "Subevent is not a string" end - return val, nil - end, - ---@param ... any - ---@return boolean, nil|string - GetHideCaster = function(...) - local val = select(CLEUEventInfo["GENERIC"]["hideCaster"], ...) - if val == nil then return false, "HideCaster is nil or missing" end - if type(val) ~= "boolean" then return false, "HideCaster is not a boolean" end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetSourceGUID = function(...) - local val = select(CLEUEventInfo["GENERIC"]["sourceGUID"], ...) - if val == nil then return "", "SourceGUID is nil or missing" end - if type(val) ~= "string" then return "", "SourceGUID is not a string" end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetSourceName = function(...) - local val = select(CLEUEventInfo["GENERIC"]["sourceName"], ...) - if val == nil then return "", "SourceName is nil or missing" end - if type(val) ~= "string" then return "", "SourceName is not a string" end - return val, nil - end, - ---@param ... any - ---@return number, nil|string - GetSourceFlags = function(...) - local val = select(CLEUEventInfo["GENERIC"]["sourceFlags"], ...) - if val == nil then return 0, "SourceFlags is nil or missing" end - if type(val) ~= "number" then return 0, "SourceFlags is not a number" end - return val, nil - end, - ---@param ... any - ---@return number, nil|string - GetSourceRaidFlags = function(...) - local val = select(CLEUEventInfo["GENERIC"]["sourceRaidFlags"], ...) - if val == nil then return 0, "SourceRaidFlags is nil or missing" end - if type(val) ~= "number" then return 0, "SourceRaidFlags is not a number" end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetDestGUID = function(...) - local val = select(CLEUEventInfo["GENERIC"]["destGUID"], ...) - if val == nil then return "", "DestGUID is nil or missing" end - if type(val) ~= "string" then return "", "DestGUID is not a string" end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetDestName = function(...) - local val = select(CLEUEventInfo["GENERIC"]["destName"], ...) - if val == nil then return "", "DestName is nil or missing" end - if type(val) ~= "string" then return "", "DestName is not a string" end - return val, nil - end, - ---@param ... any - ---@return number, nil|string - GetDestFlags = function(...) - local val = select(CLEUEventInfo["GENERIC"]["destFlags"], ...) - if val == nil then return 0, "DestFlags is nil or missing" end - if type(val) ~= "number" then return 0, "DestFlags is not a number" end - return val, nil - end, - ---@param ... any - ---@return number, nil|string - GetDestRaidFlags = function(...) - local val = select(CLEUEventInfo["GENERIC"]["destRaidFlags"], ...) - if val == nil then return 0, "DestRaidFlags is nil or missing" end - if type(val) ~= "number" then return 0, "DestRaidFlags is not a number" end - return val, nil - end, - - - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - ---@param ... any - ---@return number, nil|string - GetSpellId = function(...) - local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellId"], ...) - if val == nil then return 0, "SpellId is nil or missing" end - if type(val) ~= "number" then return 0, "SpellId is not a number" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - ---@param ... any - ---@return string, nil|string - GetSpellName = function(...) - local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellName"], ...) - if val == nil then return "", "SpellName is nil or missing" end - if type(val) ~= "string" then return "", "SpellName is not a string" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - ---@param ... any - ---@return number, nil|string - GetSpellSchool = function(...) - local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellSchool"], ...) - if val == nil then return 0, "SpellSchool is nil or missing" end - if type(val) ~= "number" then return 0, "SpellSchool is not a number" end - return val, nil - end, - - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- |_HEAL| - --- |_ENERGIZE| - --- |_DRAIN| - --- |_LEECH| - --- |_EXTRA_ATTACKS| - --- |_AURA_APPLIED| - --- |_AURA_REMOVED| - --- |_AURA_APPLIED_DOSE| - --- |_AURA_REMOVED_DOSE| - ---@param ... any - ---@return number, nil|string - GetAmount = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["amount"], ...) - if val == nil then return 0, "Amount is nil or missing" end - if type(val) ~= "number" then return 0, "Amount is not a number" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - ---@param ... any - ---@return number, nil|string - GetOverkill = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["overkill"], ...) - if val == nil then return 0, "Overkill is nil or missing" end - if type(val) ~= "number" then return 0, "Overkill is not a number" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - ---@param ... any - ---@return number, nil|string - GetSchool = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["school"], ...) - if val == nil then return 0, "School is nil or missing" end - if type(val) ~= "number" then return 0, "School is not a number" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- - --- Apparently this is allowed to be nil? - ---@param ... any - ---@return boolean, nil|string - GetResisted = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["resisted"], ...) - if val == nil then return false, "Resisted is nil or missing" end - if type(val) ~= "boolean" then return false, "Resisted is not a boolean" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- - --- Apparently this is allowed to be nil? - ---@param ... any - ---@return boolean, nil|string - GetBlocked = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["blocked"], ...) - if val == nil then return false, "Blocked is nil or missing" end - if type(val) ~= "boolean" then return false, "Blocked is not a boolean" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- |_HEAL| - --- - --- Apparently this is allowed to be nil? - ---@param ... any - ---@return boolean, nil|string - GetAbsorbed = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["absorbed"], ...) - if val == nil then return false, "Absorbed is nil or missing" end - if type(val) ~= "boolean" then return false, "Absorbed is not a boolean" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- |_MISSED| - --- |_HEAL| - ---@param ... any - ---@return boolean, nil|string - GetCritical = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["critical"], ...) - if val == nil then return false, "Critical is nil or missing" end - if type(val) ~= "boolean" then return false, "Critical is not a boolean" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - ---@param ... any - ---@return boolean, nil|string - GetGlancing = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["glancing"], ...) - if val == nil then return false, "Glancing is nil or missing" end - if type(val) ~= "boolean" then return false, "Glancing is not a boolean" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - ---@param ... any - ---@return boolean, nil|string - GetCrushing = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["crushing"], ...) - if val == nil then return false, "Crushing is nil or missing" end - if type(val) ~= "boolean" then return false, "Crushing is not a boolean" end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- |_MISSED| - ---@param ... any - ---@return boolean, nil|string - GetIsOffHand = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return false, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["isOffHand"], ...) - if val == nil then return false, "IsOffHand is nil or missing" end - if type(val) ~= "boolean" then return false, "IsOffHand is not a boolean" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_MISSED| - --- - --- return type is unconfirmed! - ---@param ... any - ---@return string, nil|string - GetMissType = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return "", string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["missType"], ...) - if val == nil then return "", "MissType is nil or missing" end - if type(val) ~= "string" then return "", "MissType is not a string" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_MISSED| - ---@param ... any - ---@return number, nil|string - --- - --- return type is unconfirmed! - GetAmountMissed = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["amountMissed"], ...) - if val == nil then return 0, "AmountMissed is nil or missing" end - if type(val) ~= "number" then return 0, "AmountMissed is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL| - --- - --- return type is unconfirmed! - ---@param ... any - ---@return number, nil|string - GetOverhealing = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["overhealing"], ...) - if val == nil then return 0, "Overhealing is nil or missing" end - if type(val) ~= "number" then return 0, "Overhealing is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return string, nil|string - GetExtraGUID = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return "", string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraGUID"], ...) - if val == nil then return "", "ExtraGUID is nil or missing" end - if type(val) ~= "string" then return "", "ExtraGUID is not a string" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return string, nil|string - GetExtraName = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return "", string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraName"], ...) - if val == nil then return "", "ExtraName is nil or missing" end - if type(val) ~= "string" then return "", "ExtraName is not a string" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return number, nil|string - GetExtraFlags = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraFlags"], ...) - if val == nil then return 0, "ExtraFlags is nil or missing" end - if type(val) ~= "number" then return 0, "ExtraFlags is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return number, nil|string - GetExtraRaidFlags = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraRaidFlags"], ...) - if val == nil then return 0, "ExtraRaidFlags is nil or missing" end - if type(val) ~= "number" then return 0, "ExtraRaidFlags is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - --- - --- WARNING! Different from "GetExtraSpellId" (capital ID!)
- --- This is the doing of Blizzard, not me.
- ---@see CLEUParser.GetExtraSpellId - ---@param ... any - ---@return number, nil|string - GetExtraSpellID = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraSpellID"], ...) - if val == nil then return 0, "ExtraSpellID is nil or missing" end - if type(val) ~= "number" then return 0, "ExtraSpellID is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - --- |_INTERRUPT| - --- |_DISPEL| - --- |_DISPEL_FAILED| - --- |_STOLEN| - --- |_AURA_BROKEN_SPELL| - ---@param ... any - ---@return string, nil|string - GetExtraSpellName = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return "", string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraSpellName"], ...) - if val == nil then return "", "extraSpellName is nil or missing" end - if type(val) ~= "string" then return "", "extraSpellName is not a string" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - --- |_INTERRUPT| - --- |_DISPEL| - --- |_DISPEL_FAILED| - --- |_STOLEN| - --- |_AURA_BROKEN_SPELL| - ---@param ... any - ---@return number, nil|string - GetExtraSchool = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraSchool"], ...) - if val == nil then return 0, "ExtraSchool is nil or missing" end - if type(val) ~= "number" then return 0, "ExtraSchool is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return number, nil|string - GetAbsorbedAmount = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["absorbedAmount"], ...) - if val == nil then return 0, "AbsorbedAmount is nil or missing" end - if type(val) ~= "number" then return 0, "AbsorbedAmount is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_ENERGIZE| - ---@param ... any - ---@return number, nil|string - GetOverEnergize = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["overEnergize"], ...) - if val == nil then return 0, "OverEnergize is nil or missing" end - if type(val) ~= "number" then return 0, "OverEnergize is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_ENERGIZE| - --- |_DRAIN| - --- |_LEECH| - --- - --- return type is unconfirmed! - ---@param ... any - ---@return number, nil|string - GetPowerType = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["powerType"], ...) - if val == nil then return 0, "PowerType is nil or missing" end - if type(val) ~= "number" then return 0, "PowerType is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DRAIN| - --- |_LEECH| - ---@param ... any - ---@return number, nil|string - GetExtraAmount = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraAmount"], ...) - if val == nil then return 0, "ExtraAmount is nil or missing" end - if type(val) ~= "number" then return 0, "ExtraAmount is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_INTERRUPT| - --- |_DISPEL| - --- |_DISPEL_FAILED| - --- |_STOLEN| - --- |_AURA_BROKEN_SPELL| - --- - --- WARNING! Different from "GetExtraSpellID" (capital ID!)
- --- This is the doing of Blizzard, not me.
- ---@see CLEUParser.GetExtraSpellID - ---@param ... any - ---@return number, nil|string - GetExtraSpellId = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["extraSpellId"], ...) - if val == nil then return 0, "ExtraSpellId is nil or missing" end - if type(val) ~= "number" then return 0, "ExtraSpellId is not a number" end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DISPEL| - --- |_STOLEN| - --- |_AURA_APPLIED| - --- |_AURA_REMOVED| - --- |_AURA_APPLIED_DOSE| - --- |_AURA_REMOVED_DOSE| - --- |_AURA_REFRESH| - --- |_AURA_BROKEN| - --- |_AURA_BROKEN_SPELL| - ---@param ... any - ---@return number, nil|string - GetExtraAuraType = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then return 0, string.format("Failed getting subevent due to: %s", err) end - local val = select(CLEUEventInfo[subevent]["auraType"], ...) - if val == nil then return 0, "AuraType is nil or missing" end - if type(val) ~= "number" then return 0, "AuraType is not a number" end - return val, nil - end, -} \ No newline at end of file diff --git a/FreshShit/WarlockDispelMaster/event.lua b/FreshShit/WarlockDispelMaster/event.lua index 6e791d4..3f6309a 100644 --- a/FreshShit/WarlockDispelMaster/event.lua +++ b/FreshShit/WarlockDispelMaster/event.lua @@ -1,16 +1,16 @@ -- TICKER_200 function() - for _, unit in ipairs(Units) do - if UnitExists(unit) and not UnitIsDeadOrGhost(unit) and HasDispellableDebuff(unit) then + for _, unit in ipairs(aura_env.Units) do + if UnitExists(unit) and not UnitIsDeadOrGhost(unit) and aura_env.HasDispellableDebuff(unit) then local unitName = UnitName(unit) - local frame = GetFrameFromName(unitName) + local frame = aura_env.GetFrameFromName(unitName) if frame == nil then print("Frame not found for " .. unitName) -- Unexpected behavior, bail! return end -- print("Dispel " .. unitName) - MakeFrameGlow(frame) + aura_env.MakeFrameGlow(frame) end end end \ No newline at end of file diff --git a/FreshShit/WarlockDispelMaster/event2.lua b/FreshShit/WarlockDispelMaster/event2.lua index 019cd5c..07856ca 100644 --- a/FreshShit/WarlockDispelMaster/event2.lua +++ b/FreshShit/WarlockDispelMaster/event2.lua @@ -1,4 +1,4 @@ -- TICKER_1000 function() - SetupPartyCache() + aura_env.SetupPartyCache() end \ No newline at end of file diff --git a/FreshShit/WarlockDispelMaster/export b/FreshShit/WarlockDispelMaster/export new file mode 100644 index 0000000..f56e444 --- /dev/null +++ b/FreshShit/WarlockDispelMaster/export @@ -0,0 +1 @@ +!1IrdZPTn0FlJ76DWTcdiPDD9w3TaLKMmcjd7SCB9QXcBzqPglozzAsBQ)TV3ts2agBcT72rGy)0tVV07l9C64y7yTWXYh)dEKNidzruhRRUXE45Jg4yfWJKwSptDg1PRJLK7TIkIz8iNr)C7JA32XYJhYfWEh1r9xx1VhP(9y8xjqAw8YqYd207HxE2shRhUkiiMkDgb7Ne5nNlUMZIGf7pyK9GXAU6yDQG95u3)mH4lissQRniH3VXw9sIL8fizVzPprcInDff3ijbGtKmVBz(Y5owNaVdq9KGGhJ6zSKiKWdaUSig(KLpFIMEo9YOSJ1W(NL6(Mu3HSPwYKP1Rbp0xT2zH8p1StR21AKErZMn)DjzAin19xJLcw0SNN6oLZdPKOFl9csIGmHgTQvVK4hovqwqJve9lFn9Inw9gqqmlaWD1FQHgoQO2Z3eei7p0zxqD3f0r7c64Db9ceKsyqnbarwK6MaItQRwD0liOYeruUMb6yel8XmmY1J3rIFlCGtddrtYBPttccuQvqsK6eOos6gRfIaUi1LPqPdq0UTtD95Rxo7ti3JeclPiiG3Kn(kFyjvra0iQzPIlWsSg7skwqgDGn9gLEa0yonAxuZ(KP8bKWyQw13fzAKF5mZiFaRQDjzgZR2HYoPi5W4M(Ll2R4AWzJd5a0Bm1v5uU9HCUFCPNXNrLJGTCQGVqV3ToFvuDdZoAbmC6jS2zCVg4r6wZqAwSAp1kQSMxqP2NrMfXJHiE4GLfJoEnJG8cnXSzVgDM9PbWJ(ndy0q)seTwJ(oLpZg))uinE(r5g6C((A4GaZ)vVG1o6)IY0Yq0NuPYiaYTQ9X0YszjsuS8r1220ZsbgDTgTJNv02owzekF3xJPZ6t8MtFpI6h(2KNYGfLSykvSHaoMUGVIII21eFFe)drc1KU1SyOiIXCv7rVN9PT)OoiWF60ixYZz8LKpsvMgS0Z(d4momkWJ2YR51Mi36LhEM(yMldb4UBjvUEFor)Wt6GPQlQY8zsWugcF3rffu25usOCEpIyJqK3PGvEk5nWFTwV)KYq3aTUMDpnepbMyH9qupNmWP2xWYx4324))k(ZlX3AD0lG)9k47XnQM6pPXwxnOAc0FInBbv06KajvuhLJChK9W2Quo(Y162bS9dq6lTi2gjwACiL4kgvSoIpVNQ81SGGVLfqOmtsHgqEr59F0SzQ7p5NSyj0YXzV3eqdBfA0SETbHRU50jJjm)Ze8KLDW(q6LiL8ON5RdO)qLjSl4ilaISUO63oRaf5hvmSsoysarf6yLkRQxpxuQOhknfoSGN8QxvNjTyYZk9X2jnps312Td1ncB)hsTWINRUka8gyPNndUGJ((m25aupczYwFZairU6YgwqtKS7DSM0)el7jw2Nm2o)Ai60pRX9AbvHR11dgomJutMZ8b6kHqx4wyQ(Mp3pwF3e1UIDSSpV)Fmy8KUTBVwaq3X1WtVOshBS)yDZ8mOqeBjHjIRV9ToAuUhpEeJRp4EwSm202UUYqexQx7843sj(xjoBoKdFlu27fcYWC)(mg)ve38Yy3yEP4TiQyVbID87k2Ir9m6VhQD4TWw8Zsi4fIAnr0k7wapbnqQth4MaTATwfpGmT4b)nqfYLupjfiZu6CYkghlanLWc)HNMcMMs2xU4QxezVrN0NQFl6q5nZSt)l7nUnpWrhqAI1W8aMOguoCS0xCgUxVYFZwH77gm86tVzOgP1H2yO)OUfc3ll6C7uafIo70gdp3BEHsIDXDvEWBvLXQ3ypMHdkZtjQpoJM7ucXkkotMh0Jlzf1wJ2LCFQzAoc6mqs1guPAKoGZaverc)RSrd19Low3bshlaOZWbNAJKKHtKbwDJXVymOrCCKt(G(IiyuOyQhpcsec0FbHfD4yNNr)WWhLFWyElrazm(O2L(ssSe9DsWv6n7Ux17U)zXF)lGbu5PcUjejbnhMPxP8K1weR(JhmyKAeuWcxTmBKtsCszrbSz5p7Z2yn4GASYUM9onmWmtSExzBF1LOEDp1xpqRrQkbHCIAODGe7PMJxsOKLDE6fsIJ3bAmojVcabWFIl8VvqwcMHSNqKDS62QZlBDKJ1kqzpUlE878V \ No newline at end of file diff --git a/FreshShit/WarlockDispelMaster/init.lua b/FreshShit/WarlockDispelMaster/init.lua index 624ef65..bf5b3c8 100644 --- a/FreshShit/WarlockDispelMaster/init.lua +++ b/FreshShit/WarlockDispelMaster/init.lua @@ -1,8 +1,8 @@ LCG = LibStub("LibCustomGlow-1.0") ---@table -BusyFrames = {} +aura_env.BusyFrames = {} -Units = { +aura_env.Units = { "player", "party1", "party2", @@ -13,7 +13,7 @@ Units = { ---@param unit string ---@return boolean, nil|string -function HasDispellableDebuff(unit) +aura_env.HasDispellableDebuff = function(unit) for i = 1, 20 do local debuff, _, _, _, type = UnitDebuff(unit, i) if debuff == nil then @@ -29,7 +29,7 @@ end ---@param frame Frame ---@return string, nil|string -function GetNameFromFrame(frame) +aura_env.GetNameFromFrame = function(frame) if frame == nil then return "", "Frame is nil" end @@ -47,43 +47,43 @@ end ---@param name string ---@return Frame|nil -function GetFrameFromName(name) - return PartyCache[name] +aura_env.GetFrameFromName = function(name) + return aura_env.PartyCache[name] end ---@param name string ---@return string ---@return number -function RemoveNamePadding(name) +aura_env.RemoveNamePadding = function(name) return string.gsub(name, "|c%w%w%w%w%w%w%w%w", "", 1) end -function MakeFrameGlow(frame) +aura_env.MakeFrameGlow = function(frame) local frameName = frame:GetName() - if frame ~= nil and BusyFrames[frameName] == nil then + if frame ~= nil and aura_env.BusyFrames[frameName] == nil then ---@type Frame ---@diagnostic disable-next-line: undefined-field local healthBar = frame.Health if healthBar ~= nil then - LCG.PixelGlow_Start(healthBar, {1, 1, 0, 1}, 16, 0.35, 8, 4) - BusyFrames[frameName] = true + LCG.PixelGlow_Start(healthBar, { 1, 1, 0, 1 }, 16, 0.35, 8, 4) + aura_env.BusyFrames[frameName] = true C_Timer.After(1, function() LCG.PixelGlow_Stop(healthBar) - BusyFrames[frameName] = nil + aura_env.BusyFrames[frameName] = nil end) end end end -PartyCache = {} -function SetupPartyCache() +aura_env.PartyCache = {} +aura_env.SetupPartyCache = function() for i = 1, 5 do -- /dump _G[string.format("ElvUF_RaidGroup1UnitButton%d", 1)].Name:GetText() local raidFrame = _G[string.format("ElvUF_RaidGroup1UnitButton%d", i + 1)] - local name, err = GetNameFromFrame(raidFrame) + local name, err = aura_env.GetNameFromFrame(raidFrame) if err == nil then - name = RemoveNamePadding(name) - PartyCache[name] = raidFrame + name = aura_env.RemoveNamePadding(name) + aura_env.PartyCache[name] = raidFrame end end end diff --git a/FreshShit/_GlobalTickers/event.lua b/FreshShit/_GlobalTickers/event.lua index fe8c01c..6d84dd2 100644 --- a/FreshShit/_GlobalTickers/event.lua +++ b/FreshShit/_GlobalTickers/event.lua @@ -1,14 +1,14 @@ -- PLAYER_ENTERING_WORLD GUILD_ROSTER_UPDATE function(e) - for interval, ticker in pairs(Tickers) do + for interval, ticker in pairs(aura_env.Tickers) do if ticker == 0 then - if Debug then print("Creating ticker") end + if aura_env.Debug then print("Creating ticker") end local tickerEvent = string.format("TICKER_%d", interval) - Tickers[interval] = C_Timer.NewTicker(interval / 1000, function() + aura_env.Tickers[interval] = C_Timer.NewTicker(interval / 1000, function() WeakAuras.ScanEvents(tickerEvent) end) else - if Debug then print("Ticker already exists") end + if aura_env.Debug then print("Ticker already exists") end end end end \ No newline at end of file diff --git a/FreshShit/_GlobalTickers/export b/FreshShit/_GlobalTickers/export new file mode 100644 index 0000000..250c8d8 --- /dev/null +++ b/FreshShit/_GlobalTickers/export @@ -0,0 +1 @@ +!DAvBVjooq4FlBLwjQulxGYlD)W(bwAA32JnWHdh6UvNtCtCaVRXoY2Hw2tx(TFJDiah0UQ6uq5LhpEMXpZBGBHdXOvyuQ9h8QSWWzckgnEw4O7d8XOmPWGy)GIdA1gJmYK1uLMjf4G(Ex55HrKcZsPACUba1GomGQy6Cozti9z4J3NJrBgNLPPgCGvErci)ejtalo0pi0FkgLi5sfS5GwUFTD3VYDVJ9oi6ZhOdfDbyTWn5GNACwjPqBKRSwCwEkXa4fBFc(NCfXWsMZsnlXObW3aAsT)I0gIYu54zmbtVS6D4vlkkvgvPC8NQnJvPksevSU5n0hlwug)XY4mcxtlFy3kHSKVduLBT)U8HY4QRV2YZ7VCGExCaA7xeT7lIcA4a4)P8bWDbh2OylwawSIgd3b4E1rv1EVU4r6AkexlYYypJrrdhGcJqHdMgwlu0swQLCzROqUXcQGQyjOLYNglG97EoaOW1wI2suiBahSfYPym6Zuc3Y26CkNFF62eJAh4YllJNmAWF4pnYLaCFWDrZhpD0nLX3n7(r3enDmcGJMn5MbH(LpKviCXRg0Z3ZdzsvzmKfrvRj8lkJnoc3cvgNtykDJJJfNxgNk3RG6lw2(n)rlRcFUKkovWd3WXzaUDeNRahQXzdvuiJtSOwVNbwMksFDnYLjeET0(wk0fF1qiuSOjCsHm4gNfE)WFfyL3NE2f7p5N)6A94Z)xR3tv2ZWOqi8QAgqFQsGg1Rxg)lLX20mWo74(FIHQVMtjFFayuDtucr4oh6ghCO(jQaONxyvQRM6)DCiCBuLWHas6gqFpZ0g9Rgo(pGUpGBBZP1y0BpLDxzuvH32II66UjkQRUdnXF0imsqwrR7CchISSQgBF2F0KBNnYcxi2xlB22H9BU4ITaKW5vn0wtdRe7lsO4n4YwEUMAsRTVvX(rz8VvqsvedPmom02Idc3cc)3RBP3Uhg9nWXzzBWOr(3A7os5zBBw)PXHHJ)cSnGsE37UJlFKW3Mzz7GlszhmditbNkOfeymB7i0tUUV32ZZRt)p056UETHhDUgNDzNpaRkvPZveyuX8DVvyTZJZUI39pv3DD3HoBKXwuP)QXi3ATsfDHgo13paJwszlwAal1Tx)(D7376R751Ux3wBTeq800QrbbTTZV4sIB0huOPKf5UbIfCdRMQneUn4DmCcNO1NGMYGoQjaYMtwsrsONck5NcMVo)vmk0nn5eWSQzzVIJ3(uLyNMFeOJqz2XKvkQEMikfkVSGBtK1uBCwxpqriH)RaS3veM4Tl9UPSVn5RCAmQDZw9AEfgTgYN602(FcW)7d \ No newline at end of file diff --git a/FreshShit/_GlobalTickers/init.lua b/FreshShit/_GlobalTickers/init.lua index 286391f..51d147b 100644 --- a/FreshShit/_GlobalTickers/init.lua +++ b/FreshShit/_GlobalTickers/init.lua @@ -1,5 +1,5 @@ -Debug = false -Tickers = { +aura_env.Debug = false +aura_env.Tickers = { [100] = 0, [200] = 0, [500] = 0,