1. Создаю глобальный таймер, который был определен через JASS.
  2. Запускаю её.
  3. Пытаюсь запустить другой глобальный триггер через событие "таймер истекает".
Но ничего не происходит.
А если все это проделать с таймером, который был создан через кнопку "X" (ctrl+B), то все работает. Хмм.
Правильно ли я делаю?
Мне хотелось бы избавиться от всех переменных с приставкой "udg_".

на время регистрации события твоя переменная равна null
`
LOADING AD...

Only a small set of comments around the pointed one shown. Go to actual.
3
globals
    timer T = null
endglobals
function TimerGoActions takes nothing returns nothing
    set T = CreateTimer()
    call TimerStart(T, 5, false, null)  //Запускаю таймер
endfunction

function InitTrig_TimerGo takes nothing returns nothing
    set gg_trg_TimerGo = CreateTrigger()
    call TriggerRegisterTimerEventSingle(gg_trg_TimerGo, 0.00)  //Через 0 сек
    call TriggerAddAction(gg_trg_TimerGo, function TimerGoActions)
endfunction

Где-то уже другой триггер:
function TimerEndActions takes nothing returns nothing
    call DisplayTextToForce(GetPlayersAll(), "Hello world!")
endfunction

function InitTrig_TimerEnd takes nothing returns nothing
    set gg_trg_TimerEnd = CreateTrigger()
    call TriggerRegisterTimerExpireEvent(gg_trg_TimerEnd, T)    //Таймер истекает
    call TriggerAddAction(gg_trg_TimerEnd, function TimerEndActions)
endfunction
26
на время регистрации события твоя переменная равна null
Accepted answer
3
Hate, Поразительно) все работает, если начать так:
function TimerGoActions takes nothing returns nothing
    call TimerStart(T, 5, false, null)  //Запускаю таймер
endfunction

function InitTrig_TimerGo takes nothing returns nothing
    set gg_trg_TimerGo = CreateTrigger()
    set T = CreateTimer()
    call TriggerRegisterTimerEventSingle(gg_trg_TimerGo, 0.00)  //Через 0 сек
    call TriggerAddAction(gg_trg_TimerGo, function TimerGoActions)
endfunction

Хмм. Получается, глобальный таймер нужно создавать только при инициализации триггера? А другие типы, например группы (CreateGroup()), можно в любом месте?
11
У тебя была ситуация, что ты инициализировал таймер после того как пытался ему присвоить триггер, который срабатывал бы после него. А надо сначала инициализировать таймер, а затем присвоить ему триггер. А когда ты пишешь, что паразительно, то ты сначала инициализировал все, а только потом начал присвоение. Hate верно пишет тебе. Поэтому нет ничего поразительного.

Более того, ты бы вполне мог свой таймер
call TimerStart(T, 5, false, null)  //Запускаю таймер
начинать внутри инициализации
3
Koladik, Даа, я просто не знал об этом)))
26
Joma, таймеры из глобальных переменных создаются в момент объявления этих самых глобалок (но не всегда), либо в специальном блоке их инициализации (там же и происходит расчет "размерности"). А все триггеры и события к ним создаются несколько позже, поэтому в них уже будут таймеры указанные для регистрации событий. На Jass'е ты просто обходишь эту последовательность прямолинейностью своих действий.
29
На Jass'е ты просто обходишь эту последовательность прямолинейностью своих действий.
У него VJASS.
26
Joma, может стоит уйти от события истечения таймера и указать нужнкю выполняемую функцию по его окончанию, мм?
function TimerEndActions takes nothing returns nothing
    call DisplayTextToForce(GetPlayersAll(), "Hello world!")
endfunction

function TimerGoActions takes nothing returns nothing
    set T = 
    call TimerStart( CreateTimer(), 5., false, function TimerEndAction )
endfunction
3
Extremator, В данном конкретном случае, мне нужно запустить этот таймер через "триггер А", а потом навсегда выключить этот "триггер А". И периодический запускать таймер через другой "триггер Б". Если коротко, "триггер А" первично запускает таймер, а дальше за её повторные запуски берется "триггер Б".

может стоит уйти от события истечения таймера и указать нужнкю выполняемую функцию по его окончанию, мм?
В целом так тоже можно. Тогда все придется сделать одним триггером. И поставить переключатель на входе в триггер (ложь, истина или 1, 0) и который после первого в хода в триггер больше никогда не позволит войти в него снова. А внутри триггера таймер будет играть сам по себе.
В общем, я понял почему изначально мой глобальный таймер не работал. Нужно было создать его при инициализации триггера, чего я не знал)))
Я думал что глобальный таймеры тоже можно как и другие типы, просто объявить и создать где мне удобно и все)))
Only a small set of comments around the pointed one shown. Go to actual.
To leave a comment please sign in to the site.