Добавлен Yury13
Вопрос в следующем. Вот скажем есть триггер, в котором при применении заклинания, воин меняет цвет. Ну, заношу его в локалку, жду вейтом 12 секунд, меняю цвет обратно. Проблема в том, что он не всегда меняет цвет обратно. Хочу попробовать через таймер.
Как сделать это через таймер? Вернее как триггер, который сработает после звонка таймера и будет возвращать цвет, поймет, какому именно юниту нужно вернуть цвет? Если создавать для каждого юнита свой таймер, то как отследить его звонок, ведь в событиях есть ли срабатывание конкретного таймера?
Как сделать это через таймер? Вернее как триггер, который сработает после звонка таймера и будет возвращать цвет, поймет, какому именно юниту нужно вернуть цвет? Если создавать для каждого юнита свой таймер, то как отследить его звонок, ведь в событиях есть ли срабатывание конкретного таймера?
Принятый ответ
Ну если у тебя через локалку что-то неправильно иногда работает, значит просто у тебя где-то ошибка (или ты вообще делаешь это не так).
Для того что бы работать парой таймер+юнит впринципе то больше ничего и не нужно - таймер и сам юнит. Но если у тебя должно запускаться параллельно несколько точно таких же таймеров, то тут может подойти массив таймеров (и массив юнитов). При срабатывании одного из таймеров ты можешь ссылаться на юнита записанного под тем же индексом массива ( unit[X] и timer[X] соответственно).
А ещё в триггер можно добавлять события на срабатывания новых таймеров.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
function Timer takes takes nothing returns nothing
local timer t = GetExpiredTimer() создаём локальную переменную таймера и присваеваем ей истёкший таймер
local integer id = GetHandleId(t) узнаём id этого таймера
local unit test = LoadUnitHandle(udg_hash, id, 1) загружаем юнита-цель, если это нужный таймер(id васё определит)
call UnitAddSleepPerm( test, false ) будим нужного юнита
endfunction
local timer t = CreateTimer() создаём локальный таймер
local integer id = GetHandleId(t) находим id таймера
local unit test = GetSpellTargetUnit() берём юнита-цель способности
TimerStart(t, 10, false, Timer) создаём таймер на 10 сек и активируем функцию по истечению тайсера
call UnitAddSleepPerm( test, true ) приказваем юнита-цель уснуть
SaveUnitHandle(udg_hash, id, 1, test) сохраняем юнита-цель в таблице по id таймера
endfunction
Отредактирован Ельнур
забыл удалить таймер и очистить хеш иначе через 5 минут все залагает