После одного-двух срабатываний, таймер udg_t паузится насовсем, и ...
...
...и всё
function t3a takes nothing returns nothing
    if udg_r < 3.0 then
    set udg_r = udg_r + 0.5
    call BJDebugMsg(R2S(udg_r)+" = udg_r")
    else
    call PauseTimer(udg_t)
    call BJDebugMsg("Reflect Ready & Timer Paused")
    endif
endfunction

function t2a takes nothing returns nothing
    local unit u = GetEventDamageSource()
    local real r = GetEventDamage()
    call BJDebugMsg(GetUnitName(u)+" = Attacker")
    call BJDebugMsg(R2S(r)+" = Damage")
    if udg_r >= 3.0 then 
    call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl",u,"origin"))
    call UnitDamageTarget(gg_unit_H000_0000,u,r*5,false, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNIVERSAL, WEAPON_TYPE_WHOKNOWS)
    call BJDebugMsg("Reflected:"+R2S(r*5))
    call ResumeTimer(udg_t)
    set udg_r = 0
    endif
    set u = null
    set r = 0
endfunction

//===========================================================================
function InitTrig_t2 takes nothing returns nothing
    local unit u = gg_unit_H000_0000
    set gg_trg_t2 = CreateTrigger()
    call TriggerRegisterUnitEvent(gg_trg_t2,u,EVENT_UNIT_DAMAGED)
    call TimerStart(udg_t,0.5,true,function t3a)
    call TriggerAddAction( gg_trg_t2, function t2a )
endfunction
Проблема в паузе/анпаузе таймера, в логических условиях всё (вроде) верно, но стопается на одном и том же месте.
Могу приложить карту.

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

PT153:
Вспомнил про один баг. Есть сделать PauseTimer() на периодический таймер, а потом на этой таймер использовать ResumeTimer(), то таймер повторит свой цикл лишь раз, а потом остановится.
сам не пользуюсь ResumeTimer, но щас проверил, действительно не работает что-то. Видимо, это работает только тогда, когда таймер не до конца дошел.
можно обойтись и без ResumeTimer
понимаю, ты хочешь сделать какое-то ограничение после возвращения урона. Спустя 3 секунды возвратка может снова возвращать урон.
Можно было сделать по-другому.
Еще не понимаю, зачем нам нужен периодический таймер.
  1. можем логическую переменную b завести и таймер t
  2. нанес противник урон = проверяем логическую переменную, если истина, запускаем одноразовый таймер, и ставим ложь в логической переменной = false
if b then 
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.?mdl",u,"origin"))
call UnitDamageTarget(udg_u,u,r*5,false, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNIVERSAL, WEAPON_TYPE_WHOKNOWS)
call BJDebugMsg("Reflected:"+R2S(r*5))
call TimerStart(udg_t,0.5,false,function t3a)
set b = false
endif
  1. когда таймер запустится
function t3a takes nothing returns nothing
    call PauseTimer(udg_t)
    set b = true
endfunction
думаю все что надо это call ResumeTimer() заменить на call TimerStart()
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
19
6 лет назад
0
Похожие вопросы:

ответ
Спасибо всем за ответы и пояснения! Закрываю флудильню :с

1
18
6 лет назад
Отредактирован Hodor
1
А нафига давать таймеру паузу если там всё равно if udg_r < 3.0 then
Тем более что период у таймера 0.5, а это значит нагрузки ваще 0
1
27
6 лет назад
Отредактирован MpW
1
PT153:
Вспомнил про один баг. Есть сделать PauseTimer() на периодический таймер, а потом на этой таймер использовать ResumeTimer(), то таймер повторит свой цикл лишь раз, а потом остановится.
сам не пользуюсь ResumeTimer, но щас проверил, действительно не работает что-то. Видимо, это работает только тогда, когда таймер не до конца дошел.
можно обойтись и без ResumeTimer
понимаю, ты хочешь сделать какое-то ограничение после возвращения урона. Спустя 3 секунды возвратка может снова возвращать урон.
Можно было сделать по-другому.
Еще не понимаю, зачем нам нужен периодический таймер.
  1. можем логическую переменную b завести и таймер t
  2. нанес противник урон = проверяем логическую переменную, если истина, запускаем одноразовый таймер, и ставим ложь в логической переменной = false
if b then 
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.?mdl",u,"origin"))
call UnitDamageTarget(udg_u,u,r*5,false, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNIVERSAL, WEAPON_TYPE_WHOKNOWS)
call BJDebugMsg("Reflected:"+R2S(r*5))
call TimerStart(udg_t,0.5,false,function t3a)
set b = false
endif
  1. когда таймер запустится
function t3a takes nothing returns nothing
    call PauseTimer(udg_t)
    set b = true
endfunction
думаю все что надо это call ResumeTimer() заменить на call TimerStart()
Принятый ответ
0
17
6 лет назад
0
Steal nerves, Учимся потихоньку)
Чтобы оставить комментарий, пожалуйста, войдите на сайт.