Добавлен , опубликован
Программы
Предназначение:
Работа с кодом
Версия игры: 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
17
3 года назад
2
Если вы считаете, что эффективнее писать все свое, чем брать готовое, то это ваше личное мнение
Если вы считаете, что это никому не нужно, то это ваше личное мнение
Если вы считаете, что знание костылей jass и blizzard VM - полезное знание для дальнейшей жизни, то это ваше личное мнение
Если вы считаете что это его личное мнение, это ваше личное мнение.
2
15
3 года назад
2
А вот и приближение к моей старой хотелке. Писать код на Google Go.
1
32
3 года назад
1
Vlod, мда, уже не в те дебри понесло, просто бездумный флуд лиж бы че то написать.
Какое это отношение имеет к модмейкингу в варкравте на текущем уровне? Тебе привели 101 пример почему этого небудет и никому это ненадо, он начал расказывать какой жасс плохой. Чувак кеп курит в сторонке, но за 20 лет вы этот жасс не осилили, где собственно по сравнению с си или питоном то и учить нечего, а без понимания работы движка игры - че ты можешь сделать? Какое готовое, ау? Что ты готового можешь добавить в игру? OpenGl? Вот что? Еще раз, у тебя нет и не будет исходников, ты работаешь с готовой закрытой архитектурой, где изменить что то глобальное- нельзя, переписывать с нуля - будет сложнее чем тупо портировать игру на другой двиг.
Все ваши загрузки, подгрузи - это стандартное win.api, можно догружать в процессе игры данные, но этот путь доказал свою ненадежность, более того питона для этого как и луа не потребовалось, 1 вызов функции вин айпи на мемхаке.

Навреное круто будет 4 к сделать (нет)... Ну дальше можно перечислять бесконечно + а что уж тогда мешает взять тот же юнити, или чтонить еше (насчет гугл, ага мега ИИ, на ютубе такого позора еще не видели, гуглим AlphaStar sc2 fails )
1
18
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, так что, примеры из него не получится использовать с последними версиями.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.