22 nov
2022

Warcraft III - Lua

Added by , published
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.
0
Голосов: 0
Unryze - 7 months ago
0
Голосов: 0
Портируется ли на рефордж или же придется переделывать код?
Если речь о нативках, они будут реализованы как "врапперы" и скорее всего пойдут в Blizzard.j, но работать будут так же, ибо я не горю желанием обзывать функции Blz, но их поддержку можно сделать банальным вызовом соответствующей нативки. Просто немного бы подробнее бы расписал, что именно нужно "портировать".
0
Голосов: 0
Smeto - 7 months ago
0
Голосов: 0
Портируется ли на рефордж или же придется переделывать код?
Если речь о нативках, они будут реализованы как "врапперы" и скорее всего пойдут в Blizzard.j, но работать будут так же, ибо я не горю желанием обзывать функции Blz, но их поддержку можно сделать банальным вызовом соответствующей нативки. Просто немного бы подробнее бы расписал, что именно нужно "портировать".
Согласен, непонятно выразился.
Если допустим я сейчас буду в 1.26 писать на Lua, захочу вот перенести карту в рефордж, смогу ли я уже её редактировать в рефордже с новыми функциями рефорджа(ведь были добавлены новые функции), откроется ли она у меня, а то я так полагаю тут и мемхак частично задействован в этой сборке исходя из видео, а в рефордже его убрали насколь знаю
2
Голосов: 2
Unryze - 7 months ago
Edited by
2
Голосов: 2
Портируется ли на рефордж или же придется переделывать код?
Если речь о нативках, они будут реализованы как "врапперы" и скорее всего пойдут в Blizzard.j, но работать будут так же, ибо я не горю желанием обзывать функции Blz, но их поддержку можно сделать банальным вызовом соответствующей нативки. Просто немного бы подробнее бы расписал, что именно нужно "портировать".
Согласен, непонятно выразился.
Если допустим я сейчас буду в 1.26 писать на Lua, захочу вот перенести карту в рефордж, смогу ли я уже её редактировать в рефордже с новыми функциями рефорджа(ведь были добавлены новые функции), откроется ли она у меня, а то я так полагаю тут и мемхак частично задействован в этой сборке исходя из видео, а в рефордже его убрали насколь знаю
В идеале (по-крайней мере я попытаюсь так сделать), что можно будет прямо весь ЛУА код с рефорджа перетащить на 1.26а и наоборот, я хочу добавить поддержку всех нативок. Однако, ввиду того, что я добавлю БОЛЬШЕ чем на рефордже, то перейти с нашего патча (используя новые функции) на рефордж будет уже нельзя. То есть будет +- полная ОБРАТНАЯ совместимость, но вот совместимость "вперёд" будет в руках близзардов. :D
0
Голосов: 0
Smeto - 7 months ago
0
Голосов: 0
Unryze, отличная идея у тебя на реализацию))
А что если как-нибудь отмечать нативки, которых нет в рефордже? (Другой цвет или префикс добавлять, который можно включать/отключать в настройках редактора?)
4
Голосов: 4
N1ghtSiren - 6 months ago
Edited by
4
Голосов: 4
Можно добавить параметры запуска в сам редактор жпнг (добавьте в основной пост)
Uploaded files
0
Голосов: 0
EugeAl - 4 weeks ago
0
Голосов: 0
Ещё один вопрос к автору:
Будет ли Ваш мод работать, например, в случае, если карта (ы) находятся внутри mpq (к примеру war3patch.mpq)? Можно ли написать общий код к своему моду и засунуть его в blizzard.lua, чтобы он запускался по умолчанию на всех картах?
Плюс в Вашем моде, наверно, идёт какая то внешняя библиотека, или другие файлы, как их засунуть в mpq, чтобы они работали?
Цель такая: итоговые установочные файлы моего мода со встроенным Вашим модом должны состоять из 1 mpq, с контентом/кодом/slk/картами внутри, комплекта карт в папку Maps, и одной внешней slk, и ничего более.
Вкратце - возможно ли встроить мод в мод?
1
Голосов: 1
Kokomi - 4 weeks ago
1
Голосов: 1
EugeAl, в теории war3lua можно как mix запаковать. А так не тестировали ничего из предложенного
0
Голосов: 0
nazarpunk - 4 weeks ago
0
Голосов: 0
EugeAl, почему такая фиксация на одном файле для мода?

