Добавлен , опубликован
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.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
18
  • Сейчас мы заняты следующими задачами:
    • Рефакторинг кода;
    • Когда разработчик передал в api объект другого warcraft типа теперь выводится сообщение об ошибке, вместо тихого обрыва потока;
    • Добавление возможности подключать скрипт из папки с варом, чтобы во время разработки после изменения кода карту не надо было даже пересохранять. Это актуально для всех больших проектов у которых карта сохраняется по 20+ секунд;
    • Добавляем возможность передавать данные из jass в lua и обратно через общую hashtable. Что даст возможность подключить lua без переписывания jass кода;
    • Делаем возможность добавить mix в карту без необходимости игрокам заранее класть его в папку вара.

  • Это открытый проект, а значит у вас есть возможность самому написать эти функции и предложить добавить их, чему мы будем рады.
  • Это некоммерческий проект, поэтому разработчик в первую очередь делает то что ему интересно. Но у вас всегда есть возможность заинтересовать его. Если вы хотите добавить lua к существующему проекту для каких то вычислений, или попробовать создать на нем новый проект или вы хотите вернуться на 1.26 чтобы показать всем как делать годноту и вам для этого нужны эта эта и эта функции, то мне кажется что автор не останется равнодушным к вам, пишите тут или лично
33
Это открытый проект, а значит у вас есть возможность самому написать эти функции и предложить добавить их, чему мы будем рады.
Я хочу видеть всё, предлагаю добавить 100% функционала последнего мемхака 😄
18
Я хочу видеть всё
А карту сделаешь? Пеонов перенесешь?
33
Другую сделаю, зачем пеоны, а так и делать не на чем:
Стандартные JASS функции;
FrameAPI
Боюсь этого маловато
20
  • Сейчас мы заняты следующими задачами:
  • Рефакторинг кода;
  • Когда разработчик передал в api объект другого warcraft типа теперь выводится сообщение об ошибке, вместо тихого обрыва потока;
  • Добавление возможности подключать скрипт из папки с варом, чтобы во время разработки после изменения кода карту не надо было даже пересохранять. Это актуально для всех больших проектов у которых карта сохраняется по 20+ секунд;
  • Добавляем возможность передавать данные из jass в lua и обратно через общую hashtable. Что даст возможность подключить lua без переписывания jass кода;
  • Делаем возможность добавить mix в карту без необходимости игрокам заранее класть его в папку вара.

  • Это открытый проект, а значит у вас есть возможность самому написать эти функции и предложить добавить их, чему мы будем рады.
  • Это некоммерческий проект, поэтому разработчик в первую очередь делает то что ему интересно. Но у вас всегда есть возможность заинтересовать его. Если вы хотите добавить lua к существующему проекту для каких то вычислений, или попробовать создать на нем новый проект или вы хотите вернуться на 1.26 чтобы показать всем как делать годноту и вам для этого нужны эта эта и эта функции, то мне кажется что автор не останется равнодушным к вам, пишите тут или лично
Надеюсь не сочтёшь за "понты", но если вы сделаете всё адекватно, то я готов вам помочь сорсами по фреймам и т.д. для расширения нативок и прочего. То бишь почти весь функционал и даже больше, я могу вам завести. Один нюанс, что моё "требование" будет таки сделать расширение джасс нативок тоже (с ним я тоже помогу), а не просто LUA и всё. Ну и ещё маленьки-маленький нюанс, сделать функции по дефолту с именами без тупых Blz, а Blz сделать врапперами на нативки.
Ибо интерес у меня к проекту есть, а данных игры я разобрал уже неистово много, как и кол-во функций в моей WFEDll в разы больше чем то, что я добавил в МемХак (ибо лень было дважды писать код, но теперь ещё и на джасс).
19
Unryze, буду рад с вами работать. Blz wrapper уже реализован, однако у меня есть ещё идеи по его усовершенствованию. Если хотите, могу отписать вам, но чуть позже, так как испытыванию небольшие трудности с компьютером.

Нет, я пишу про функционал луа в апи варика, всё теперь я понял, где мы друг друга перестали не понимать 😂
Щас мой вопрос всё прояснит.
Вот конкретно в этом луа на 1.26 есть рабочие аналоги для BlzSetUnitMaxHP, BlzStartUnitAbilityCooldown, BlzSetUnitAttackCooldown?
Нету, их нужно добавлять Евенту, когда я говорил про функционал луа, разумеется я имел ввиду функционал апи
По просьбе N1ghtSiren они были добавлены и даже использовались им, однако они реализованы в версии 1.1.5, которую я забыл загрузить как на страницу, так и на github. 😅

А, нет, нашел последнюю версию в нашем чате. Здесь реализованы такие функции, как:
SetItemBaseIconPathById(itemid, iconpath)
SetItemBaseNameById(itemid, itemname)
SetItemBaseUbertipById(itemid, description)
SetUnitArmour(u)
SetUnitMaxLife(u, RMaxBJ(1, life))
SetUnitMaxMana(u, RMaxBJ(0, mana))
SetUnitBaseDamage(u, damage)
SetUnitArmour(u, armour)
SetUnitLifeRegen(u, life_regen)
SetUnitManaRegen(u, mana_regen)
И их аналоги, но только с Get.
Загруженные файлы
20
Unryze, буду рад с вами работать. Blz wrapper уже реализован, однако у меня есть ещё идеи по его усовершенствованию. Если хотите, могу отписать вам, но чуть позже, так как испытыванию небольшие трудности с компьютером.
Буду тоже рад, не надо на "Вы", слишком уж уважительно. :D Связаться думаю будет проще по дискорду.
1
С обновленным "war3_lua.mix" Поведение карты изменилось, теперь выдает ошибкув игре. Но код всё ещё не робит :С
Загруженные файлы
9
Портируется ли на рефордж или же придется переделывать код?
15
Портируется ли на рефордж или же придется переделывать код?
У Reforged нативная поддержка Lua
20
Портируется ли на рефордж или же придется переделывать код?
Если речь о нативках, они будут реализованы как "врапперы" и скорее всего пойдут в Blizzard.j, но работать будут так же, ибо я не горю желанием обзывать функции Blz, но их поддержку можно сделать банальным вызовом соответствующей нативки. Просто немного бы подробнее бы расписал, что именно нужно "портировать".
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.