Есть строка call TriggerSleepAction(0.30), во время действия спелла, т.е. мне нужна пауза в 0.30 сек, после чего остальные действия начали работу, так вот, как с помощью таймера, сделать паузу на 0.30 сек?

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

переходишь на jass? немного посмотри примеры и почитай статьи. набери в поиск таймеры + хэш-таблица и прочее
раскрыть
На триггерах это будет глупо и неудобно. Нужно создать или хотя бы иметь существующий таймер, потом запустить в определенный момент. Но для начала нужно сохранить данные, с которыми будешь взаимодействовать (например, юнит). К примеру дали пассивный скилл, через 5 минут удалил.
есть несколько способов, это запускать таймер. А другим триггером отлавливать с помощью события завершения времени таймера. Или вызывать напрямую функцию.
используется нативка
native TimerStart takes timer whichTimer, real timeout, boolean periodic, code handlerFunc returns nothing
или это. здесь функцию не вызывают, а просто запускают таймер. Завершение таймера отлавливают с помощью другого триггера. Очень неудобно
function StartTimerBJ takes timer t, boolean periodic, real timeout returns timer
    set bj_lastStartedTimer = t
    call TimerStart(t, timeout, periodic, null)
    return bj_lastStartedTimer
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
27
7 лет назад
Отредактирован MpW
0
переходишь на jass? немного посмотри примеры и почитай статьи. набери в поиск таймеры + хэш-таблица и прочее
раскрыть
На триггерах это будет глупо и неудобно. Нужно создать или хотя бы иметь существующий таймер, потом запустить в определенный момент. Но для начала нужно сохранить данные, с которыми будешь взаимодействовать (например, юнит). К примеру дали пассивный скилл, через 5 минут удалил.
есть несколько способов, это запускать таймер. А другим триггером отлавливать с помощью события завершения времени таймера. Или вызывать напрямую функцию.
используется нативка
native TimerStart takes timer whichTimer, real timeout, boolean periodic, code handlerFunc returns nothing
или это. здесь функцию не вызывают, а просто запускают таймер. Завершение таймера отлавливают с помощью другого триггера. Очень неудобно
function StartTimerBJ takes timer t, boolean periodic, real timeout returns timer
    set bj_lastStartedTimer = t
    call TimerStart(t, timeout, periodic, null)
    return bj_lastStartedTimer
endfunction
Принятый ответ
0
32
7 лет назад
0
Таймер - и вейт действуют в корне различно, если TriggerSleepAction - остановит поток выполнения триггера (увы тока триггера или екзекута из триггера), таймер запустит новый поток по истечению указанного времени.
По сути замена вейта таймером заключается в разбивание твоего кода на N функций, в которых будут действия до и после, а так же аттачей данных к таймеру.
Читайте статьи про хештаблицу.
0
14
7 лет назад
0
call SetUnitAnimation( U_C, "stand" )
call TriggerSleepAction( 0.30 )
call UnitAddItemByIdSwapped('I01I', U_C)
Допустим фрагмент кода, что мне нужно вставить вместо SleppAction, чтобы была точно такая же пауза на .30 сек, я знаю что такое таймер, мне просто нужна строка, которую я должен буду вставить
Steal nerves:
переходишь на jass? немного посмотри примеры и почитай статьи. набери в поиск таймеры + хэш-таблица и прочее
раскрыть
На триггерах это будет глупо и неудобно. Нужно создать или хотя бы иметь существующий таймер, потом запустить в определенный момент. Но для начала нужно сохранить данные, с которыми будешь взаимодействовать (например, юнит). К примеру дали пассивный скилл, через 5 минут удалил.
есть несколько способов, это запускать таймер. А другим триггером отлавливать с помощью события завершения времени таймера. Или вызывать напрямую функцию.
используется нативка
native TimerStart takes timer whichTimer, real timeout, boolean periodic, code handlerFunc returns nothing
или это. здесь функцию не вызывают, а просто запускают таймер. Завершение таймера отлавливают с помощью другого триггера. Очень неудобно
function StartTimerBJ takes timer t, boolean periodic, real timeout returns timer
    set bj_lastStartedTimer = t
    call TimerStart(t, timeout, periodic, null)
    return bj_lastStartedTimer
endfunction
call SetUnitAnimation( U_C, "stand" )
call TriggerSleepAction( 0.30 )
call UnitAddItemByIdSwapped('I01I', U_C)
Допустим фрагмент кода, что мне нужно вставить вместо SleppAction, чтобы была точно такая же пауза на .30 сек, я знаю что такое таймер, мне просто нужна строка, которую я должен буду вставить
0
20
7 лет назад
Отредактирован biridius
0
Не выйдет, нельзя в одну строку, только разбивать на функции (как уже сказал quq_CCCP)
Стандартный вейт это как раз попытка близзард сделать таймер "в одну строку". Там сначала запускается таймер, а затем цикл через TriggerSleepAction каждые 0.1 сек. проверяет не истек ли таймер.
И насколько я помню TriggerSleepAction отсчитывает время даже когда игра на паузе (например в меню), что может вызвать странности
0
14
7 лет назад
0
biridius:
Не выйдет, нельзя в одну строку, только разбивать на функции (как уже сказал quq_CCCP)
Стандартный вейт это как раз попытка близзард сделать таймер "в одну строку". Там сначала запускается таймер, а затем цикл через TriggerSleepAction каждые 0.1 сек. проверяет не истек ли таймер.
Единственное что мне приходит на ум, это запуск сингл таймера с действиями внутри, так?
0
20
7 лет назад
Отредактирован biridius
0
внутри то есть в функции запускаемой таймером
код
function AfterWait takes nothing returns nothing
call DestroyTimer(GetExpiredTimer())
call UnitAddItemByIdSwapped('I01I', U_C)
endfunction
...
call SetUnitAnimation( U_C, "stand" )
call TimerStart(CreateTimer(), 0.3, false, function AfterWait)
...
0
14
7 лет назад
0
biridius:
внутри то есть в функции запускаемой таймером
код
function AfterWait takes nothing returns nothing
call DestroyTimer(GetExpiredTimer())
call UnitAddItemByIdSwapped('I01I', U_C)
endfunction
...
call SetUnitAnimation( U_C, "stand" )
call TimerStart(CreateTimer(), 0.3, false, function AfterWait)
...
Благодарю
Чтобы оставить комментарий, пожалуйста, войдите на сайт.