15

» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua

NazarPunk:
Будет просто шикарно, особенно если EmmyDoc расставить.
В принципе не сложно, но объявления типов я буду игнорировать, луа не типизированный язык и будет глупо добавлять правила парсинга объявления типов..))
konvan5:
Drulia_san:
Да, писал с нуля исключительно сам
Спасибо за развернутый ответ! :)
Проект и правда очень перспективный с выходом reforged'a и может помочь многим картостроителям... ибо боли у нас всех общие)))
Пожалуйста, рад стараться)
15

» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua

NazarPunk:
Drulia_san, коли уже есть поддержка jass можно ли научить программу разбирать эти файлы:
чтоб получилось нечто подобное:
а то я для подсветки просто позаменял всё регулярками, что не всегда нормально сработало.
Окей, сделаю, не обещаю что будет прям как там, но будет парсить нормально
15

» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua

konvan5:
Drulia_san, мне интересно, программку сам же написал? С нуля? Что использовал для этого или большая часть ручной работы думая своей головой? Интересно мнение разработчика, каково писать такую программку и сколько это заняло времени/сил (раскрыть секреты производства) ;)
Да, писал с нуля исключительно сам, начал еще летом, потом времени не было и было лень закончить, продолжил в начале ноября. Изначально это был проект для меня, думал напишу кое-как ради того чтоб свою карту конвертировать, которая была под угрозой. Все компоненты написаны мной (обертка для регулярок, логгер и тд), используется лишь stl и немного winapi. Ты сам можешь посмотреть там ссылка на гитхаб висит, можешь поковырять там что угодно. Позже это начало вырастать в нечто большее и решил это выложить. По времени в общей сложности заняло месяц где-то если сложить всё вместе, опять же можешь глянуть календарь активности на гитхабе) Если ты заметил, там класс называется Parser2, потому что был первый парсер и он был ужасен, пришлось переписывать снова.
Я использовал чистый винапи по нескольким причинам:
  1. Никто не будет запускать это на линуксе\маке, весь геймдев по варкрафту был есть и будет на винде
  2. Он быстрый и очень функциональный
  3. Я и любой кто захочет это собрать сможет это сделать сходу ничего не подключая и не скачивая
  4. Хотелось облегчить проект от лишних библиотек вроде Qt, MFC
15

» WarCraft 3 / Reforged на LUA

prog:
ScopteRectuS, Drulia_san, Вот только такая конструкция вызывается ДО инициализации и при срабатывании сборщика мусора триггеры созданые таким образом могут потеряться. Будете потом ловить странный сложно воспроизводимый баг "триггеры вдруг перестали работать, что делать". Поэтому нужен инжект в оригинальный процесс инициализации.
Сборщик мусора уничтожает луашные объекты и ссылки, объекты типа триггер, юнит и прочее - живут совсем в других местах, которые сборщик мусора не имеет права трогать, они уничтожаются по ссылке функциями типа DestroySomething Он может максимум обнулить глобальную ссылку на триггер gg_trg_MyTrigger, но сам триггер никто не зачистит. Он останется жив и будет работать, функции которые он дергает впитать в себя он уже успел, если вдруг триггер станет nil - на него просто нельзя будет получить ссылку, он останется изолирован в памяти, но по сути его трогать-то больше и не надо.
15

» WarCraft 3 / Бета версия Warcraft III Reforged 1.32

Новые юниты для рас (мультиплеера) - очень сомнительно, т.к. они стремятся сохранить кроссплей между старым и новым варкрафтом.
Они собираются добавить в классический варик модельки в "классическом стиле" женщины дк и дх для совместимости, не думай что старый варик останется нетронутым, они их будут друг под друга подгонять
15

» WarCraft 3 / Reforged на LUA

DopaMine:
Нет, я же сказал, что нужно инициализировать сначала ваш триггер, вызвав где-то функцию InitTrig_PickHeroes( ).
Я в событиях вызвал
Еще раз. У тебя ничего не будет работать, пока ты не сделаешь точку входа. Если ты её не сделал - выше мной описано как.
15

