Добавлен Frzctions
Как передавать локальную переменную между функциями внутри триггера без использования глобальной переменной?
В общих чертах понимаю что через take и return но до конца дойти не могу, пожалуйста ответ с подробным примером.
В общих чертах понимаю что через take и return но до конца дойти не могу, пожалуйста ответ с подробным примером.
Принятый ответ
Похожие вопросы:
ответ
Хэш таблица. Удобна и практична. Кстати, не забудь создать глобальную переменную Hash, типа хэш-таблица и при инициализации карты инициализировать Hash, иначе не будет работать.function Trig_HealImp_Timer takes nothing returns nothing local timer t = GetExpiredTimer() local integer hid = GetHandleId(t) local unit caster = LoadUnitHandle(udg_Hash, hid, 0) //Наш юнит хранится по ссылке "0", вытаскиваем его, чтобы с ним работать local integer i = LoadInteger(udg_Hash, hid, 1) //Счетчик local real hp1 = GetUnitState(caster, ConvertUnitState(0)) //текущее здоровье local real hp = GetUnitState(caster, ConvertUnitState(1)) //максимальное здоровье local real chp = (hp/100)*0.8 //значение, на которое лечим юнит if i != 50 then //Срабатывание таймера 0,1. Так как длительность лечения составляет 5 сек, то таймер должен сработать 50 раз. Кстати, исходя из этого, высчитываем chp. set i = i + 1 //Увеличиваем значение счетчика call SetUnitState(caster, ConvertUnitState(0), hp1+chp) //лечим юнит call SaveInteger(udg_Hash, hid, 1, i) //Сохраняем новое значение счетчика. Если этого не будет, счетчик вечно будет равен 0. else //Когда счетчик равен 50, мы останавливаем таймер и чистим Хэш call PauseTimer(t) call DestroyTimer(t) call FlushChildHashtable(udg_Hash, hid) endif set t=null set caster = null endfunction function Trig_HealImp_Actions takes nothing returns nothing local timer t = CreateTimer() //Таймер local integer hid = GetHandleId(t) ) //Id таймера local unit caster =GetTriggerUnit() //юнит, который мы будем лечить, по факту тот, кто активировал способность call SaveUnitHandle(udg_Hash, hid, 0, caster) //сохраняем в Хэш юнит caster с ссылкой "0". call SaveInteger(udg_Hash, hid, 1, 0) //сохраняем значение 0 с ссылкой "1". Это будет счетчик длительности лечения. call TimerStart(t, 0.1, true, function Trig_HealImp_Timer) //запускаем таймер. set t = null set caster = null endfunction
ответ
Конечно - глобальные переменные, хештаблицы, все функции Get в соответствующих потоках.
ответ
всегда по ссылке для handle-типов, всегда по значению для остальных
изменить это невозможно
никак, использовать глобалку, куда сохранять локалку перед нулением
нет, нетуну или аналоги всего этого есть в продвинутых редакторах, не знаю, пусть те, кто ими пользуются, скажут
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Ред. Raised