Fly Data Processor

» опубликован

Краткие сведения

Для игры: Warcraft 3
Тип: Утилита
Сфера применения: работа с данными РО, базы данных
Требования: JNGP, Java 7, руки, мозг
Статус: в разработке
Автор: prog
Данная утилита интегрируется в JNGP экспериментальной сборки и затем при каждом сохранении карты автоматически делает свое грязное дело, а именно собирает данные по всем объектам в РО и использует их для заполнения шаблонов в текстовых описаниях и коде карты.
В частности, эта утилита может быть использована как мощный препроцессор описаний в Редакторе Объектов. А также, как инструмент для автоматической генерации баз данных по объектам в jass-коде.

Общая информация

Принцип работы

Работу утилиты можно условно разделить на четыре этапа:
  • подготовка данных
  • считывание и анализ данных
  • подстановка данных
  • упаковка результатов
Первый и последний пункты возложены на плечи других составляющих JNGP и представляют из себя всего-навсего извлечение из архива карты нужных файлов и помещение измененных файлов обратно в архив карты.
Считывание и анализ данных это расшифровка формата данных об объектах Warcraft 3 и размещение этих данных в памяти утилиты. На этом этапе также происходит категоризация объектов.
А вот подстановка данных представляет из себя достаточно занятный процесс - ранее извлеченные файлы с кодом и строками карты передаются в качестве шаблонов библиотеке FreeMarker, которая и отвечает за всю эту магию.

Ограничения

  • Утилита рассчитана на предоставление ей всех нужных файлов в готовом виде и не занимается их извлечением или обратной упаковкой, поэтому использование ее вне JNGP требует написания обертки, выполняющей все операции с архивом карты.
  • Утилита разрабатывалась без учета возможности работы с кампаниями и не может должным образом функционировать в такой среде.
  • На данный момент утилита адекватно работает только с шаблонами в коде карты, шаблоны в текстовых строках теряются при сохранении, поэтому импорт обработанного файла строк был временно отключен, но его можно импортировать вручную или снять комментарий со строк импорта файла строк в Fly.lua и перезапустить WE.
  • На данный момент отсутствует визуализация процесса обработки данных утилитой.
  • На данный момент нет никакой возможности настроить либо отключить утилиту через меню.
  • На данный момент не гарантируется сохранность данных при использовании утилиты.
  • На данный момент утилите доступны только значения полей, которые отличаются от стандартных.
  • Множество других недоработок

Установка

Подробное описание процедуры установки содержится в руководстве пользователя в соответствующем разделе.

Ссылки

Скачать Java 7
Для нужд обычного пользователя, не занимающегося разработкой на Java с головой хватит JRE.

Благодарности

ScorpioT1000 - за активное участие в обсуждении и помощь с извлечением файлов из архива карты.
Doc - за идею завернуть .jar в .exe для удобства.
А также всем, благодаря кому стала доступной спецификация файлов из архива карты:

 

Просмотров: 14 591

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


