call TriggerRegisterTimerEvent(t,time,true)
есть ли функция по изменению значения таймера?
чтобы он тикал не time=1 а time=2
или только через удаление и создание нового тригера?
call DisableTrigger(t)
call TriggerRemoveAction(t, action)
set t=CreateTrigger()
call TriggerRegisterTimerEvent(t,time,true)
set action=TriggerAddAction(t,function Main)

а если мы используем DisableTrigger(t) + TriggerRemoveAction(t) + DestroyTrigger(t) - то будет правильно и без утечек?
Можно просто TriggerRemoveAction, потом DestroyTrigger. Если нет действий, а только условия, то тогда сразу DestroyTrigger.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Этот комментарий удален
8
Перезапустить сам таймер с новым временем через TimerStart()
UPD: А... это не то. По этой же причине я сам отказался от использования такого триггера, чтобы не морочить себе голову.
Ответы (1)
14
TimerStart()
для периодики он не годится, т.к. пауза тупо не работает:
ResumeTimer​
Has no effect if passed timer is running. If passed timer is paused or has expired, launches it for TimerGetRemaining, and after this time is elapsed, launches it again for TimerGetTimeout. After that passed timer is stopped even if it is periodic.

По этой же причине я сам отказался от использования такого триггера, чтобы не морочить себе голову.
альтернатив то по сути нету
самописные ещё более заморочеголовые чем нативки
26
Поясни, а чем тебе не подходит обычный таймер?
Ответы (5)
14
Поясни, а чем тебе не подходит обычный таймер?
во-первых периодический таймер нельзя запаузить, а потом включить работать дальше (без костылей)
во-вторых изменение времени в нём же не будет отличаться по сути от тригера? т.е. в таймере тоже надо заново его объявлять если надо сменить периодичность таймера, да?
23
host_pi, а как же нативки PauseTimer(t) И ResumeTimer(t) ? По крайней мере первая работает точно, испытывал
28
host_pi, таймер ты можешь всегда перезапустить с нужным временем, а триггер только пересоздать.
Причём я думаю, что отключение триггера не останавливает ивент-таймер, он дальше тикает, просто не запускает условия и действия. Это легко проверить: стартануть триггер в периодом в 5с, отключить его за 1с до тика, включить после 1с от тика. Триггер должен сработать после 4с, а не через 1с.
26
host_pi, периодический триггер в отличии от таймера будет молотить всю игру, независимо от того включен ли триггер. Тебя это устраивает?
13
Просто создаем real timeEnd типа и сохраняем в ХТ на какой-нибудь хэндл и выгружаем, меняем значение выгружая из ХТ где то и сохраняем новое значение, также с имитацией остановкой можно сохранить через boolean или обзавестись глобалками и менять их значения. Понятно что будет висеть тикающий таймер, но наверное что бы нагрузить игру это довольно много надо таких таймеров-пустышек сделать.
28
можешь пересоздать триггер, можешь юзать переменную для этого, можешь юзать обычный таймер, который запустит функцию, которая экзекютнет другую функцию, чтобы можно было юзать вещи вроде TriggerSleepAction
14
PT153: таймер ты можешь всегда перезапустить с нужным временем
EugeAl: а как же нативки PauseTimer(t) И ResumeTimer(t) ? По крайней мере первая работает точно, испытывал

PT153:а триггер только пересоздать.
получается, из простых решений - ответ только тот что указан в шапке темы
это нужно было для радужного текста, в принципе он уже релизнут итак на этом решении

PT153: Причём я думаю, что отключение триггера не останавливает ивент-таймер, он дальше тикает
Extremator: периодический триггер в отличии от таймера будет молотить всю игру, независимо от того включен ли триггер. Тебя это устраивает?
даже если DisableTrigger() + TriggerRemoveAction() ?
а какая есть альтернатива то?
Ответы (5)
28
даже если DisableTrigger() + TriggerRemoveAction() ?
Так это ивент-таймер не удалит. Чтобы удалить ивенты у триггера, нужно триггер удалить.
а какая есть альтернатива то?
Обычный таймер и есть альтернатива. Как я уже сказал, ты его всегда можешь перезапустить с нужным тебе временем.
14
PT153: Чтобы удалить ивенты у триггера, нужно триггер удалить.
а если мы используем DisableTrigger(t) + TriggerRemoveAction(t) + DestroyTrigger(t) - то будет правильно и без утечек?
или можно просто DestroyTrigger(t)?
PT153: Обычный таймер и есть альтернатива
то есть делать единоразовый непериодический таймер и каждые 0.1 сек его отлавливать как истёкший, чтобы заного его запустить на следующие 0.1 сек?
либо делать периодический таймер, но в случае паузы вручную отлавливать натиканное время и потом это время докармливать другому периодическому таймеру чтобы он продолжил тикать с этого же места?
28
host_pi, просто запускаешь периодический таймер на Х, в какой-то момент запускаешь тот же таймер на TimerGetRemaining время в функцию, которая запустит оригинальный колбек, затем перезапустит таймер с новым периодом. Либо сразу перезапускаешь таймер с новым периодом.
28
а если мы используем DisableTrigger(t) + TriggerRemoveAction(t) + DestroyTrigger(t) - то будет правильно и без утечек?
Можно просто TriggerRemoveAction, потом DestroyTrigger. Если нет действий, а только условия, то тогда сразу DestroyTrigger.
Принятый ответ
28
Как вариант, можно периодический таймер запускать в такой колбек, который проверяет привязанный период. Если TimerGetTimeout совпадает с этим числом, то просто вызывается другой колбек. Если же числа различаются, то тогда после вызова другого колбека таймер перезапускается с новым периодом.
38
Или написать свой task scheduler, который дергается 60 раз в секунду, дергая нужные ручки и меняя нужные таймстампы, вызывая таски с нужной периодичностью
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.