Добавлен , опубликован
Warcraft III - Lua - это модификация, позволяющая встраивать lua script'ы в свои карты. Некоторый стандартный функционал lua был ограничен в целях безопасности пользователей и игроков. В силу различий JASS и lua, некоторые нативные функции Warcraft III могут работать некорректно. Вы имеете возможность поспособствовать развитию проекта, написав об ошибках и багах.

Текущая версия: 1.3.7 (Blight)
Версия lua: 5.4.4
Поддерживаемый патч игры: 1.24e/1.26a/1.27a/1.27b/1.28f Патчи выше 1.26a нуждаются в дополнительных тестах.
Список изменений
  • 1.3.7 (Brlight) - исправлен баг с постоянной утечкой памяти lua потоков из-за особенности самого lua (спасибо за наводку, nazarpunk), добавлен префикс к lua ошибкам в случае запуска игры через UjAPI.
  • 1.3.6 (Brlight) - нативные функции могут использоваться из handle'ов, сами же handle'ы реализованы в виде таблицы (спасибо, Kokomi), что позволяет производить обращения по типу:
Player(0):CreateUnit(FourCC('Hpal'), 0, 0, 0):KillUnit()
-- Вместо
KillUnit(CreateUnit(Player(0), FourCC('Hpal'), 0, 0, 0))
  • 1.3.5 (Brlight) - добавлена поддержка UjAPI и всех jass native'ок, которые он с собой приносит. Добавлена возможность чтения JASS переменных, вплоть до переменных, объявленных в карте. Исправлен баг с остановкой триггера/таймера, в котором была допущена ошибка, теперь игра не вылетает. Сделан корректный конвертер float значений в jReal. Исправлен баг с пропажей аргументов. Исправлена утечка памяти, вызванная в случае использования анонимок при регистрации триггеров, таймеров и т.д. Изменён формат вывода оповещений. Добавлена возможность выводить цветной текст в консоль, посредством использования цветового кода как в самой игре. Теперь вместо любого типа, являющегося handle'ом (unit, location, widget...), может использоваться непосредственно тип handle, который возвращается во время обращения к JASS переменным. В случае такого использования, вам будет выводиться уведомление о преобразовании, при условии, что вы находитесь в dev режиме. При необходимости, вы можете отключить эти уведомления, прописав параметр -nowarnings. Чтобы использовать мод как модуль к UjAPI, разместите его по пути "UjAPI\UjAPIFiles\Modules". Если же вы хотите обойтись без UjAPI, вы можете сменить расширение с dll на mix и поместить мод в папку с игрой, однако вы не сможете использовать новые функции UjAPI без его непосредственного участия.
...
  • 1.2.9 (Outland) - добавлена поддержка других патчей. Добавлена функция GetMapFileName(bool flag), возвращающая путь файла карты относительно папки игры, если flag равен true, и имя файла карты, если false.
  • 1.1.9 (Outland) - StormOpenFile заменен на StormOpenFileEx, чтобы исправить ошибку с поиском файлов на локальном диске, когда нам нужно открыть файл из mpq. Также был добавлен режим для require, который позволяет использовать точку в пути вместо \\ (идея от Kirill78, все жалобы к нему 😀 ).
  • 1.1.8 (Outland) - фикс бага в "dofile". Lua-функция "loadfile" теперь также переписана, как и "dofile".
  • 1.1.7 (Outland) - Lua-функция "dofile" переписана. Теперь она работает в 2-х режимах:
    1. Режим по умолчанию: файлы выполняются только из mpq архивов;
    2. Режим разработчика: файлы выполняются как из mpq архивов, так и из папки с игрой.
  • 1.1.6 (Outland) - убраны фреймы (ненадолго). Исправлены баг с произвольным вылетом, в случае использования анонимок. Добавлен автоматический парсер нативок JASS, а также типов. Добавлена типизация для нативок JASS (бережёного код бережёт), а также псевдо-наследование. Исправлен баг с некорректной передачей аргументов при вызове нативок JASS. Исправлен баг со stacktrace'ом, теперь он действительно отображается. Добавлена возможность подключения с помощью мемхака. И т.д. (я просто уже забыл часть того, что наворотил). P.s. ждём новых нативок для JASS. 😉
  • 1.1.4 (Ashenvale) - добавлены фреймы. Добавлен режим разработчика (-dev) со снятыми на lua ограничениями. Добавлен заперт на подключение к пользователям без мода и наоборот. Добавлен фикс широкоформатных экранов. Изменена карта-пример.
  • 1.1.3 (Beta) - оптимизирован код преобразования float2jReal. Исправлен вылет после попытки запуска триггера с ошибкой. Добавлен stack trace и всплывающее сообщение. Добавлено сообщение о критической ошибке, а именно отсутствие необходимого количества аргументов, при попытке вызова стандартных функций Warcraft III . Исправлена ошибка, из-за которой мог произойти десинк, так как сборщик мусора поспешно удалял значения. Исправлена ошибка с потерей аргументов во время переадресации вызова lua2jassnative.
