this is the code for my system.
globals
hashtable hash = InitHashtable()
endglobals
function someFunc takes nothing returns boolean
local trigger t = GetTriggeringTrigger()
local integer h = GetHandleId(t)
local integer counter = LoadInteger(hash, h, 3)
local integer goal = LoadInteger(hash, h, 2)
if counter < goal then
call TriggerExecute(LoadTriggerHandle(hash, h, 1))
set counter = counter + 1
call SaveInteger(hash, h, 3, counter)
else
call DestroyTrigger(LoadTriggerHandle(hash, h, 4))
call FlushChildHashtable(hash, h)
endif
return true
endfunction
function applyTimer takes trigger t, real interval, integer times returns nothing
local trigger newTrigger = CreateTrigger()
local timer tempTimer = CreateTimer()
call SaveTriggerHandle(hash, GetHandleId(newTrigger), 1, t)
call SaveInteger(hash, GetHandleId(newTrigger), 2, times)
call SaveInteger(hash, GetHandleId(newTrigger), 3, 0)
call SaveTriggerHandle(hash, GetHandleId(newTrigger), 4, newTrigger)
call TriggerRegisterTimerExpireEvent(newTrigger, tempTimer )
call TriggerAddCondition(newTrigger, function someFunc )
call TriggerAddCondition(newTrigger, Condition(function someFunc ))
call TimerStart(tempTimer, interval, true, null)
endfunction
Here are some spells I did using this system.
https://www.youtube.com/watch?v=8eStAaYf67U
I still have the map if you want to test.