diff --git a/src/AuraTable/AuraTable.lua b/src/AuraTable/AuraTable.lua index 5329d88..2eceb38 100644 --- a/src/AuraTable/AuraTable.lua +++ b/src/AuraTable/AuraTable.lua @@ -384,6 +384,59 @@ function AuraTable:FindAny(spell) return self:FindMy(spell) end +-- FindAnyOf +---@param spells List +---@return Aura +function AuraTable:FindAnyOf(spells) + return spells:reduce(function(acc, cur) + local aura = self:FindAny(cur) + if aura:IsValid() then + return aura, true + end + return acc + end, Bastion.Aura:New()) +end + +-- FindAnyOfMy +---@param spells List +---@return Aura +function AuraTable:FindAnyOfMy(spells) + return spells:reduce(function(acc, cur) + local aura = self:FindMy(cur) + if aura:IsValid() then + return aura, true + end + return acc + end, Bastion.Aura:New()) +end + +-- FindAnyOfTheirs +---@param spells List +---@return Aura +function AuraTable:FindAnyOfTheirs(spells) + return spells:reduce(function(acc, cur) + local aura = self:FindTheirs(cur) + if aura:IsValid() then + return aura, true + end + return acc + end, Bastion.Aura:New()) +end + +-- FindAnyFrom +---@param spells List +---@param source Unit +---@return Aura +function AuraTable:FindAnyFrom(spells, source) + return spells:reduce(function(acc, cur) + local aura = self:FindFrom(cur, source) + if aura:IsValid() then + return aura, true + end + return acc + end, Bastion.Aura:New()) +end + -- Has any stealable aura ---@return boolean function AuraTable:HasAnyStealableAura() diff --git a/src/List/List.lua b/src/List/List.lua index 1921466..28ef98e 100644 --- a/src/List/List.lua +++ b/src/List/List.lua @@ -114,8 +114,12 @@ end ---@return boolean function List:reduce(callback, initialValue) local result = initialValue + local done = false for _, v in ipairs(self._list) do - result = callback(result, v) + result, done = callback(result, v) + if done then + break + end end return result end diff --git a/src/Unit/Unit.lua b/src/Unit/Unit.lua index 8c10a46..581a964 100644 --- a/src/Unit/Unit.lua +++ b/src/Unit/Unit.lua @@ -13,7 +13,7 @@ local Unit = { last_off_attack = 0, last_main_attack = 0, last_combat_time = 0, - ttd_ticker = 0, + ttd_ticker = false, ttd = 0, id = false, } @@ -838,7 +838,7 @@ function Unit:TimeToDie() self.regression_history = {} if self.ttd_ticker then self.ttd_ticker:Cancel() - self.ttd_ticker = nil + self.ttd_ticker = false end return 0 end