» WarCraft 3 / Reforged на LUA

Если лень читать статью про инжект точки входа, сделай так:
Создай гуи триггер с событием "Инициализация карты" (Map Initialization), добавь туда действие "Custom script" и вставь в текст скрипта это:
entryPoint()
Потом объяви где-то функцию entryPoint:
function entryPoint()
	InitTrig_PickHeroes( )
end
И вызови из неё инит своего триггера, и руками туда добавляешь инит всех своих кастомных триггеров. Если у тебя есть общий код инициализации карты то функцию инициализации тоже вызови из entryPoint
В луа все триггеры ты создаешь вручную, инициализируешь вручную, вызываешь их инит тоже вручную как указано выше. Но глобальные переменные объявлять не надо если что, всё что не локалка - то глобалка.
15

» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua

поддерживаю, как-то прогал на ночь, так эти скобки в глазах слипались донельзя
Надо просто спать идти в таких случаях =) Если сонным прогать потом с утра охренеешь с той каши что увидишь в редакторе и вопросов самому себе "как мне вообще такое пришло в голову"
А если серьезно поддерживаю вышесказанное от Doc, мусорные слова в духе endloop endfunction endif, call set захламляют видимость и сбивают с умных мыслей, когда скобочка просто закрывает блок и не привлекает к себе внимания, когда глаза скользят по словам, а новичкам нужно просто по-практиковаться и начинать с чего-то простого, например с Lua, у него синтаксис идеален для начинающих
15

» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua

PT153:
А как по мне, синтаксис пайтона 3 куда лучше, чем в С, долой {} скобки!
Имхо, когда я вижу стену кода в С стиле с кучей {} скобок, которая ещё и растёт вширь, мне становится плохо.
Периодически приходится работать с питоном и честно говоря я его не люблю за его подход построения блоков через отступы, старые добрые фигурные скобочки моё всё, впрочем каждому своё) Ну и как я описал выше, для любителей JASS я добавил его полную поддержку, cJass теперь не обязателен во входящих файлах
15

» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua

ProstoParya:
что правила синтаксиса в стиле C тупо рулят
Ну да, так как многие их предпочитают за компактность, лаконичность и читабельность. Я сомневаюсь что многим людям нравится писать local перед типом данных, call перед каждым вызовом и set перед каждым присвоением, и конечно же типы данных без сокращений вроде integer и boolean. Писать на JASS имеет смысл только для сохранения совместимости своей карты где бы она ни была редактирована (или еще какие-то конкретные технические нужды). Этим я и обосновываю почему синтаксис С рулит.
И я бы еще раз не делал выводов о том, что "я не играл ни в одну карту на cJass", потому что черт его знает что там внутри той или иной карты. Я так же могу сказать что не играл ни в одну карту на wurst script потому что с первого взгляда я реально их не видел, но его многие используют.
15

» WarCraft 3 / Ентер Рект

Не уверен, но возможно сборщик мусора в луа удаляет триггер потому что он локальный и после выхода из функции на него больше никто нигде не ссылается, попробуй присвоить его глобальной переменной.
15

» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua

Апдейт
Добавил поддержку обычного JASS, теперь можно конвертировать любые скрипты вообще. Но пока что структуры всё еще не поддерживаются.
15

» WarCraft 3 / Бета версия Warcraft III Reforged 1.32

Что нового (Помимо эльфов):
  • Исправили баг когда кастомные скилы героя пытались выглядеть как его оригинальные (у героя на основе паладина все скилы словно пытались быть его дефолтными)
  • Исправили баг с модельками, теперь их видно
  • Исправили баги с путями юнитов, они больше не ходят через горы
  • Устранили еще кучу всего и сделали кастомки рабочими
Из недостатков:
  • Кастомки по сети всё еще недоступны
  • Все скилы ночных эльфов в кастомках баганные. Например герои с кастомной метаморфозой на основе превращения друида-медведя - всегда превращаются в медведя.
