Backport event TRIGGER:x support from mainline
https://github.com/WeakAuras/WeakAuras2/commit/3ab97ddce48e6ba46b49a7fdb36a4efa2d1c935b#diff-06c2316487fbaca0f482a162e763ad96ce5624a012a6d5417653b2068d144dfdR119
This commit is contained in:
@@ -72,6 +72,7 @@ local timer = WeakAuras.timer;
|
||||
local events = {}
|
||||
local loaded_events = {}
|
||||
local loaded_unit_events = {};
|
||||
local watched_trigger_events = Private.watched_trigger_events
|
||||
local loaded_auras = {}; -- id to bool map
|
||||
local timers = WeakAuras.timers;
|
||||
|
||||
@@ -711,6 +712,10 @@ local function RunTriggerFunc(allStates, data, id, triggernum, event, arg1, arg2
|
||||
end
|
||||
end
|
||||
end
|
||||
if updateTriggerState and watched_trigger_events[id] and watched_trigger_events[id][triggernum] then
|
||||
-- if this trigger's udpates are requested to be sent into one of the Aura's custom triggers
|
||||
Private.AddToWatchedTriggerDelay(id, triggernum)
|
||||
end
|
||||
return updateTriggerState;
|
||||
end
|
||||
|
||||
@@ -788,6 +793,31 @@ function WeakAuras.ScanEventsInternal(event_list, event, arg1, arg2, ... )
|
||||
end
|
||||
end
|
||||
|
||||
function Private.ScanEventsWatchedTrigger(id, watchedTriggernums)
|
||||
Private.StartProfileAura(id);
|
||||
Private.ActivateAuraEnvironment(id);
|
||||
local updateTriggerState = false
|
||||
for _, wathcedTrigger in ipairs(watchedTriggernums) do
|
||||
if watched_trigger_events[id] and watched_trigger_events[id][wathcedTrigger] then
|
||||
local updatedTriggerStates = WeakAuras.GetTriggerStateForTrigger(id, wathcedTrigger)
|
||||
for observerTrigger in pairs(watched_trigger_events[id][wathcedTrigger]) do
|
||||
local data = events and events[id] and events[id][observerTrigger]
|
||||
local allstates = WeakAuras.GetTriggerStateForTrigger(id, observerTrigger)
|
||||
if data and allstates and updatedTriggerStates then
|
||||
if RunTriggerFunc(allstates, data, id, observerTrigger, "TRIGGER", wathcedTrigger, updatedTriggerStates) then
|
||||
updateTriggerState = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if (updateTriggerState) then
|
||||
Private.UpdatedTriggerState(id)
|
||||
end
|
||||
Private.StopProfileAura(id)
|
||||
Private.ActivateAuraEnvironment(nil)
|
||||
end
|
||||
|
||||
local function AddFakeTime(state)
|
||||
if state.progressType == "timed" then
|
||||
if state.expirationTime and state.expirationTime ~= math.huge and state.expirationTime > GetTime() then
|
||||
@@ -985,6 +1015,9 @@ function GenericTrigger.Rename(oldid, newid)
|
||||
end
|
||||
end
|
||||
|
||||
watched_trigger_events[newid] = watched_trigger_events[oldid]
|
||||
watched_trigger_events[oldid] = nil
|
||||
|
||||
Private.EveryFrameUpdateRename(oldid, newid)
|
||||
end
|
||||
|
||||
@@ -1199,6 +1232,7 @@ end
|
||||
function GenericTrigger.Add(data, region)
|
||||
local id = data.id;
|
||||
events[id] = nil;
|
||||
watched_trigger_events[id] = nil
|
||||
|
||||
for triggernum, triggerData in ipairs(data.triggers) do
|
||||
local trigger, untrigger = triggerData.trigger, triggerData.untrigger
|
||||
@@ -1358,10 +1392,12 @@ function GenericTrigger.Add(data, region)
|
||||
local hasParam = false
|
||||
local isCLEU = false
|
||||
local isUnitEvent = false
|
||||
local isTrigger = false
|
||||
for i in event:gmatch("[^:]+") do
|
||||
if not trueEvent then
|
||||
trueEvent = string.upper(i)
|
||||
isCLEU = trueEvent == "CLEU" or trueEvent == "COMBAT_LOG_EVENT_UNFILTERED"
|
||||
isTrigger = trueEvent == "TRIGGER"
|
||||
elseif isCLEU then
|
||||
local subevent = string.upper(i)
|
||||
if Private.IsCLEUSubevent(subevent) then
|
||||
@@ -1381,6 +1417,17 @@ function GenericTrigger.Add(data, region)
|
||||
|
||||
trigger_unit_events[i] = trigger_unit_events[i] or {}
|
||||
tinsert(trigger_unit_events[i], trueEvent)
|
||||
elseif isTrigger then
|
||||
local requestedTriggernum = tonumber(i)
|
||||
if requestedTriggernum then
|
||||
if watched_trigger_events[id] and watched_trigger_events[id][triggernum] and watched_trigger_events[id][triggernum][requestedTriggernum] then
|
||||
-- if the request is reciprocal (2 custom triggers request each other which would cause a stack overflow) then prevent the reciprocal one being added.
|
||||
elseif requestedTriggernum and requestedTriggernum ~= triggernum then
|
||||
watched_trigger_events[id] = watched_trigger_events[id] or {}
|
||||
watched_trigger_events[id][requestedTriggernum] = watched_trigger_events[id][requestedTriggernum] or {}
|
||||
watched_trigger_events[id][requestedTriggernum][triggernum] = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if isCLEU then
|
||||
@@ -1395,6 +1442,8 @@ function GenericTrigger.Add(data, region)
|
||||
end
|
||||
elseif isUnitEvent then
|
||||
-- not added to trigger_events
|
||||
elseif isTrigger then
|
||||
-- not added to trigger_events
|
||||
else
|
||||
tinsert(trigger_events, event)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user