(feat/BT2): Introduce inRange trigger and fix missing polling for ignoreInvisible (#78)
(cherry picked from commit 67057d6fddb444dc8c205dc99163e9a1e4056326)
This commit is contained in:
+43
-10
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user