как обновить функцию внутри таймерного периодического триггера?
как заменить внутри Trg_Main "111" на "222" ?
globals
trigger t=CreateTrigger()
string txt="111"
end globals

function Trg_Main takes nothing returns nothing
call BJDebugMsg(txt)
endfunction

function Trg_init takes nothing returns nothing
	call TriggerRegisterTimerEvent(t,1,true)
	call TriggerAddAction(t,function Trg_Main)
endfunction

только вот такое полукостыльное решение?:
function Trg_init takes nothing returns nothing
call DisableTrigger(t)
set t=null
set t=CreateTrigger()
	call TriggerRegisterTimerEvent(t,1,true)
	call TriggerAddAction(t,function Trg_Main)
endfunction

function text222 takes nothing returns nothing
set txt="222"
call Trg_init()
endfunction

Принятый ответ

globals
triggeraction Act = null
endglobals

set Act = TriggerAddAction(t,function Trg_Main)
// когда нужно поменять действие 
call TriggerRemoveAction(t, Act)
set Act = TriggerAddAction(t,function Trg_Main2)
если тебе надо просто текст поменять, просто обновляешь переменную и всё, к чему вся эта возня с отключениями?
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
32
0
зачем тебе триггеры если работать с ними не умеешь?
1
20
1
globals
triggeraction Act = null
endglobals

set Act = TriggerAddAction(t,function Trg_Main)
// когда нужно поменять действие 
call TriggerRemoveAction(t, Act)
set Act = TriggerAddAction(t,function Trg_Main2)
если тебе надо просто текст поменять, просто обновляешь переменную и всё, к чему вся эта возня с отключениями?
Принятый ответ
Ответы (3)
1
15
1
EugeAl,
восхитительно
ещё есть - call TriggerClearActions(t)
я перед созданием темы криво накодил и голая set txt="222" не срабатывала
пришлось городить огород с переопределением тригера
а сейчас и тупо set txt="222" работает
и твоё решение подъехало вторым вариантом
1
27
1
host_pi, оно утекает, потому что нет деструктора в этой функции xgm.guru/p/wc3/Jass-MythBusters#h2.0.8
1
15
1
rsfghd, полезно, значит:
TriggerAddAction и TriggerRemoveAction - твой бро
TriggerClearActions - не твой бро
Чтобы оставить комментарий, пожалуйста, войдите на сайт.