Добавлен , опубликован
Предназначение:
Версия игры: 1.26a
При помощи этой системы можно встроить в карту динамические библиотеки (Win32/DLL).
Это может помочь тем, кто не хочет писать сценарий карты на JASS, а предпочитает другие языки как: C, C++, Rust, Pascal... Если поднапрячься с загрузкой виртуальной машины, то можно использовать и языки вроде Python, Lua, Ruby, C#, Java.
Нет нужды просить игроков установить специальные лаунчеры — всё уже встроено в карту.

Работа системы

Сначала, предоставленный JASS-скрипт, используя уязвимости в виртуальной машине, выделяет исполняемую память и записывает туда мини-программу, которая распаковывает и загружает библиотеку "bin\Loader.dll", после чего вызывает её функцию "DoIt". Та же, в свою очередь, распаковывает и загружает библиотеки, перечисленные в списке "libraries" файла "config.json".
Когда игра собирается уничтожить главный поток JASS-скрипта, система выгружает все ранее загруженные библиотеки в обратном порядке и удаляет их файлы из временной директории.
Также чистка временного хранилища происходит при начале работы системы, на случай, если в прошлый раз мусор не был удален из-за нештатного завершения игры.
Поддерживается запуск множества экземпляров игры — у каждого процесса своё личное хранилище.
По завершению игры загрузчик остается в памяти, так как он не может выгрузить сам себя.
При запуске, система проверяет остался ли с прошлого раза висящий загрузчик и если обнаруживает такой, то выгружает его. Так что, они не будут накапливаться.

Установка

  • Скачайте архив и распакуйте куда-нибудь.
  • Импортируйте в карту "bin\Loader.dll" и "scripts\common.j".
  • Импортируйте в карту требуемые библиотеки.
  • Пропишите путь к своим библиотекам в "config.json" и импортируйте его тоже.
  • Скопируйте в карту код из "loader.j" (используется cjass).

Пример

Можете ознакомиться с моим примером:
  • pascal.w3x — карта со внедренными библиотеками.
  • ExampleSource.zip — исходники библиотеки со сценарием на FreePascal.
На карте создается толпа вражеских рабочих и один злой работник для вас.
Когда он смотрит на других, применяя свою способность, их разрывает в клочья.
Для работы с нативками используются JassAPI и RedirectCalls.

Генератор кода

В примере выше используется файл "jass_common_j.pas" сгенерированный на основе "common.j".
Прикладываю исходники генератора на python'е (зависит от funcparserlib) на случай, если кто-то захочет сгенерировать привязку для других языков.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
19
Зачем синхронизировать то, что и так есть на клиентах всех игроков?
Если скрипт на компьютере одного игрока решит, что нужно запросить помощь, то и на других компьютерах те прийдут к тому же выводу, ведь всё исполняется синхронно.
11
Проблема с синхронизацией была в сишных потоках и __stdcall освобождал память после завершения функции.
11
IceFog, а ты сможешь сделать перед запуском файла .json определитель ОС и разрядности архитектуры, чтобы запустить разные файлы .json. Это нужно для загрузки на машинах x86 библиотек x86 и x64 соответственно для функций <boost>.
20
IceFog, а ты сможешь сделать перед запуском файла .json определитель ОС и разрядности архитектуры, чтобы запустить разные файлы .json. Это нужно для загрузки на машинах x86 библиотек x86 и x64 соответственно для функций <boost>.
Варкрафт 3 всегда х86 (не считая рефу), какой толк от х64, если его х86 приложения всё-равно не поймут?
11
IceFog, а ты сможешь сделать перед запуском файла .json определитель ОС и разрядности архитектуры, чтобы запустить разные файлы .json. Это нужно для загрузки на машинах x86 библиотек x86 и x64 соответственно для функций <boost>.
Варкрафт 3 всегда х86 (не считая рефу), какой толк от х64, если его х86 приложения всё-равно не поймут?
Это нужно для своей dll а не для варкрафта.
20
Твоя длл точно так же может лишь в х86 работать. Нельзя подключать х86 библиотеку к х64 и наоборот. Потому нет смысла о х64 заморачиваться вообще.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.