Как передавать локальную переменную между функциями внутри триггера без использования глобальной переменной?
В общих чертах понимаю что через 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
Строить код так что бы ничего не переносит.... ДА ТЫ ЧТО? СЕРЬЕЗНО? А на кой черт ты мне это пишешь, у тебя глаз нету, прочитать вопрос который я задал уже раз 5 в теме? Или ты правда издеваешься?
21
Правда референс на таблицу таки придется записать в глобалку.
2
8gabriel8, вот мне тоже знаний не хватило, потому я пошел сюда и завал вопрос об работке как раз через take и return в ответ что получил, ты видел.
32
Frzctions, ну ты не представляешь синтаксис jaas'a? Или что тебе непонятно, функция может принимать аргументы или возвращать, но возвращает всегда лишь 1 аргумент.
2
Ладно, ребят это уже даже не смешно, пойду почитаю руководство по другим языкам, может по аналогии пойму. Закрываемся.
p.s. quq_CCCP, иди ты задницу а?
2 пункта и 4 часа тишины от Raised: 2.2 (троллинг)
32
Frzctions, ну ок, иди читай, с этого и следовало начинать =)
21
library myShitCode
    function myShitFunction1 takes nothing returns unit
        local unit = myShitUnit
        return myShitUnit
    endfunction

    function myShitFunction2 takes unit returns nothing
        //your shit actions
    endfunction

    call myShitFunction2( myShitFunction1())
    //call myShitFunctionN(myShitFunction3(myShitFunction2( myShitFunction1())))
endlibrary
26
Как передавать локальную переменную между функциями внутри триггера без использования глобальной переменной?
вам выше уже кинули ответ примерный с кодом
если сугубо отвечать на ваш вопрос из шапки, то
Как передавать локальную переменную между функциями внутри триггера без использования глобальной переменной?
триггера ка такового нет, поэтому некорректно несколько выражаться "внутри триггера", есть функции, область видимости у них вверх идет, функция снизу видит только то что выше нее
соотвественно передавать ты можешь так
	function A takes unit u returns real
		return GetUnitFlyingHeight(u)
	endfunction
	
	
	
	...
	
	function B takes nothing returns nothing
		call A(GetTriggerUnit())
		...
		dosomething
	endfunction 
вызовет А с юнитом который ты туда закинул, вернет его полет, а вот из А ты не сможешь ничего вызвать что ниже идет
21
область видимости у них вверх идет
Это не область видимости. Прежде чем вызывать функцию, ее нужно декларировать (объявить?). Автор доставляет. Даже кажется что он надеется самостоятельно понять как работать с Jass. И это не хорошо. Незачем самостоятельно идти по полю, усеянному граблями, когда под рукой у тебя комьюнити и возможность получить инсайд о лучших практиках в почти любом вопросе. Времени не жалко?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.