Добавлен , опубликован
Предназначение:
Здраствуйте господа! Представляю вам синтаксический анализатор из Jass кода в C++ код с проектами, которые вы можете, если что изменить под своё усмотрение.
Открыть
Что из себя представляет проект Jass_convert_C++:
  1. Консольное приложение на С++.
  2. Конвертер из Jass кода в код C++, который создаёт два файла war3map.cpp и war3map.h для подключения ко второму проекту "Библиотека".
  3. Можно копировать в консоли нажимая вторую кнопку мыши буфер обмена, а именно текстовые данные, для ввода пути к ".j" файлу, который в итоге, полный путь корректен и расширение нужное, то вы получите два файла war3map.cpp и war3map.h.
  4. Завершить программу после получения файлов можно нажав любую клавишу.
Проект "Библиотека" это пример библиотеки для мапхака(IceFoga), и реализация запуска кода вашей карты в dll файле.
Уделю внимание на следующие классы в проекте:
  1. fMyString
Этот класс заменяет работу со строками. В нём реализована функция очищения памяти после использования объекта. Так что утечек после статического использование данного класса быть не должно.
  1. fMyArray
Этот класс принимает два параметра. Первый это обязательно массив двумерный для вашего типа данных. Почему двумерный? Потому, что не получилось реализовать одномерный для получения выражения от квадратных скобок. Пример: vMass[i][0] использования в коде элемента массива, а не vMass[i]. Объявление: fMyArray <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 10, вы можете в любой другой 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 1.26a) для проверки работоспособности данного конвертера.
Ссылка на архив со всеми файлами:
Вроде бы всё. Желаю удачных тестов.
`
ОЖИДАНИЕ РЕКЛАМЫ...