• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Union Union Framework: Union API

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.451
Благодарности
4.817
Баллы
625

1767600661376.png


 Union Framework: Union API

GitLab: Union Framework / Union API · GitLab
Wiki: Home · Wiki · Union Framework / Union API · GitLab
Прогресс: ~90%

Набор инструментов для модификации кода игры с открытым исходным кодом.
Union Framework предоставляет следующие основные возможности:
  • Перехват процедур
  • Прямое изменение памяти
  • События отслеживания загрузки библиотек
  • Управление общей памятью
  • Функции работы с VDFS
  • Инструменты работы со строками и их локализацией
Проект позволяет создавать полностью независимые плагины, которым не требуется предварительная установка каких-либо дополнительных пакетов (в том числе классический Union). При всем этом плагины на базе Union Framework смогут синхронизироваться к критических участках кода для обеспечения наилучшей совместимости.

Union Framework использует 3 метода перехвата процедур:
  1. Классический MS Detours хук модифицирует пролог целевой функции для переадресации вызова в другую
  2. Метод патчинга инструкций находит все возможные обращения к целевой функции и перенацеливает их в другую
  3. Частичный хук позволяет встроить в любой участок целевой функции другую C++ функцию
Для синхронизации перехватов между плагинами используется Общая память. Она позволяет не только использовать одинаковые методы аллокации памяти, но также и создавать специальные синглтоны, которые видны сразу всем плагинам процесса.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
10.752
Благодарности
7.468
Баллы
1.910
При попытке клонировать репу в студии:
Произошла ошибка при клонировании удаленного репозитория: Git failed with a fatal error.
the remote end hung up unexpectedly
Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status'
and retry with 'git restore --source=HEAD :/'
Хрен с ним, проигнорировал. В CMakeLists.txt поменял имя.
Что дальше?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.451
Благодарности
4.817
Баллы
625
Хз может с сетью что-то
В терминале зайди в каталог проекта, который ты склонировал, и выполни команды, которые он тебе выплюнул.
git status
git restore --source=HEAD :/
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
10.752
Благодарности
7.468
Баллы
1.910
Сделал. Как я понял перекачалось
Про то "зачем там GothicVDFS.exe" я пока спрашивать не буду. Меня интересует другой вопрос. Дальше то что делать?
Cmake орет что версия древняя.
в обозревателе вижу папку, и чо с ней делать?
Конфигурация проекта нифига не готическая...
1770730729499.png

ЗЫ. Клонировал через Team Explorer.
ЗЗЫ. Я с ГИТ ни когда не работал, и если честно я и дальше никогда не хочу с ним работать...
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.451
Благодарности
4.817
Баллы
625
зачем там GothicVDFS.exe
Чтобы твой плагин собирался и упаковывался прямо в git

Cmake орет что версия древняя.
Ну значит установленная версия cmake устаревшая или какая-то компонента, которой не видно в логе ошибки.
Как только cmake определится и будет построен кеш, у тебя подтянутся доступные пресеты для сборки длл.
ЗЫ. мы все пользуемся vs code
ЗЫЫ. студия неудобный хлам по части всего, что касается cmake
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
10.752
Благодарности
7.468
Баллы
1.910
тот еще геморрой пересаживаться на что-то новое. Ладно.
Скачал, установил, установил дополнительные компоненты согласно требованиям из вики, клонирую репу согласно инструкции и что я вижу
1770737745592.png

Не работает.
А да, там не выдавалось чтобы загружать все модули...
 
Последнее редактирование:

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.451
Благодарности
4.817
Баллы
625
Склонировал без --recursive, у тебя не скачались зависимости union api gothic api
Крч просто открой в терминале папку назначения, где у тебя должен лежать каталог плагина, и введи одну единственную команду. Я так делаю и для меня это самый быстрый способ. А дальше открываешь через vs code и она у тебя спрашивает под какую платформу собирать.
git clone --recursive https://github.com/Patrix9999/union-plugin-template.git имя_твоего_плагина
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
10.752
Благодарности
7.468
Баллы
1.910
С СДК было на много проще...
Так ладно, проект создался, даже скомпилировалось че-то.
Не вносил ни каких правок никуда, просто CTRL+SHIFT+B. В результате создался ВДФ файл весом 4 метра. И в нем две DLL Это нормально?
1770743284814.png


В Plugin.hpp пишу:
Union:
    auto HOOK_oCNpc_OnDamage_Script = Union::CreateHook(
        SIGNATURE_OF(&oCNpc::OnDamage_Script),
        &oCNpc::OnDamage_Script_Union
    );
    void oCNpc::OnDamage_Script_Union(oSDamageDescriptor& desc) {
        if (IsSelfPlayer() && GetWeaponMode() == NPC_WEAPON_MAG) {
            return;
        }
        (this->*HOOK_oCNpc_OnDamage_Script)(desc);
    }
Создаю файл oCNpc.inl в папке userapi, в нем: void OnDamage_Script_Union( oSDamageDescriptor& );
Во время написания кода прога все время орет, что есть ошибки. После компиляции орет только на oCNpc.inl, что в нем ошибки, на на это не обращаю внимания в студии так же было.
1770745343149.png

Есть еще вопрос: вот я создал хук на OnDamage_Script, народ им пользуется, кто-то еще создаст хук на тот же OnDamage_Script, в итоге что будет?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.451
Благодарности
4.817
Баллы
625
В результате создался ВДФ файл весом 4 метра. И в нем две DLL Это нормально?
Мы решили, что VDF по умолчанию должен поставляться с одним плагином и одной динамической зависимостью, в которой описывается логика работы union. Поэтому да, это нормально.

о время написания кода прога все время орет, что есть ошибки.
Так было всегда, потому что этот Inl включается прямо из класса и intellisense не понимает как это парсить.

Есть еще вопрос: вот я создал хук на OnDamage_Script, народ им пользуется, кто-то еще создаст хук на тот же OnDamage_Script, в итоге что будет?
Множественный перехват как правило не является какой-то большой проблемой. Могут возникнуть только логические, потому что, чтобы вызов ушел в следующую пользовательскую функцию, ему надо, чтобы другая пользовательская функция вызвала оригинальную реализацию, типа
(this->*HOOK_oCNpc_OnDamage_Script)(desc); <- если кто-то еще похукал функцию, то она тоже будет вызвана после этой строчки

Более того, уже готов адаптер, который все хуки классического union пересаживает на новый api. По этому поводу будет отдельная статья, ближе к релизу
 
Сверху Снизу