Это сообщение удалено
prog #2 - 6 лет назад 0
В ближайшее время напишу руководство пользователя и подготовлю карту-пример - на самом деле все далеко не так сложно, как кажется.
ScorpioT1000 #3 - 6 лет назад -1
Найс, запостил. Я думаю, файл можно запилить как отдельный ресурс и потом добавлять новые версии как отдельные ресурсы =)
prog #4 - 6 лет назад 0
Да, я так и собирался сделать, но пока занимаюсь руководством по использованию. Если тебе видны скрытые неопубликованные ресурсы - там пока только структура страниц готова.
ScorpioT1000 #5 - 6 лет назад 0
Да, отлично
Doc #6 - 6 лет назад 1
Предлагаю перепилить .jar в .exe для пущего удобства.
prog #7 - 6 лет назад 0
Doc, хорошая мысль, спасибо. Если это избавит от необходимости прописывать PATH, то следующую версию обязательно заверну в какой-нибудь загрузчик, ну а если нет, то это подождет т.к. особого удобства не принесет - не думаю что найдутся извращенцы, которые будут пользоваться этим в консольном режиме, а не через JNGP.
Doc #8 - 6 лет назад 0
Вроде как избавляет. По крайней мере не наблюдал проблем с PATH. Юзаю jar2exe wizard. Можно извратиться и сделать вообще через Excelsior(тогда жава не нужна будет), но будет много весить.
ScorpioT1000 #9 - 6 лет назад 0
Doc, может сделаете? Многим юзерам будет полезно, и сделать типа две версии.
prog:
Doc, хорошая мысль, спасибо. Если это избавит от необходимости прописывать PATH, то следующую версию обязательно заверну в какой-нибудь загрузчик, ну а если нет, то это подождет т.к. особого удобства не принесет - не думаю что найдутся извращенцы, которые будут пользоваться этим в консольном режиме, а не через JNGP.
я бы заюзал, для кампаний то =)
prog #10 - 6 лет назад 0
ScorpioT1000, дались тебе эти кампании) для них всеравно надо допиливать чтобы данные из двух файлов брались - из файла данных кампании и из файла данных карты. А завернуть в загрузчик не проблема.
Doc, я пользовался в последний раз launch4j, там дофига всяких настроек, включая загрузку джавы с сайта, если нет нужной версии, но мне не до того было чтобы проверять требует ли он записи пути к java в PATH.
В общем, следующую версию буду выкладывать завернутую в exe.
Пришло время перепилить утилиту так чтобы она состояла из нескольких плагинов и центрального ядра. Так будет удобнее.
prog #11 - 6 лет назад 0
Запилил себе десяток заданий как план действий на ближайшее будущее.
prog #12 - 6 лет назад 0
Руководство дополнено разделом с достаточно подробной спецификацией шаблонов. На очереди карта-пример и несколько трюков, не упомянутых в спецификации.
prog #13 - 6 лет назад 0
Запилил exe-враппер. Записи в Path вроде не требует, работает как лаунчер, без включения jar-ника в exe. Не обошлось без побочных эффектов - теперь во время работы утилиты отображается консоль с выводом текста от логгера. Убрать это можно, но пока оставлю как есть - это лучше чем зависание редактора без видимых признаков работы на время обработки данных утилитой.
prog #14 - 6 лет назад 0
В ближайшее время выложу обновленную версию утилиты. Пока нет интерфейса, зато она стала очень быстрой и очень модульной. Заодно был наведен порядок в файлах - теперь данные вынесены в отдельную папку и не пересекаются с файлами самой утилиты.
prog #15 - 6 лет назад 0
Beta 0.2 доступна для скачивания. Также был обновлен раздел "руководство пользователя" - добавлена статья, посвященная созданию учебного примера по применению утилиты.
Absol #16 - 6 лет назад 0
а есть проги на подобии xdep? что бы данные из slk конвертировало
prog #17 - 6 лет назад 0
Absol, наверняка есть, но я не занимаюсь разработкой или распространением софта, предназначенного для взлома карт. Поддержка slk данной утилитой планируется, но это наверняка не то что вам нужно.
ScorpioT1000 #18 - 6 лет назад 0
Ну как там с доставанием в одно описание данные из другого объекта?
prog #19 - 6 лет назад 0
ScorpioT1000, не совсем тебя понял. Если ты о том, что папку с данными надо было чистить вручную, то как это решить я уже придумал, осталось найти время и реализовать. Утилита получит параметр командной строки, определяющий режим работы и будет вызываться два раза, первый раз перед извлечением данных с параметром clear и второй раз после извлечения данных, на этот раз с параметром compile.
ScorpioT1000 #20 - 6 лет назад 0
Причем тут папка, я об основной задаче:
собирает данные по всем объектам в РО и использует их для заполнения шаблонов в текстовых описаниях
Это уже работает?
prog #21 - 6 лет назад 0
ScorpioT1000, теперь понял. Не полостью - проблему синтаксиса я решил, хотя и не самым красивым способом, а вот затирание шаблона при сохранении пока не позволяет считать что эта составляющая работает.
ScorpioT1000 #22 - 5 лет назад 0
Ну что там с первоначальной идеей?) когда бета будет? охото пособирать всякие сеты)
prog #23 - 5 лет назад 0
Да занят я по уши, вон выложил в статьи пару мелких примеров, которые приготовил еще месяц назад и все, времени кодить нет. Бета пока есть только та что с jass кодом работает. В принципе есть еще рабочий вариант, позволяющий использовать вместо конструкции ${x} конструкцию #[x#] или #[x]# чтобы обойти неприятие редактором символа } в описаниях, могу выложить. Только файл war3map.wts надо будет вручную импортировать в карту чтобы увидеть изменения (предварительно сделав копию со старым wts чтобы не потерять шаблоны).
ScorpioT1000 #24 - 5 лет назад 0
Это всё треш какой-то, ты уже почти полгода делаешь проект =)
prog #25 - 5 лет назад 0
Когда физически не остается времени или сил что-то делать после основной работы и личной жизни, то но удивительно что изменений никаких нет, не находишь?
ScorpioT1000 #26 - 5 лет назад 0
Дело в том, что этот софт пишется за 2 дня =\
prog #27 - 5 лет назад 0
Были бы у меня эти два дня)
ScorpioT1000 #28 - 5 лет назад 0
Я не понимаю, на кой черт ты паришься с копированием карты, если можно хранить сурс код wts в другом файле? например, war3mapSource.wts
При открытии карты в редакторе, wehack.lua запустит твою прогу, которая заменит war3map.wts на war3mapSource.wts.
При сохранении карты, твоя прога копирует war3map.wts в сурс, а сам файл компиляет в готовый результат.
Никаких карт не надо.
prog #29 - 5 лет назад 0
Может потому что я не знаю как событие на открытие карты привязать?
Если бы я нашел как это сделать, то все было бы реализовано именно так еще в первой версии утилиты, вот только ничего применимого кроме открытия редактора, сохранения карты и работы с меню я пока не нашел, даже в коде гриморы копался, нет там такого события.
ScorpioT1000 #30 - 5 лет назад 0
можно попробовать перекомпилять grimoire - добавить туда эвент
и выложить новый jngp...
prog #31 - 5 лет назад 0
Для этого нужно для начала разобраться в том как оно работает, потом найти адрес в памяти WE, на который вешать хук и только после этого все возможно начнет крутиться, если только не окажется что повесить хук на момент перед открытием карты невозможно. У тебя есть на это время?
Да, кстати, на кампах исходников гриморы нет, а те что я когда-то нашел в сети могут быть сильно устаревшими и нифига не работать.
Вру, есть ссылка на svn
Могу даже сказать что интересует нас скорее всего wehack.cpp, функция DllMain, а именно та часть где объявляются хуки на функции. Ну и, конечно, нужно продебажить ВЕ чтобы выяснить на какую функцию вешать хук.
ScorpioT1000 #32 - 5 лет назад 0
prog, дебажить можно с вызова msdn.microsoft.com/en-us/library/ms646927%28VS.85%29.aspx
prog #33 - 5 лет назад 0
У меня сейчас на машине ни средств отладки ни нормального компилятора нет для C/C++.
Есть вероятность что нужная нам функция окажется в storm.dll т.к. карта это по сути mpq архив и, соответственно, работать с ней вар будет как с mpq архивом.
ScorpioT1000 #34 - 5 лет назад 0
Я думаю, это будет дальше. Надо изменить данные до обращения к файлу.
prog #35 - 5 лет назад 0
Залил ту версию, о которой говорил, только допилил еще меню в ней для JNGP.
ScorpioT1000 #36 - 5 лет назад 0
Ну че там?
Вон чувак уже мой мод апдейтил xgm.guru/forum/showthread.php?t=30967
думаю делать новую сборку
prog #37 - 5 лет назад 0
Ну так делай, не жди меня. У меня сейчас туго с временем. Или можешь включить в сборку ту версию что есть сейчас, она довольно стабильная, поддерживает альтернативный синтаксис для выражений в РО и менюшки есть - можно отключить.
ScorpioT1000 #38 - 5 лет назад 0
Без твоей тулзы нет смысла делать сборку. А та версия еще даже не бета