(feat/BT2): Introduce inRange trigger and fix missing polling for ignoreInvisible (#78)

(cherry picked from commit 67057d6fddb444dc8c205dc99163e9a1e4056326)
This commit is contained in:
NoM0Re
2025-10-24 01:13:13 +02:00
committed by andrew6180
parent 205567502a
commit a1a6c76992
2 changed files with 51 additions and 10 deletions
+43 -10
View File
@@ -99,6 +99,8 @@ local activeGroupScanFuncs = {}
local raidMarkScanFuncs = {}
local pollingScanFuncs = {}
-- Multi Target tracking
local scanFuncNameMulti = {}
local scanFuncSpellIdMulti = {}
@@ -1172,14 +1174,13 @@ local function TriggerInfoApplies(triggerInfo, unit)
return false
end
if triggerInfo.specId then
if not triggerInfo.specId[Private.ExecEnv.GetSpecID(
(select(2, UnitClass(controllingUnit)) or "") ..
(Private.ExecEnv.GetUnitTalentSpec(controllingUnit) or ""))] then
return false
if triggerInfo.specId then
if not triggerInfo.specId[Private.ExecEnv.GetSpecID(
(select(2, UnitClass(controllingUnit)) or "") ..
(Private.ExecEnv.GetUnitTalentSpec(controllingUnit) or ""))] then
return false
end
end
end
if triggerInfo.hostility and WeakAuras.GetPlayerReaction(unit) ~= triggerInfo.hostility then
return false
@@ -1228,6 +1229,10 @@ end
return false
end
if triggerInfo.inRange and not UnitInRangeFixed(unit) then
return false
end
return true
end
@@ -1996,8 +2001,8 @@ Buff2Frame:RegisterEvent("NAME_PLATE_UNIT_ADDED")
Buff2Frame:RegisterEvent("NAME_PLATE_UNIT_REMOVED")
Buff2Frame:RegisterEvent("PLAYER_ENTERING_WORLD")
Buff2Frame:SetScript("OnEvent", EventHandler)
Buff2Frame:SetScript("OnUpdate", function()
Buff2Frame.elapsed = 0
Buff2Frame:SetScript("OnUpdate", function(self, elapsed)
if WeakAuras.IsPaused() then
return
end
@@ -2007,6 +2012,18 @@ Buff2Frame:SetScript("OnUpdate", function()
UpdateStates(matchDataChanged, time)
wipe(matchDataChanged)
end
if next(pollingScanFuncs) then
self.elapsed = self.elapsed + elapsed
if self.elapsed >= 1.0 then
self.elapsed = 0
local deactivatedTriggerInfos = {}
for unit in GetAllUnits("group", true, "PlayersAndPets") do
RecheckActiveForUnitType("group", unit, deactivatedTriggerInfos)
end
DeactivateScanFuncs(deactivatedTriggerInfos)
end
end
Private.StopProfileSystem("bufftrigger2 - OnUpdate")
end)
@@ -2086,6 +2103,7 @@ function BuffTrigger.UnloadAll()
wipe(unitExistScanFunc)
wipe(groupRoleScanFunc)
wipe(groupScanFuncs)
wipe(pollingScanFuncs)
wipe(raidMarkScanFuncs)
wipe(matchDataByTrigger)
wipe(matchDataMulti)
@@ -2140,7 +2158,7 @@ local function LoadAura(id, triggernum, triggerInfo)
end
if triggerInfo.fetchRaidMark then
raidMarkScanFuncs[id] = raidMarkScanFuncs[id] or {}
raidMarkScanFuncs[id] = raidMarkScanFuncs[id] or {}
tinsert(raidMarkScanFuncs[id], triggerInfo)
end
@@ -2149,6 +2167,16 @@ local function LoadAura(id, triggernum, triggerInfo)
tinsert(groupScanFuncs[triggerInfo.unit], triggerInfo)
end
if triggerInfo.inRange then
pollingScanFuncs[id] = pollingScanFuncs[id] or {}
tinsert(pollingScanFuncs[id], triggerInfo)
end
if triggerInfo.ignoreInvisible then
pollingScanFuncs[id] = pollingScanFuncs[id] or {}
table.insert(pollingScanFuncs[id], triggerInfo)
end
matchDataChanged[id] = matchDataChanged[id] or {}
matchDataChanged[id][triggernum] = true
end
@@ -2184,6 +2212,7 @@ function BuffTrigger.UnloadDisplays(toUnload)
groupRoleScanFunc[id] = nil
raidMarkScanFuncs[id] = nil
pollingScanFuncs[id] = nil
for unit, unitData in pairs(matchData) do
for filter, filterData in pairs(unitData) do
@@ -2265,6 +2294,8 @@ function BuffTrigger.Rename(oldid, newid)
groupRoleScanFunc[oldid] = nil
raidMarkScanFuncs[newid] = raidMarkScanFuncs[oldid]
raidMarkScanFuncs[oldid] = nil
pollingScanFuncs[newid] = pollingScanFuncs[oldid]
pollingScanFuncs[oldid] = nil
matchDataChanged[newid] = matchDataChanged[oldid]
matchDataChanged[oldid] = nil
end
@@ -2630,6 +2661,7 @@ function BuffTrigger.Add(data)
local effectiveIgnoreInvisible = groupTrigger and trigger.ignoreInvisible
local effectiveNameCheck = groupTrigger and trigger.useUnitName and trigger.unitName
local effectiveNpcId = (trigger.unit == "nameplate" or trigger.unit == "boss") and trigger.useNpcId and Private.ExecEnv.ParseStringCheck(trigger.npcId)
local effectiveInRange = groupTrigger and trigger.inRange
if trigger.unit == "multi" then
BuffTrigger.InitMultiAura()
@@ -2685,6 +2717,7 @@ function BuffTrigger.Add(data)
ignoreDead = effectiveIgnoreDead,
ignoreDisconnected = effectiveIgnoreDisconnected,
ignoreInvisible = effectiveIgnoreInvisible,
inRange = effectiveInRange,
groupRole = effectiveGroupRole,
raidRole = effectiveRaidRole,
specId = effectiveSpecId,