Конвертер из Jass в C++ dll для запуска из игры

Добавлен , опубликован
Предназначение:
Здраствуйте господа! Представляю вам синтаксический анализатор из Jass кода в C++ код с проектами, которые вы можете, если что изменить под своё усмотрение.
Открыть
Что из себя представляет проект Jass_convert_C++:
  1. Консольное приложение на С++.
  2. Конвертер из Jass кода в код C++, который создаёт два файла war3map.cpp и war3map.h для подключения ко второму проекту "Библиотека".
  3. Можно копировать в консоли нажимая вторую кнопку мыши буфер обмена, а именно текстовые данные, для ввода пути к ".j" файлу, который в итоге, если полный путь корректен и расширение нужное, то вы получите два файла war3map.cpp и war3map.h.
  4. Завершить программу после получения файлов можно нажав любую клавишу.
Проект "Библиотека" это пример библиотеки для мапхака(IceFoga), и реализация запуска кода вашей карты в dll файле внутри карты.
Уделю внимание на следующие классы в проекте:
  1. sMyString
Этот класс заменяет работу со строками. В нём реализована функция очищения памяти после использования объекта. Так что утечек после статического использование данного класса быть не должно.
  1. sMyArray
Этот класс принимает два параметра. Первый это обязательно массив одномерный для вашего типа данных. Почему одномерный? Потому, что не получилось реализовать без одномерного для получения выражения от квадратных скобок. Пример: vMass[i][0] использования в коде элемента массива, а не vMass[i]. Объявление: sMyArray <integer[1],8190> vMass; Так же для всех массивов используется размер 8190, как максимальный в jass. Но память не выделена сразу на все объекты, а только выделен массив указателей в данном количестве(8190).
  1. Файл Additional_functions.cpp.
Содержит необходимые функции для работы моих классов. Пример: fCharToString, fCpyStr, fCmpStr, fAddString2, fFreeString2 и другие. Все функции вы можете посмотреть в проекте.
  1. Файл Natives.h содержит объявление нативкок Warcraft 3, которые мы получаем с помощью библиотеки JassApi.dll.
  2. Файл Main.cpp содержит основные функции для передачи параметров в нативные функции Warcraft 3. И функции для удобства использование нативок. Пример: переменная HPLAYER (__cdecl *_Player) (Integer number); Превращается в функцию Player(i).
  3. Файлы war3map.cpp и war3map.h это исходные файлы конвертера. Которые реализуют работу всех функций для карты.
Остальные файлы в проекте можете посмотреть сами. Лучше на дебаге, так проще.
Я работал в Visual Studio 2010, вы можете в любой другой Visual Studio, но желательно выше 2010, или в этой. Или в другой среде программирования, например VS Code.
После компиляции dll в проекте "Библиотека". Вы должны в карту поместить следующие файлы:
  1. Полученную библиотеку из проекта "Библиотека" в моём случае с путём "bin\".
  2. Файл war3map.j (IceFoga) в нём мапхак для библиотеки. Так же функции SetAmbientDaySound, SetAmbientNightSound, SetPlayerAllianceStateVisionBJ, SetPlayerAllianceStateAllyBJ, InitBlizzard не работают. Вроде бы, милли карты тоже работать не будут с AI Warcraft'a 3. Не пробывал.
Функции SetAmbientDaySound и SetAmbientNightSound пишите в Jass. Функцию конфига(config) пишите в jass файле. Они обязательные.
  1. config.json он содержит перечень подключаемых библиотек в карту.
  2. RedirectCalls.dll, Loader.dll, JassApi.dll, common.j - эти файлы нужно вставить в архив карты для работы мапхака IceFoga.
