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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
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, но их поддержку можно сделать банальным вызовом соответствующей нативки. Просто немного бы подробнее бы расписал, что именно нужно "портировать".
9
Портируется ли на рефордж или же придется переделывать код?
Если речь о нативках, они будут реализованы как "врапперы" и скорее всего пойдут в Blizzard.j, но работать будут так же, ибо я не горю желанием обзывать функции Blz, но их поддержку можно сделать банальным вызовом соответствующей нативки. Просто немного бы подробнее бы расписал, что именно нужно "портировать".
Согласен, непонятно выразился.
Если допустим я сейчас буду в 1.26 писать на Lua, захочу вот перенести карту в рефордж, смогу ли я уже её редактировать в рефордже с новыми функциями рефорджа(ведь были добавлены новые функции), откроется ли она у меня, а то я так полагаю тут и мемхак частично задействован в этой сборке исходя из видео, а в рефордже его убрали насколь знаю
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.