15

» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua

ProstoParya:
Drulia_san:
в эту эфемерную карту я ясное дело поиграл ментально
то я сам спрашиваю
Никому нет дела до твоего отношения к cJass и до того, что ты считаешь его невостребованным, к тому, что ты конечно же в курсе про все карты на свете и на чем они там сделаны, успокойся.
Заинтересованным: И да, как было предложено выше - я реализовал распознавание строк и строчных переменных\аргументов\функций. При склеивании их оператор + должен корректно меняться на ..
Осталось добавить парсинг структур и всё.
15

» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua

Doc:
В целом советую подумать о разборе типов переменных, система типов в жассе/вжасс очень банальная энивей и ничего принципиально сложного быть не должно.
Хорошо, учту это
15

» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua

Doc:
Довольно бесполезно без поддержки структур и т.д
Это так, те кто кто обильно пользуются структурами не смогут получить выгоды от этой утилиты, а те у кого 1-2 класса (но много экземпляров создается повсеместно) могут их переписать вручную и просто поменять объявления объектов\их использование. Но в будущем я всё же добавлю поддержку структур с их последующей конвертацией в мета-табличные реализации. Да я не думаю что абсолютно все ими прямо таки активно пользуются в картах, мне разве что класс снарядов понадобился, который их метает с кучей различных вариаций, а так по большей части чисто функциональщина. (Я не утверждаю как персонаж выше что структуры не востребованы, у всех по-разному).
Doc:
реализация слишком базовая, нет никакой гарантии что код в итоге выйдет корректным (та же конкатенация строк).
Для скриптов с чисто функциональным подходом почти идеально так как поддерживаются все базовые фичи языка (плюс некоторые дополнительные), к примеру в одной своей карте пару десятков триггеров конвертировал (там одна функциональщина на cJass) и получилось довольно неплохо, разве что в некоторых триггерах пришлось конкатенацию строк руками подправить и всё работает. Ну код все равно придется проверять, но намного меньше грязной работы, ради чего собственно и весь движ.
15

» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua

в треде самой карты обычно пишут на чём она сделана,
Да да, конечно, везде пишут "да и кстати я ее на cJass писал. Это средство разработки , всем пофигу на чем работает карта. И вообще, все нормальные карты проходят через оптимайзер и обфусцируются до обычной каши из jass. И не все карты выкладывают в места вроде хгм, например я свой проект который уже несколько лет делаю. Так что давай без поспешных выводов.
15

» WarCraft 3 / Как быстро экспортировать код

PT153:
Редактор ландшафта -> Файл -> Экспортировать скрипт карты. Пишешь небольшой парсер, который отсекает всё до первого триггера, затем каждый триггер в отдельный файл, затем всё после последнего триггера в отдельный файл.
Хм, пойдет, спасибо
15

» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua

Выкатил обновление с учетом большинства замечаний выше, обновил описание, как одобрят можете проверять (или с гитхаба качайте)
15

» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua

NazarPunk:
Конкатекация не работает
Да, с дефайнами пока что есть такая проблема, но внутри функций все операции конвертируются корректно
15

» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua

NazarPunk:
Drulia_san, можно запоминать последний путь? Не очень удобно каждый раз его вбивать.
Окей, последние пути будут храниться в конфиге начиная со следующей версии 1.03
В качестве альтернативы можешь создать батник, он умеет и через консоль, первый аргумент - входящий путь, второй куда выхлоп класть
15

» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua

NazarPunk:
Drulia_san, в lua номерация массивов начинается с 1 в отличии от cjass. Это как-то учтено или придётся ручками все переборы править?
Не учитывал это, но исправлю моменты где используются целочисленные константы в индексах - увеличу на один. Но вот итерации придется править вручную, i = 0 менять на i = 1
Семантический анализатор тут всё же не предусмотрен
15

» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua

Если будут ошибки докладывайте, по возможности кидайте логи и ищите спустя время новые релизы на гитхабе