Добавлен 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-типов, всегда по значению для остальных
изменить это невозможно
никак, использовать глобалку, куда сохранять локалку перед нулением
нет, нетуну или аналоги всего этого есть в продвинутых редакторах, не знаю, пусть те, кто ими пользуются, скажут
`
ОЖИДАНИЕ РЕКЛАМЫ...
Показан только небольшой набор комментариев вокруг указанного.
Перейти к актуальным.
2
Показать
XGM Bot
6 лет
2
Показать
Похожие вопросы:
- Передача параметров в Таймер
ответ
Sumert:
- передача параметров в групу
ответ
quq_CCCP:
- Введение в JASS новичка (меня)
ответ
DracoL1ch:
Поиск по всем ресурсам на сайте
Принятый ответ
0
Показать
8gabriel8
6 лет
0
Показать
Если триггер один, там же просто указывается локалка, как если бы это была глобалка. Разве нет?
0
Показать
SсRealm
6 лет
0
Показать
8gabriel8:
Он не хочет глобалки вообще.Мне кажется ему нужно передать значение локальной между триггерами
4
Показать
Raised
6 лет
4
Показать
Локальная переменная - ссылка на игровой объект, доступная только внутри функции. Как вариант в конце функции возвращать ее значение (returns yourType). Дальше использовать эту функцию в качестве принимаемого аргумента другой функции, а другую - в третьей. Но это как минимум странный подход.
Лучше опиши задачу, которую ты пытаешься решить, а мы подскажем наиболее оптимальное решение.
0
Показать
SсRealm
6 лет
0
Показать
Raised:
Ниче не понял. Локальная в другой триггер не перейдет или будет утечка.Что с ней делать,если не копировать значение в глобалку?
0
Показать
PT153
6 лет
0
Показать
SсRealm:
Какая утечка? Ты знаешь, что такое memory leaks (утечки)?
Показан только небольшой набор комментариев вокруг указанного.
Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.