diff --git a/FreshShit/ShardCounter/display.lua b/FreshShit/ShardCounter/display.lua new file mode 100644 index 0000000..0388715 --- /dev/null +++ b/FreshShit/ShardCounter/display.lua @@ -0,0 +1,3 @@ +function() + return aura_env.Display +end \ No newline at end of file diff --git a/FreshShit/ShardCounter/event.lua b/FreshShit/ShardCounter/event.lua new file mode 100644 index 0000000..aa2d6c1 --- /dev/null +++ b/FreshShit/ShardCounter/event.lua @@ -0,0 +1,7 @@ +-- TICKER_500 +function() + aura_env.SoulShardStack:CleanOld() + aura_env.AgonyStack:CleanOld() + aura_env.UpdateDisplay() + aura_env.SoulShards = UnitPower("player", 7) +end diff --git a/FreshShit/ShardCounter/event2.lua b/FreshShit/ShardCounter/event2.lua new file mode 100644 index 0000000..8beecf9 --- /dev/null +++ b/FreshShit/ShardCounter/event2.lua @@ -0,0 +1,13 @@ +-- UNIT_POWER +function(e, unit, power) + if unit ~= "player" then return end + if power ~= "SOUL_SHARDS" then return end + local soulShards = UnitPower("player", 7) + if soulShards == aura_env.SoulShards then return end + if soulShards < aura_env.SoulShards then + aura_env.SoulShards = soulShards + return + end + aura_env.SoulShards = soulShards + aura_env.SoulShardStack:Push(time()) +end \ No newline at end of file diff --git a/FreshShit/ShardCounter/event3.lua b/FreshShit/ShardCounter/event3.lua new file mode 100644 index 0000000..6b5b291 --- /dev/null +++ b/FreshShit/ShardCounter/event3.lua @@ -0,0 +1,14 @@ +-- COMBAT_LOG_EVENT_UNFILTERED +function(e, ...) + local caster, err = CLEUParser.GetSourceName(...) + if err then return end + if caster ~= aura_env.PlayerName then return end + local subevent, err = CLEUParser.GetSubevent(...) + if err then return end + if subevent ~= "SPELL_PERIODIC_DAMAGE" then return end + local spellID, err = CLEUParser.GetSpellId(...) + if err then return end + if spellID == 980 then + aura_env.AgonyStack:Push(time()) + end +end \ No newline at end of file diff --git a/FreshShit/ShardCounter/event5.lua b/FreshShit/ShardCounter/event5.lua new file mode 100644 index 0000000..e8fb0c1 --- /dev/null +++ b/FreshShit/ShardCounter/event5.lua @@ -0,0 +1,7 @@ +-- PLAYER_REGEN_DISABLED +function() + if aura_env.config.resetOnCombat then + aura_env.AgonyStack:CleanOld(0) + aura_env.SoulShardStack:CleanOld(0) + end +end \ No newline at end of file diff --git a/FreshShit/ShardCounter/export b/FreshShit/ShardCounter/export new file mode 100644 index 0000000..0e8519e --- /dev/null +++ b/FreshShit/ShardCounter/export @@ -0,0 +1 @@ +!1M1cZjoos4)l5Quf5Qal5XKzN9MzVJaKzswcqHiBQRUBTTcwg8o2YuY2e42B8V9RBjzJTXgy2zUkpWi1p)6wQBjBCHXudIVbXg)fEmioYZLZmiJEA6G7h23G4eWJiU)hMXWRU0GqJJweigTmYnGhcmmukGOnlbw4X(VWegK4qwpw4mJBbjtxdK0UDBdsyeBjso5vx7OfgdbH57YLJWP(a7GU9sSilOcB4Ji6SpNy9iDn8mQDInZHg7fzm8nGW(mBdirGbj5sIbstje0nz6cwIfOEx)y)eRqyMeRaNeRiC8qPQcvQkuPQgUSwjwlcEfzJVPerZzCMGIEDIfBfJhfcIkiXsW8zOxF2FlXQNYc)PelWeJqp87f00zEaArvbkh0xPkERZlJCXHpSlDz7uyxkWYqUo2GubFC1H983CCEE3a)xOrGpZ8deBYPPBYSNzssuem11pdv6R9PL0qqaffeGhSzbC7qj(Ky9QRheRFbGlBMhlIbr8LmrI1mnxUCa)4ZG5B4eaJFt7eRMaVickXoaodemeYPCC6WkLjLd)Jhauhr)mJJYfrCWscDT15xfH9Bua61Bb0OG5Z9yfauL)oHfYajtrTkJ2Gnitx5rmHlFEQ3OHnbs(iEx9yPa7TPiVwCOes5thKUaSiKd3WLE0ntzRHVCkyaZIdJc8vF3jMpd9MgNL8qIL6hblkwaIJglOMm(Qw9usi5bgh2)zZihhqLgdHalG1W2mJda8bYb6pCA)jONpBftecs1y4BBFfMaSohpc2CyQPkqsAeBnONwAtJqqt)jSnwGpa3ZEw6sKoW3HrNLUTgKysfrWdOR4YDdxOEgEehLyhyQeoIx6NinB28FmZJggMUs9bCehxMNTC5jrUWuTGOWCROEXmC1h9fp27HKQFo5HmqsVO)djw)XwOezEjvq9RqW5PjfY12t6uC2RsjMfL0cjxWk9hVGzumHI55izbqBFwevAQn(JVCEbZQ8pMMUCB2AjJLCOD45lvOCuRTYCWpS1zRMYuCeXQVSlnPGH0xYMfY9oVsGv5YLS2CZl12UW(44WffbxuqNRPVcNucLTGDyyIOg58dGL27HnxW4(lfC7FUmGb7)ZRp4O0lSBFWkwj9MxUvOAaY(wWV04WoihtqK7kVl8vFIPJRa3E)dfsb(x5DGFRwE9OAwJGYgYDQQeL1QqU5TIL9dSP(xXOZpa1oGTCwGHNgkX0ulBaXV4SdHZLLE7VdPWrlGQalcW9GubJ)(wY66XO8rE2vMlNXy9bgetNkjlpeJ(CJCQvvmTD7kKttG0LqHlyrrew)Qfu5faWgNiTSeRtTX)oPu66551CvGQS(TR0MkX3fWFnVakxhuFSfZhYNO5(BjwVVOZU)KJJy1N7z1ZELPevo4HGpQte2HZUiyEqtLzH7LMRGuH2URyV9wq5LgzdblODCN3QYM1plNy7K1w5XkYDAenV4s7TaL1jNuL5Rku0o3uJbgyIHq7pYPEck2JFPXjlLtCYzfWbvpf51tvn9Kw)CRglfooT5pcJFAZ326sNFWhdgNOmpO7p8B1G7)u2UL4QQ)kUkAxTQ79)OuQe)lRZTbL9RVkH9Y6m8FZpnefVcmoxBFNj7)l5bvxLapZNdD5T9SLQb22am0AwuCOSbytQ3R0nGEIzyJyXCzV4Q270e8syG4LhdSLeONUl4fUQw9Kn7gQAUZow1bUbbo(r4sMN3926PIX((iQ0aLGLJaImm(fPuhlyoURHtXoU)GbBhMe7ih2SBhYutY0otWUhzVadR6u9t9hm(UNgOuYwFnA7bil7)PTBUxvO90pXOEy)T1yLvziL81Tn3Myn9(U)s)jMWr3sEOQC96svtlLujT5sX2lDfwUTFTgMT8DCWRmr26xiJ7TNPpTrU4UYfnvORg4kg(vhpgoODgaKX1c4GBqKb2)3UYy4vLIH1ejkgAt13tdVFQ54rpJN(zVH78rPTmLlkXaFhdSWhlrmjh(HL0WPGN)V4MLAWsxilRFJcfzqEKYjLjYONgys(uNj9i7NZ09dpYyvH6U555d1e4pGrNxgVFFIyN6P1LMLtI11R2dvwO(RrG1weaoSrdvRvPj2vLnxA3GJm196VLu3UJE82otnhm6JM9)v4a8Mpn8U7haNJVFVVIC59iLsj3TA1A36FZG2SzcywMqiX2Ud6)0yQaoQvRpYIaWumJjlXxKDmtrYYbYMuYxVgOY2ioIvcASOERutWFsBmv(zRuXOM54(tUFuV77A2RZJD(y)JBnRCpXE1BOQ9m)ZANkPRwA)UFS9bxhMV3KcldkSA778AI38TSMy8Go)tO8XK(FS)qZE3t6C7GVQvdvYF1LIreTC)YfUXVVg4nRUCvht7Gf9B))3qcEpK)UebwHxShFJ6E8wXMQit27h0kf2wi31x1HxUB4lRTpTTOVy4S7VoGZqE9PU8JN6S7m84OxEZIWojCQ3VMEdNxEJb53beW1b8Ob9Vdnz4qA67e92rtNo6rGnakh7Y)8gtz8kRjD8AX9ceQUOXFVu()RK))A1D4sCeWEuq2mnIkVYD1TUEhoQQNqs3j97p0G8AGW(zbDPb55SNW3lKb5oxbnX6XaEaE162UX(OMZAVw29eKFprE3SPntJg96E)YQ7EhD9MhhGW1AM9Z6xba2CLxav(6OGnfMjFdvXErUPbC5DSUZO4R9O8GrsJbY9Xj259eOEhcfVh8BR71kjFTt7(Qp0VXdu)gKlBDXnTUYGScqZRVeHyJ)3p \ No newline at end of file diff --git a/FreshShit/ShardCounter/init.lua b/FreshShit/ShardCounter/init.lua new file mode 100644 index 0000000..f6db3e3 --- /dev/null +++ b/FreshShit/ShardCounter/init.lua @@ -0,0 +1,58 @@ +---@class Stack +---@field maxSize number +---@field values table +aura_env.Stack = { + ---@param maxSize number + ---@return Stack + new = function(maxSize) + local self = setmetatable({}, { + __index = aura_env.Stack + }) + self.maxSize = maxSize + self.values = {} + return self + end, + ---@param self Stack + ---@param value number + Push = function(self, value) + table.insert(self.values, 0, value) + if #self.values > self.maxSize then + table.remove(self.values, #self.values) + end + end, + ---@param self Stack + ---@return number + PerSecond = function(self) + local first = self.values[#self.values] + local last = time() + + if first and last then + return #self.values / (math.max(last - first, 1)) + end + return 0 + end, + ---@param self Stack + ---@param threshold number? + CleanOld = function(self, threshold) + local timeThresh = time() - (threshold or aura_env.config.combatMemoryTime) + -- print(string.format("Clean %d %d", #self.values, timeThresh)) + for i = #self.values, 1, -1 do + if self.values[i] < timeThresh then + table.remove(self.values, i) + end + end + -- print(string.format("Clean after %d", #self.values)) + end, +} + +aura_env.SoulShardStack = aura_env.Stack.new(aura_env.config.soulShardStackMaxSize) +aura_env.AgonyStack = aura_env.Stack.new(aura_env.config.agonyStackMaxSize) +aura_env.Display = "" +aura_env.SoulShards = 0 +aura_env.PlayerName = UnitName("player") + +aura_env.UpdateDisplay = function() + local shards = string.format("%-8s %-7.2f/m", "Shards: ", aura_env.SoulShardStack:PerSecond() * 60) + local agony = string.format("%-8s %-7.2f/m", "Agony: ", aura_env.AgonyStack:PerSecond() * 60) + aura_env.Display = string.format("%s\n%s", shards, agony) +end