Все недочёты исправляйте ручками, если знаете язык С++. Или интуитивно.
В архив закинул карту VampirismFire5.10b2[0].w3x (версия Warcraft'a TFT 1.26a) для проверки работоспособности данного конвертера.
Вроде бы всё. Желаю удачных тестов.
`
ОЖИДАНИЕ РЕКЛАМЫ...
38
А что оно делает? Ну тоесть... какую пользу может принести?

Хотелось бы примеров, для чего ее применять

P.s. Почему exe и zip отдельно? Может, просто архив по кнопке скачать?
12
ScorpioT1000, ну exe это готовая программа для конвертирования текста jass в С. Просто вставляешь полный путь к jass файлу и получаешь два файла для проекта Библиотека. И по аналогии проекта Библиотека можешь сделать свой. Пользу? Ну например писать свою карту не на jass, а на С. Искать ошибки в jass коде. В C можно запускать потоки, что облегчает поиск путей в картах. Ещё сделаю функции для создания буферов данных в памяти с любой открытой картой, в которых будут данные по карте, что где находится. И после можно легко делать поиск путей. И удобный отравитель по маршруту юнитов. Чтобы они двигались красиво по маршруту. Воообщем возможностей много на С. Больше, чем на jass особенно классы и указатели многое дают программисту. Архив это все файлы, если и редактировать, то ещё исправлю ошибки в тексте, но проекты это проекты, а конечный файл это конечный файл для запуска конвертера. Я бы оставил на скачивание его. А архив со всеми файлами по ссылке. Пример в карте в архиве. О котором я писал выше. Можно открыть эту карту и посмотреть как устроен архив карты, что находится в war3map.j и какие библиотеки подключены. Если запустить проект Библиотека и подключится к процессу Warcraft'a 3 TFT 1.26a и начать эту карту, то можно на дебаге понаблюдать, как выполняются все функции данной библиотеки. А там уже потом решить, что лучше работать в jass дальше или перейти на мапхак.
38
Vampir_kolik, а, ты не просто транспилируешь, а выводишь в новый модуль обратно в карту? Вот это надо указать, и в заголовке. Мб на главную запостим. Я не понял о том, что это идет прямо в карту
38
Vampir_kolik, поправил название, надеюсь, ты не против
Отправил на главную
12
Да и С + + желательно сделать тегом для комментариев, а то на зеленил.)
1
Интересно а из ехе в арк можно конвертер сделать?
12
Fasser, если ты имеешь в виду андроид приложение, то это будет то же самое только на flutter, например. Но тебе легче Сишный код запустить, который в проекте, на другой платформе. И будет тот же результат. А ты что в телефоне играешь в Warcraft 3, через wine, как в linux'e?
1
Vampir_kolik, попробовал несколько эмуляторов правда на других играх и ни один эмулятор мне не понравился: один старый, другой ошибку выдает третий вовсе файла игры не видит. Если чесно вся надежда на умельцев вроде тебя.
12
Fasser, офтоп. Если по твоему вопросу, то ответь сначала на вопрос, где ты хочешь запустить exe файл? На телефоне в Android OS? В Linux'ax таких как Ubuntu или других им подобным? Если на телефоне то качай wine для Andoroid'a apk файл. Моё приложение запустить, в Android не получится, потому что пути разные. В Android путь /etc/w3 например. В Windows c:\games\w3. Я под Linux не подстраивал свою программу. Я забыл как там идёт запрос к файлам. Можно по типу пути определять твоё предпочтение вывода файла. Это можно сделать. Но если капать дальше. То все выводы файлов в библиотеке будут Windows'кие. Это тебе не потребуется, а вот для мапхака потребуется. А мне Linux ставить не хочется, что бы проверить, как мапхак работает на wine в Linux'e. И тут похоже без знаний нашего гения IceFoga не обойтись. Но если библиотека в Linux это .so файл, то в Windows это dll. При мапхаке IceFoga dll распаковывается из архива карты в Temp файлы Windows. Там и запускается. А вот, что бы реализовать такое в Linux. То можно кинуть dll в папку с игрой. Переименовать библиотеку в mix. Все необходимые библиотеки тоже кинуть в папку и с игрой в данном случае это RedirectCalls.dll, JassApi.dll их можно найти в карте. Сменить расширение файла RedirectCalls.dll на mix. Получится, что все библиотеки погрузятся в игре. Но их нужно запустить как описано в теме "Своя нативка на С++". Нужно зарегистрировать начальную функцию библиотеки объявить её в common.j файле в новых нативках. Импортировать common.j по пути Scripts\. В war3map.j убрать все мапхаки и вызвать функцию библиотеки которая зарегистрирована в игре в новых нативках. Этот велосипед может и сработать. Но лучше бы сделать мапхак для Linux отдельно, а я в этом не шарю. А если ты решил играть в Warcraft 3 на телефоне, то это порнография.
1
Vampir_kolik, короче нужен целый ритуал. Спасибо что ответил.
12
Fasser, если сделать мапхак для Linux, то можно такие карты и на Irina Bot запускать без опаски. Вот сделал тебе костыли можешь попробовать под Lunux'ом запустить данную карту и конвертер. Но лучше программировать учись, сам всё будешь делать. Закинь файлы RedirectCalls.mix, Vampirism_fire.mix,
JassApi.dll, возможно потребуется ещё и msvcp100.dll, msvcr100.dll в папку с игрой. Если я не ошибаюсь, а могу и ошибиться то функция GetModuleHandle работает под wine. И подхватит библиотеку JassApi.dll. Может и нет. Проверь. И закинь VampirismFire5.10b2[0].w3x в папку с картами. Также сделал Jass_convert_C++.exe под Linux пути. Делаю всё в слепую без Linux'a так что результат не гарантирован. Проверяй.
Загруженные файлы
38
Vampir_kolik, причем тут C: в винде может быть и //путь на сетевом диске
12
ScorpioT1000, я имел ввиду на диске. Пускай качают на свой диск. =) Не охота нечего переделывать.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.