Добавлен  Drulia_san 
                            
                            
                            
                            
                            
                            
                        
                        
                    Если пользоваться текущим стандартным редактором допустим, от 1.31 и переключиться на Луа, то у меня есть некоторые вопросы.
Во-первых как луа воспринимает номерные константы типа равкодов 'A0E5' ? Их синтаксис позволяет записывать без костылей?
Во-первых как луа воспринимает номерные константы типа равкодов 'A0E5' ? Их синтаксис позволяет записывать без костылей?
Во-вторых где точка входа? Начав писать на луа, ты пишешь с чистого места, нельзя создать триггер инициализации, который выполнит необходимый код и создаст нужные триггеры. Как создать инициализацию?
И втретьих, глобалки. Они не имеют типов, как их объявлять и где их объявлять так, чтоб в коде они работали как и глобалки в JASS? Не понятно если просто в глобальном пространстве написать например g_TestUnit = nil, то этой переменной все скрипты могут присваивать юнита и оно его сможет также нормально читать? И обязательно ли их здесь объявлять? Объясните пожалуйста
Принятый ответ
Ответ выше - для стандартного редактора WE. Однако, рекомендуется использовать с Lua внешний редактор кода и внешний же сборщик карты. Это чревато маленьким неудобством в виде необходимости запускать карту на проверку только из внешней программы т.к. запуск из WE будет без значительной части кода в карте, но дает огромное преимущество в виде несравнимо более удобной работы с кодом.
К сожалению, пока слишком мало информации об этом на сайте.
Вариант  NazarPunk, пока без сборки карты, код придется копировать в карту вручную.
Мой вариант, пока не рабочий т.к. перед релизом нужно исправить несколько багов, но включает в себя и работу с кодом и сборку карты, не нужно вручную копировать код в карту.
Даже здесь на сайте есть еще пара вариантов, но мне лень их искать
И немного саморекламы, как выглядели бы ответы на вопрос выше при использовании моего тулсета
- Использовать макрос RAW('A0E5'), который превратит равкод в число при сборке карты.
- Инжект в функцию main, с заменой оригинальной функции main на свою и вызовом оригинальной функции изнутри нашей.
- Аналогично ответу на этот вопрос для чистого 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()
    
        
            
                `
            
            
                
        
    
    ОЖИДАНИЕ РЕКЛАМЫ...
            
                    
                        Чтобы оставить комментарий, пожалуйста, войдите на сайт.
                    
                
             
                        
                        
                    
 WC3
                                WC3
                            



 
                    
                
Ред. prog
Ред. PT153
Ред. prog