Делаю способность, которая на время даёт юниту-цели пассивную абилку. При использовании добавляю её юниту через UnitAddAbility, затем запускаю таймер и по его истечении - удаляю. Проблема возникает, когда я накладываю эту способность на юнита повторно, до окончания времени действия прошлой. Старый таймер удаляет пассивку, наложенную заново. Но как сделать проверку, запущены ли для одного юнита несколько подобных таймеров? Чтобы удалять пассивку только тогда, когда истекает последний из этих таймеров?
function TimerFunc takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer h = GetHandleId(t)
local unit u = LoadUnitHandle(hash,h,1)
call UnitRemoveAbility( u, 'A06B' )
call DestroyTimer(t)
call FlushChildHashtable(hash,h)
set t = null
set u = null
endfunction
function MyAbility takes nothing returns nothing
local unit u = GetSpellTargetUnit()
local timer t = CreateTimer()
local integer h = GetHandleId(t)
call UnitAddAbility( u, 'A06B' )
call SaveUnitHandle(hash,h,1,u)
call TimerStart(t, 25.00, false, function TimerFunc)
set u = null
set t = null
endfunction
Принятый ответ
делаю в таких способностях таким таймерам малый период, время остановки определяю через перезаписываемую целочисленную
^ метод Фрога
в MyAbility проверяй есть ли уже абилка 'A06B' у этого юнита
и если есть - ищи таймер и меняй ему время на новое (опять 25 сек - обновление)
и если есть - ищи таймер и меняй ему время на новое (опять 25 сек - обновление)
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован ClotPh
Отредактирован Extremator
и если есть - ищи таймер и меняй ему время на новое (опять 25 сек - обновление)
1.глобалки:если добавляеться абилка а таймер работает то обновляем таймер
2.структуры:можно 1 таймером отслеживать всё всё и на всех юнитах
Отредактирован Diaboliko
элсо, не бурите мозг, вариант с добавлением абилки самый верный. Если не хотите делать много таймеров - пилите один глобальный
Отредактирован Тимур
только если времени может быть на ту же пассивку меньше
ledoed:
Отредактирован ClotPh
Отредактирован MpW
TimerGetRemaining - сколько осталось (уменьшается до нуля)
TimerGetTimeout - на сколько запущен таймер (заданное значение не меняется короче)
Отредактирован Clamp
Логика работы описана в коде ниже, я не стал переделывать под конкретный случай (хотя внёс пару доп. комментов), всё и так понятно.