И почему не использовать микс?
0
Голосов: 0
EugeAl - 4 weeks ago
Edited by
0
Голосов: 0
nazarpunk, простота и быстрота установки; меньше претензий от игроков по причине "не работает!" - а потом выясняется, что игрок забыл докинуть/распаковать какой либо файл; сжатие; возможность простого подключения Ujapi и Render Edge "из коробки", без дополнительных файлов, чтобы только exe закинул и всё.
В идеале - лаунчер-установщик с галочками "установить мод", "добавить ujapi" , "добавить render edge", "совместить с JNGP" , но это уже для меня слишком тяжело, ибо не могу в ЯП типа С и т. д.
Зачем микс, если mpq есть?)
0
Голосов: 0
Kokomi - 4 weeks ago
0
Голосов: 0
EugeAl, Запускать UJApi через лаунчер это обязательное условие. Иначе нативок не будет
0
Голосов: 0
nazarpunk - 4 weeks ago
0
Голосов: 0
EugeAl, Что это за Звезда Смерти планируется с кучей опций?
Зачем микс, если mpq есть?)
Микс удобней и его всегда можно удалить не повредив оригинальному варкрафту.
0
Голосов: 0
EugeAl - 4 weeks ago
0
Голосов: 0
Kokomi, Да, мне это известно.
nazarpunk, Почему сразу так то? Просто мод-патч, меняющий одну игру на другую, с поддержкой кастомок из оригинального варкрафта, луа и новых нативок для картоделов, и с улучшенной графикой, опционально, для тех, у кого комп мощный (чтобы с render edge не выдавал 10 fps с моделями того качества, что в моих паках, ведь в моде они и будут, естественно). может быть слишком амбициозно, но тем не менее не фантастично )
1
Голосов: 1
Unryze - 4 weeks ago
1
Голосов: 1
Kokomi, Да, мне это известно.
nazarpunk, Почему сразу так то? Просто мод-патч, меняющий одну игру на другую, с поддержкой кастомок из оригинального варкрафта, луа и новых нативок для картоделов, и с улучшенной графикой, опционально, для тех, у кого комп мощный (чтобы с render edge не выдавал 10 fps с моделями того качества, что в моих паках, ведь в моде они и будут, естественно). может быть слишком амбициозно, но тем не менее не фантастично )
Слишком много пытаться пихать в игру "из коробки" рано или поздно начнёт вызывать коллизии адресов/функционала, UjAPI через .mix тоже никогда не будет. Лаунчеры удобнее тем (в будущем, когда мои руки дойдут до расширения UjAPI) - это сделать управление включение/выключение тех или иных модулей.
В общем, для начала определись, что именно хочешь сделать и для чего, а там уже виднее будет, что для достижения этого понадобится.
0
Голосов: 0
EugeAl - 4 weeks ago
0
Голосов: 0
Unryze, Мне mix не нужен) собственно потому про mpq я вопрос и задавал.
Согласен, что лаунчеры удобно, особенно, если с ними можно совмещать модули.
Ну первым делом сам мод, а потом уже думать над подключениями. Ещё нужно будет смотреть, как будет на всё это реагировать собственно аудитория.
0
Голосов: 0
nazarpunk - 4 weeks ago
0
Голосов: 0
Ещё нужно будет смотреть, как будет на всё это реагировать собственно аудитория.
Плохо она будет реагировать. Ибо никаких манипуляций сложнее запуска карты из игры предпринимать никто не хотит.
0
Голосов: 0
EugeAl - 4 weeks ago
Edited by
0
Голосов: 0
nazarpunk, Именно. Для этого и нужна "установка из коробки" на уровне "скачал, закинул, играй". Просто время закидывания будет первый раз чуть больше. На всякий случай можно в установочном файле (zip, который собственно и будет для скачивания) приложить и бэкапы из оригинального варкрафта, если игрок забудет/поленится сделать свой бэкап.
0
Голосов: 0
nazarpunk - 4 weeks ago
Edited by
0
Голосов: 0
приложить и бэкапы из оригинального варкрафта
Из всех патчей между 1.26 и 1.28? Пахнет переусложнением.
0
Голосов: 0
EugeAl - 4 weeks ago
Edited by
0
Голосов: 0
nazarpunk, разве оригинальные war3patch.mpq из этих патчей чем то отличаются? Если да, тогда не стоит переусложнять, действительно.
0
Голосов: 0
nazarpunk - 4 weeks ago
0
Голосов: 0
разве оригинальные war3patch.mpq из этих патчей чем то отличаются? Если да, тогда не стоит переусложнять, действительно.
Интересно, а куда изменения в патче вносятся?
0
Голосов: 0
EugeAl - 4 weeks ago
Edited by
0
Голосов: 0
nazarpunk, в exeшник, по идее. Или нет? Ну и в mpq добавляются другие slk, модели, текстуры итд. Но последнее неважно, оно с любым exe
запустится.
0
Голосов: 0
Unryze - 4 weeks ago
0
Голосов: 0
Unryze, Мне mix не нужен) собственно потому про mpq я вопрос и задавал.
Согласен, что лаунчеры удобно, особенно, если с ними можно совмещать модули.
Ну первым делом сам мод, а потом уже думать над подключениями. Ещё нужно будет смотреть, как будет на всё это реагировать собственно аудитория.
Изменять стандартный MPQ, который хранит элементы баланса - явно не лучше затея. И ещё раз, mix может хранить в себе MPQ, что позволит перезаписать (если установить приоритет выше) стандартные файлы.
Изменения в .exe дают от 0 до 0 разницы, вся логика внутри game.dll и на неё влиять через MPQ нельзя. Все изменения, что возможны из MPQ это "замена файлов", а точнее перекрытие файлом с приоритетом выше.
0
Голосов: 0
EugeAl - 4 weeks ago
0
Голосов: 0
Unryze, Элементы баланса, если речь идёт о юнитах/абилках/обьектах, хранятся в slk. Естественно, я их не трогал, просто добавил туда собственные (в смысле строки в таблицы, а не сами таблицы).
Что ж, если логика в game dll, тогда и бэкап mpq можно смело ставить от 1.28ого, и он переварится 1.26ым)
Что касается мелких патчей, то размещение файлов прямо в папках в папке игры имеет приоритет ещё выше, чем mpq. Проверено, у меня так работает изменённая UnitAskSounds.slk. Соответственно, их можно туда на время и пихать, потом удалять.
0
Голосов: 0
Unryze - 4 weeks ago
0
Голосов: 0
Unryze, Элементы баланса, если речь идёт о юнитах/абилках/обьектах, хранятся в slk. Естественно, я их не трогал, просто добавил туда собственные (в смысле строки в таблицы, а не сами таблицы).
Если этот MPQ закинут на другой патч, то баланс будет с того "патча" на котором ты собирал war3patch.mpq я думал это было наглядно...
Что ж, если логика в game dll, тогда и бэкап mpq можно смело ставить от 1.28ого, и он переварится 1.26ым)
По поводу этого пояснил выше.
Что касается мелких патчей, то размещение файлов прямо в папках в папке игры имеет приоритет ещё выше, чем mpq. Проверено, у меня так работает изменённая UnitAskSounds.slk. Соответственно, их можно туда на время и пихать, потом удалять.
Локальные файлы не у всех включены, да и неудобные они, в общем ладно, делай так как тебе кажется правильным, тебе дали советы/пояснили что и как работает, дальше на своё усмотрение. :)
0
Голосов: 0
EugeAl - 4 weeks ago
Edited by
0
Голосов: 0
Unryze, Всё это мне известно) поэтому буду рассматривать, какие ещё версии кроме 1.26 добавить в мод и бэкапы)
Спасибо)
честно говоря, сомневаюсь, а стоит ли вообще делать версии мода под другие версии, кроме 1.26. Всё равно у большинства стоит 1.26...
0
Голосов: 0
Unryze - 4 weeks ago
0
Голосов: 0
Unryze, Всё это мне известно) поэтому буду рассматривать, какие ещё версии кроме 1.26 добавить в мод и бэкапы)
Спасибо)
честно говоря, сомневаюсь, а стоит ли вообще делать версии мода под другие версии, кроме 1.26. Всё равно у большинства стоит 1.26...
Ну, я хоть и фанат 1.26а, но аудитория есть и на других патчах, тут дело личное, париться ради сомнительного притока людей или таки спокойно жить на 1.26а и не напрягать булки (в целом, если бы не шекели, я бы ВФЕ тоже только на 1.26а оставил и сэкономил бы тьму времени).
0
Голосов: 0
EugeAl - 4 weeks ago
0
Голосов: 0
Unryze, Имхо, булки перенапрягать совсем неохота :)
To leave a comment please sign in to the site.