Добрый день. Осваиваю Lua и возник очень банальный вопрос, на который не смог найти ответ. Заранее прошу прощения. Есть ли способ связать глобальные переменные, объявленные в редакторе триггеров с Custom Script? Обычное обращение по имени не работает у меня. Везде в примерах используются локалки, а у меня ситуация, когда мне нужна глобалка и желательно объявленная в обычном редакторе. Заранее спасибо!

udg_variable_name
Все глобалки всегда начинаются с udg_.
Ещё можно редактором скрипт карты вытащить, там весь её код будет, в том числе и определение глобальных переменных.
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

ответ
В свойствах убери заголовочный файл и в линкере с настройками поиграй
ответ
Ответ выше - для стандартного редактора WE. Однако, рекомендуется использовать с Lua внешний редактор кода и внешний же сборщик карты. Это чревато маленьким неудобством в виде необходимости запускать карту на проверку только из внешней программы т.к. запуск из WE будет без значительной части кода в карте, но дает огромное преимущество в виде несравнимо более удобной работы с кодом.
К сожалению, пока слишком мало информации об этом на сайте.
Вариант NazarPunk, пока без сборки карты, код придется копировать в карту вручную.

Мой вариант, пока не рабочий т.к. перед релизом нужно исправить несколько багов, но включает в себя и работу с кодом и сборку карты, не нужно вручную копировать код в карту.
Даже здесь на сайте есть еще пара вариантов, но мне лень их искать
И немного саморекламы, как выглядели бы ответы на вопрос выше при использовании моего тулсета
  1. Использовать макрос RAW('A0E5'), который превратит равкод в число при сборке карты.
  2. Инжект в функцию main, с заменой оригинальной функции main на свою и вызовом оригинальной функции изнутри нашей.
  3. Аналогично ответу на этот вопрос для чистого WE, но без объявления переменных в WE т.к. то уже не так удобно становится когда код во внешнем редакторе.

Теперь о точках входа и инжекте.
Луа позволяет делать такой финт ушами
do
  local f = FunctionName -- записываем функцию в переменную
  function FunctionName() -- заменяем оригинальную функцию своей
   f() -- вызываем оригинальную функцию из переменной
   -- здесь могла быть ваша реклама или ваш код
  end
end
Это позволит нам сохранить оригинальную функцию в переменную, заменить оригинал своей функцией и вызвать оригинал из переменной. Применимо к любой функции, которая была объявлена раньше, не работает если функция объявлена после выполнения этого кода. Для создания точки входа отлично подходит InitGlobals, она всегда объявляется раньше кастомного кода в WE и вызывается из main.

У себя в коде я пользуюсь немного более сложным способом, этот код не будет работать в WE т.к. цепляет main, а не InitGlobals и не дает серьеных преимуществ перед описаным выше, привожу просто для расширения кругозора
local function InjectMain()
    local alpha_main = main
    return function()
        local alpha_init = RunInitializationTriggers
        RunInitializationTriggers = function() end
        alpha_main()
        InitLibraries() --моя функция, которая должна быть выполнена после всего, но до триггеров инициализации карты
        alpha_init()
    end
end
main = InjectMain()
ответ
gg_unit_hdhw_0001
hdhw - равкод юнита
0001 - его номер
Номер можешь посмотреть в менеджере объектов

upd: Выбираем юнита - Правка - Просмотр выборки - Просмотреть в менеджере объектов

upd1: хотя у меня нет рефорджа, вероятно там по другому

28
udg_variable_name
Все глобалки всегда начинаются с udg_.
Ещё можно редактором скрипт карты вытащить, там весь её код будет, в том числе и определение глобальных переменных.
Принятый ответ
3
PT153:
udg_variable_name
Все глобалки всегда начинаются с udg_.
Ещё можно редактором скрипт карты вытащить, там весь её код будет, в том числе и определение глобальных переменных.
Благодарю!
28
gellin, забавный факт, все переменные из окна переменных являются User Defined Global, поэтому и начинаются с udg. Генерированные редактором переменные (триггеры, юниты на карте и так далее), являются Generated Global, поэтому начинаются с gg.
33
Кароче да, но весь неудобно, чтобы получить глобальную переменную от юнита, нужно обратится к нему триггерно, например сделать простое событие Инициализация карты => Крестьянин Воспроизвести анимацию Stand, сохраняемся в режиме папки. Потому открываем файл war3map.lua поиском находим нашего рабочего по имени hpea или по 0000. gg_unit_hpea_0000 - наша глобальная переменная, а так да udg_название_переменной из редактора
28
Bergi_Bear, id юнита пишется в самом редакторе ландшафта, поэтому можно смело писать gg_unit_rawcode_counterid.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.