Добавлен 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
Ред. Raised
Raised:
Ред. Frzctions
Выбираются войска из группы которые являются не союзниками кастера, и от лица созданного юнита (а именно от лица локальной переменной) наносится урон по формуле.
Всем союзникам вокруг созданного юнита восстанавливает здоровье по формуле.
Спец эффект вешается на созданного юнита (и тоже заносится в локальную переменную).
quq_CCCP, вот по этому я и прошу, ответить сугубо по вопросу об локальной переменной. Что бы не залезать в дебри. С условиями и прочими действиями я разберусь потом. В случае смерти юнита при таргет способности или пассивного эффекта от триггерного урона, герой встанет. Не знаю уж почему и как, но так и выходит, так что приходится создавать доп юнита, что бы от его лица наносился урон.
Пишу последний раз "пожалуйста дайте ответ на вопрос заданный в начале темы, с примером" - если у вас нет ответа или желания делать пример, пропустите тему мимо.
Этот оффтоп (да спросить зачем юнит или эффект это оффтоп, так как не имеет никакого отношения к вопросу в теме, уже не говоря про то, что я читал..), совершенно мне не помогает.