Добавлен , опубликован
Программы
Предназначение:
Работа с кодом
Версия игры: 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) на случай, если кто-то захочет сгенерировать привязку для других языков.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
2
15
3 года назад
2
А вот и приближение к моей старой хотелке. Писать код на Google Go.
1
32
3 года назад
1
Vlod, мда, уже не в те дебри понесло, просто бездумный флуд лиж бы че то написать.
Какое это отношение имеет к модмейкингу в варкравте на текущем уровне? Тебе привели 101 пример почему этого небудет и никому это ненадо, он начал расказывать какой жасс плохой. Чувак кеп курит в сторонке, но за 20 лет вы этот жасс не осилили, где собственно по сравнению с си или питоном то и учить нечего, а без понимания работы движка игры - че ты можешь сделать? Какое готовое, ау? Что ты готового можешь добавить в игру? OpenGl? Вот что? Еще раз, у тебя нет и не будет исходников, ты работаешь с готовой закрытой архитектурой, где изменить что то глобальное- нельзя, переписывать с нуля - будет сложнее чем тупо портировать игру на другой двиг.
Все ваши загрузки, подгрузи - это стандартное win.api, можно догружать в процессе игры данные, но этот путь доказал свою ненадежность, более того питона для этого как и луа не потребовалось, 1 вызов функции вин айпи на мемхаке.

Навреное круто будет 4 к сделать (нет)... Ну дальше можно перечислять бесконечно + а что уж тогда мешает взять тот же юнити, или чтонить еше (насчет гугл, ага мега ИИ, на ютубе такого позора еще не видели, гуглим AlphaStar sc2 fails )
1
17
3 года назад
1
Сами работайте со своим win.api
Можете сначала ознакомиться с малой частью того что уже есть
1
14
3 года назад
1
Всё возможно уже сейчас, в своей библиотеке, пользователь может и виртуальную машину python'а загрузить, и игру на Unity запустить.
1
1
3 года назад
1
Вопрос, библиотеку можно задействовать только для переноса кода или для хранения, к примеру, моделей тоже может сгодится?
1
14
3 года назад
1
Ты собираешься встроить в карту mix-архив?
Разве в этом есть какой-либо толк?
Как бы то ни было, у моей системы не должно быть проблем с их загрузкой.
1
9
11 месяцев назад
1
IceFog, в твоих исходниках Example\Natives.pas, есть две одинаковые константы
ITEM_TYPE_POWERUP: HITEMTYPE = 2;
ITEM_TYPE_TOME: HITEMTYPE = 2;
Это ошибка или нет?
Если посудить ITEM_TYPE один и тот же.
3
14
11 месяцев назад
3
Этот файл автоматически сгенерирован на основе "common.j".
Отрывок из common.j
constant itemtype ITEM_TYPE_PERMANENT                   = ConvertItemType(0)
constant itemtype ITEM_TYPE_CHARGED                     = ConvertItemType(1)
constant itemtype ITEM_TYPE_POWERUP                     = ConvertItemType(2)
constant itemtype ITEM_TYPE_ARTIFACT                    = ConvertItemType(3)
constant itemtype ITEM_TYPE_PURCHASABLE                 = ConvertItemType(4)
constant itemtype ITEM_TYPE_CAMPAIGN                    = ConvertItemType(5)
constant itemtype ITEM_TYPE_MISCELLANEOUS               = ConvertItemType(6)
constant itemtype ITEM_TYPE_UNKNOWN                     = ConvertItemType(7)
constant itemtype ITEM_TYPE_ANY                         = ConvertItemType(8)
// Deprecated, should use ITEM_TYPE_POWERUP
constant itemtype ITEM_TYPE_TOME                        = ConvertItemType(2)
1
9
11 месяцев назад
1
Интересно, но это будет работать с мультиплеерными картами?
3
14
11 месяцев назад
Отредактирован IceFog
3
Интересно, но это будет работать с мультиплеерными картами?
Разумеется, в этом и есть вся суть. Нет нужды просить всех игроков качать специальные лаунчеры, которые добавят новые возможности, карта сама распакует и загрузит DLL'ки.
Учтите, что данный ресурс использует старые версии JassAPI и RedirectCalls, так что, примеры из него не получится использовать с последними версиями.
1
14
11 месяцев назад
1
Вышла новая версия!
  • Адаптировал к новым версиям JassAPI и RedirectCalls.
  • Больше деталей о работе системы.
  • Выложил исходники cJASS-скрипта и встроенной в него программы.
  • Упростил процесс установки.
  • Приложил генератор кода для нативок.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.