lua-wc3

Published
» Предназначение: Работа с файлами
Представляю свое небольшое расширение для VSCode. Добавляется единственная команда 'Warcraft 3: build map'.
Возможности:
  • реализация функции require. Подключение файлов с lua кодом. Работает аналогично оригинальной функции.
  • реализация функции compiletime. Данная функция позволяет исполнять lua код сразу после склеивания файлов. При использовании данной функции доступны все возможности lua. Внутри функций compiletime доступны переменные src_dir и dst_dir. Это позволяет проводить манипуляции над файлами карты внутри кода (планируется добавить библиотеки). Может возвращать число, строку или таблицу, состоящую из чисел, строк и таблиц.
Для работы расширения необходимо:
  • установить расширение marketplace.visualstudio.com/items?itemName=nelloy.lua-wc3
  • скачать исполняющий файл github.com/nelloy-git/lua-wc3 (.exe или .py так же можно собрать самостоятельно 'pyinstaller --onefile lua-wc3.py')
  • указать путь к исполняющему файлу в настройках расширения
  • для python установить зависимости (lupa, py-lua-parser)
  • создать проект в VSCode, сохранить карту в виде папки в папку проекта src (по-умолчанию).
Запуск сборки производится командой 'Warcraft 3: build map'. В результате будет получена папка проекта dst (по-умолчанию), готовая к употреблению. О багах прошу сообщая сюда или в любой из гит репозиториев.
UPD: добавлена тестовая версия библиотеки для редактирования объектов WE.
Пример:
» war3map.lua
local unit_id = 'h001'
local base_id =  'hpea'

local aura_id = 'A001'
local buff_id = 'B001'

compiletime(
    function ()
        local objEdit = require('compiletime.objEdit.objEdit')
        objEdit.init(src_dir, dst_dir)

        local unit_type = objEdit.Unit.new(unit_id, base_id)
        unit_type:setName('Compiletime footman')

        local aura = objEdit.AuraDummy.new(aura_id, buff_id,
                                           'Test buff', 'Some tooltip',
                                           "ReplaceableTextures\\CommandButtons\\BTNAdvancedSpikedBarricades.blp",
                                           '', '')
    end)

function FourCC(id)
    return string.unpack(">I4", id)
end

...

function Trig_Melee_Initialization_Actions()
    local u1 = CreateUnit(Player(0), FourCC(base_id), 0, 0, 0)
    local u2 = CreateUnit(Player(0), FourCC(base_id), 0, 0, 0)
    UnitAddAbility(u1, FourCC(aura_id))
    BlzSetUnitStringField(u1, UNIT_SF_NAME, 'Test')
    BlzSetUnitStringField(u2, UNIT_SF_NAME, 'Test2')
end

...

compiletime(
    function ()
        local objEdit = require('compiletime.objEdit.objEdit')
        objEdit.close()
    end)


Views: 2 403

» Лучшие комментарии


Bergi_Bear #1 - 2 years ago (изм. ) 0
Голосов: +0 / -0
Идея очень хорошая и может быть крайне полезной, но всё же хочется посмотреть что же нам близы подвезут, если ничего и они нас
» снова
кинут
тогда это очень хорошая задумка, жаль пока оч. в луа понимаю, и не смогу оценить и проверить нормально, если в последнем скрипте демонстрация того как будет теперь выглять код создания юнита, но это ужасно, хотя логика вполне предельно ясна
Nelloy #2 - 2 years ago (изм. ) 0
Голосов: +0 / -0
Bergi_Bear, Сейчас нет поддержки команды require, которая позволяет подлючать и использовать другие файлы, поэтому приходися использовать костыль метод для объединения всех файлов в архив карты. Последний файл содержит не только создание нового юнита (2 футманов), но и внедрение нового класса "Unit" со всеми функциями (почти), доступными в Jass функциями для unit.
local id = 1751543663 --'hfoo'
local f = Unit.new(Player(0), id, 0, 0, 0)
f = Unit.new(Player(0), id, 0, 0, 0)
local angle = 180
f:setFacing(angle)
То есть можно использовать синтаксис как в последней строчке, более свойственный ООП.
ScorpioT1000 #3 - 2 years ago 0
Голосов: +0 / -0
В топку jetbrains, vs code перевернул им всем стол)
H #4 - 2 years ago 1
Голосов: +1 / -0
Прикрепленные файлы
Nelloy #6 - 2 years ago 0
Голосов: +0 / -0
ScorpioT1000, ага, но я не умею ни в js ни в ts) Если есть опыт и желание, я в деле. Думаб никогда не поздно поизучать новый язык
H, когда начинал - не было. Надо потестить
PT153 #7 - 2 years ago 0
Голосов: +0 / -0
В топку jetbrains, vs code перевернул им всем стол)
Не лагает, как продукты от JetBrains и VS 2019?
Nelloy #8 - 2 years ago 0
Голосов: +0 / -0
Для меня главная преграда - отсутствие нормального require с автозаменами. Не думаю что этот плагин таким располагает
PT153, за 2 года было к vscode 1 нарекание. Баг на линуксе был, вместо переключения языка выделял главное меню и не лечилось для ctrl+alt
H #9 - 2 years ago (изм. ) 6
Голосов: +6 / -0
Не лагает, как продукты от JetBrains и VS 2019?
jetbrains ide пользуюсь ими профессионально, каждый день по 8 часов. Самый приятный user experience, баги и тормоза иногда случаются, но обычно редко и не мешают. VS Code тоже очень хорош, но совсем в другом месте, это совершенно разные продукты, и никак не конкуренты друг-другу.
У VS Code можно удобно писать плагины, и делать свои ЯП, там есть поддержка language server, + если что-то нужно по быстрому поредактировать (например скрипты вара на lua или wurst, это musthave). А IDEA и прочии IDE уже для сложных аппликейшенов.
VS Code это тоже самое что и Atom от github. Sublime text кстати имеет теже плюшки что и VSCode, но он не бесплатный.
Atesla #11 - 2 years ago 0
Голосов: +0 / -0
H, Sublime Text бесплатный, только будут мучить напоминания о том, чтобы его купить. По крайней мере такой является 3 версия
H #12 - 2 years ago 0
Голосов: +0 / -0
Atesla:
H, Sublime Text бесплатный, только будут мучить напоминания о том, чтобы его купить. По крайней мере такой является 3 версия
я про это и говорю, в vscode и atom такого нет.
ScorpioT1000 #13 - 2 years ago 0
Голосов: +0 / -0
Что-то я вс код фри юзаю) и на средних проектах. смиритесь, он всем насрал в ванну
Nelloy #14 - 1 year ago 0
Голосов: +0 / -0
Обновил, добавил исполняющий файл