Как и писал N1ghtSiren, вы можете добавить параметры запуска в JNGP, что позволит вам использовать скрипты из директории Warcraft III. Таким образом вы сможете работать со скриптами в отдельной среде, к примеру Visual Studio Code или Sublime Text. Приложенный им wehack.lua.
Установка
Чтобы использовать мод как модуль к UjAPI, разместите его по пути "UjAPI\UjAPIFiles\Modules". Если же вы хотите обойтись без UjAPI, вы можете сменить расширение с dll на mix и поместить мод в папку с игрой, однако вы не сможете использовать новые функции UjAPI без его непосредственного участия.
Инструкция по эксплуатации
  1. Создать в карте (её архиве) папку Scripts. В неё перенесите blizzard.lua и common.lua. (Необязательно, позволяет использовать стандартные константы blizzard.j, common.j)
  2. Поместить ваш lua script в архив карты. Обязательно переименуйте его в war3map.lua!
  3. Наслаждайтесь игрой.
Для отображения консоли, запускайте Warcraft с параметром -console.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
1
С обновленным "war3_lua.mix" Поведение карты изменилось, теперь выдает ошибкув игре. Но код всё ещё не робит :С
Загруженные файлы
10
Портируется ли на рефордж или же придется переделывать код?
15
Портируется ли на рефордж или же придется переделывать код?
У Reforged нативная поддержка Lua
20
Портируется ли на рефордж или же придется переделывать код?
Если речь о нативках, они будут реализованы как "врапперы" и скорее всего пойдут в Blizzard.j, но работать будут так же, ибо я не горю желанием обзывать функции Blz, но их поддержку можно сделать банальным вызовом соответствующей нативки. Просто немного бы подробнее бы расписал, что именно нужно "портировать".
10
Портируется ли на рефордж или же придется переделывать код?
Если речь о нативках, они будут реализованы как "врапперы" и скорее всего пойдут в Blizzard.j, но работать будут так же, ибо я не горю желанием обзывать функции Blz, но их поддержку можно сделать банальным вызовом соответствующей нативки. Просто немного бы подробнее бы расписал, что именно нужно "портировать".
Согласен, непонятно выразился.
Если допустим я сейчас буду в 1.26 писать на Lua, захочу вот перенести карту в рефордж, смогу ли я уже её редактировать в рефордже с новыми функциями рефорджа(ведь были добавлены новые функции), откроется ли она у меня, а то я так полагаю тут и мемхак частично задействован в этой сборке исходя из видео, а в рефордже его убрали насколь знаю
20
Портируется ли на рефордж или же придется переделывать код?
Если речь о нативках, они будут реализованы как "врапперы" и скорее всего пойдут в Blizzard.j, но работать будут так же, ибо я не горю желанием обзывать функции Blz, но их поддержку можно сделать банальным вызовом соответствующей нативки. Просто немного бы подробнее бы расписал, что именно нужно "портировать".
Согласен, непонятно выразился.
Если допустим я сейчас буду в 1.26 писать на Lua, захочу вот перенести карту в рефордж, смогу ли я уже её редактировать в рефордже с новыми функциями рефорджа(ведь были добавлены новые функции), откроется ли она у меня, а то я так полагаю тут и мемхак частично задействован в этой сборке исходя из видео, а в рефордже его убрали насколь знаю
В идеале (по-крайней мере я попытаюсь так сделать), что можно будет прямо весь ЛУА код с рефорджа перетащить на 1.26а и наоборот, я хочу добавить поддержку всех нативок. Однако, ввиду того, что я добавлю БОЛЬШЕ чем на рефордже, то перейти с нашего патча (используя новые функции) на рефордж будет уже нельзя. То есть будет +- полная ОБРАТНАЯ совместимость, но вот совместимость "вперёд" будет в руках близзардов. :D
10
Unryze, отличная идея у тебя на реализацию))
А что если как-нибудь отмечать нативки, которых нет в рефордже? (Другой цвет или префикс добавлять, который можно включать/отключать в настройках редактора?)
17
Можно добавить параметры запуска в сам редактор жпнг (добавьте в основной пост)
Загруженные файлы
23
Ещё один вопрос к автору:
Будет ли Ваш мод работать, например, в случае, если карта (ы) находятся внутри mpq (к примеру war3patch.mpq)? Можно ли написать общий код к своему моду и засунуть его в blizzard.lua, чтобы он запускался по умолчанию на всех картах?
Плюс в Вашем моде, наверно, идёт какая то внешняя библиотека, или другие файлы, как их засунуть в mpq, чтобы они работали?
Цель такая: итоговые установочные файлы моего мода со встроенным Вашим модом должны состоять из 1 mpq, с контентом/кодом/slk/картами внутри, комплекта карт в папку Maps, и одной внешней slk, и ничего более.
Вкратце - возможно ли встроить мод в мод?
20
EugeAl, в теории war3lua можно как mix запаковать. А так не тестировали ничего из предложенного
30
EugeAl, почему такая фиксация на одном файле для мода?

И почему не использовать микс?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.