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.
`
LOADING AD...
20
Портируется ли на рефордж или же придется переделывать код?
Если речь о нативках, они будут реализованы как "врапперы" и скорее всего пойдут в Blizzard.j, но работать будут так же, ибо я не горю желанием обзывать функции Blz, но их поддержку можно сделать банальным вызовом соответствующей нативки. Просто немного бы подробнее бы расписал, что именно нужно "портировать".
9
Портируется ли на рефордж или же придется переделывать код?
Если речь о нативках, они будут реализованы как "врапперы" и скорее всего пойдут в Blizzard.j, но работать будут так же, ибо я не горю желанием обзывать функции Blz, но их поддержку можно сделать банальным вызовом соответствующей нативки. Просто немного бы подробнее бы расписал, что именно нужно "портировать".
Согласен, непонятно выразился.
Если допустим я сейчас буду в 1.26 писать на Lua, захочу вот перенести карту в рефордж, смогу ли я уже её редактировать в рефордже с новыми функциями рефорджа(ведь были добавлены новые функции), откроется ли она у меня, а то я так полагаю тут и мемхак частично задействован в этой сборке исходя из видео, а в рефордже его убрали насколь знаю
20
Портируется ли на рефордж или же придется переделывать код?
Если речь о нативках, они будут реализованы как "врапперы" и скорее всего пойдут в Blizzard.j, но работать будут так же, ибо я не горю желанием обзывать функции Blz, но их поддержку можно сделать банальным вызовом соответствующей нативки. Просто немного бы подробнее бы расписал, что именно нужно "портировать".
Согласен, непонятно выразился.
Если допустим я сейчас буду в 1.26 писать на Lua, захочу вот перенести карту в рефордж, смогу ли я уже её редактировать в рефордже с новыми функциями рефорджа(ведь были добавлены новые функции), откроется ли она у меня, а то я так полагаю тут и мемхак частично задействован в этой сборке исходя из видео, а в рефордже его убрали насколь знаю
В идеале (по-крайней мере я попытаюсь так сделать), что можно будет прямо весь ЛУА код с рефорджа перетащить на 1.26а и наоборот, я хочу добавить поддержку всех нативок. Однако, ввиду того, что я добавлю БОЛЬШЕ чем на рефордже, то перейти с нашего патча (используя новые функции) на рефордж будет уже нельзя. То есть будет +- полная ОБРАТНАЯ совместимость, но вот совместимость "вперёд" будет в руках близзардов. :D
9
Unryze, отличная идея у тебя на реализацию))
А что если как-нибудь отмечать нативки, которых нет в рефордже? (Другой цвет или префикс добавлять, который можно включать/отключать в настройках редактора?)
18
Можно добавить параметры запуска в сам редактор жпнг (добавьте в основной пост)
22
Ещё один вопрос к автору:
Будет ли Ваш мод работать, например, в случае, если карта (ы) находятся внутри mpq (к примеру war3patch.mpq)? Можно ли написать общий код к своему моду и засунуть его в blizzard.lua, чтобы он запускался по умолчанию на всех картах?
Плюс в Вашем моде, наверно, идёт какая то внешняя библиотека, или другие файлы, как их засунуть в mpq, чтобы они работали?
Цель такая: итоговые установочные файлы моего мода со встроенным Вашим модом должны состоять из 1 mpq, с контентом/кодом/slk/картами внутри, комплекта карт в папку Maps, и одной внешней slk, и ничего более.
Вкратце - возможно ли встроить мод в мод?
20
EugeAl, в теории war3lua можно как mix запаковать. А так не тестировали ничего из предложенного
31
EugeAl, почему такая фиксация на одном файле для мода?

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