Делаю способность, которая на время даёт юниту-цели пассивную абилку. При использовании добавляю её юниту через 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 сек - обновление)
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
20
Также как и в случае со станами/инвизами и любыми другими потенциально стакающимися фичами, нужно использовать счетчик. Для станов, инвизов и прочей глобально используемой лабуды - можно использовать переменные в базе данных. Для остальных же случаев - использовать добавление способностей. (накладываешь бафф - если есть у юнита интересующая нас способность-счетчик - увеличить ее лвл, иначе - добавить эту способность)
21
Я просто делаю в таких способностях таким таймерам малый период, время остановки определяю через перезаписываемую целочисленную, а пока таймер идет, периодически передобавляю в нем добавленную способностью способность.
То есть если один таймер закончится и удалит способность, но еще существует другой от подобного добавляющего способность заклинания, он ее практически сразу снова добавит.
P. S. Знаю, что несколько не оптимально по производительности. Зато ОЧЕНЬ легко в реализации и понимании.
26
что бы определять какие таймеры запущены, тебе их нужно где то запоминать, естественно.
26
делаю в таких способностях таким таймерам малый период, время остановки определяю через перезаписываемую целочисленную
^ метод Фрога
в MyAbility проверяй есть ли уже абилка 'A06B' у этого юнита
и если есть - ищи таймер и меняй ему время на новое (опять 25 сек - обновление)
Принятый ответ
17
тут я вижу 2 варианта
1.глобалки:если добавляеться абилка а таймер работает то обновляем таймер
2.структуры:можно 1 таймером отслеживать всё всё и на всех юнитах
26
два варианта
  1. Глобалки
  2. Структуры, которые строятся на глобалках
Ммм... что же выбрать
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.