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

на время регистрации события твоя переменная равна null
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
26
У тебя есть тригоер с событием истечения этого твоего jass-таймера? Или функция, которая вызывается его отрабатыванием? Если нет, то без прямого указания через переменную ты на него никак не сошлёшься.
3
Extremator, Примерно, вот так пытаюсь сделать как в гуи)
Загруженные файлы
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
Принятый ответ
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)  //Запускаю таймер
начинать внутри инициализации
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
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.