Skip to content

Latest commit

 

History

History
67 lines (60 loc) · 4.62 KB

README_RU.md

File metadata and controls

67 lines (60 loc) · 4.62 KB

ByNameModding

English | Русский

ByNameModding - это библиотека для моддинга Unity-игр по именам классов, методов, полей. Данная редакция ориентирована на работу на Android с il2cpp. Библиотека включает в себя все, что вам нужно для моддинга игр на Unity.
Требуется минимум C++20.

Что можно делать с BNM?

  1. Искать всё по именам (классы, методы, поля и т. д.).
  2. Искать Generic классы и методы.
  3. Добавлять в игру ваши собственные классы, которые работают даже с AssetBundles!
  4. Изменять классы игры, добавляя в них поля и методы.
  5. Использовать обычные структуры С#, например, строки (Mono::String) или словари (Mono::Dictionary), которые полностью работают.

Новые классы

BNM может добавить ваши собственные классы в игру.
Если вы наследуете свой класс от MonoBehaviour (или другой любой класс с событиями), будут работать такие методы, как Update.
И это полностью совместимо с AssetBundles!
Для пакетов данных нужно добавить свой класс в библиотеки dll, перечисленные в ScriptingAssemblies.json.
По умолчанию BNM добавляет классы к Assembly-CSharp.dll, который всегда есть в этом списке.
Если вы хотите использовать свой dll с пакетами данных, добавьте dll в этот файл. Но это будет работать только в том случае, если вы используете BNM внутренне.

Начало работы:

  • сначала клонируйте репозиторий и добавьте его в свой проект;
  • установите версию C++ на 20 или выше;
  • добавьте код ниже в зависимости от того, что вы используете:
    Android.mk
    BNM_PATH := $(LOCAL_PATH)/путь/до/ByNameModding
    LOCAL_C_INCLUDES += $(BNM_PATH)/include $(BNM_PATH)/external/include
    LOCAL_STATIC_LIBRARIES += BNM
    # ...
    include $(BUILD_SHARED_LIBRARY)
    # ...
    include $(CLEAR_VARS)
    include $(BNM_PATH)/Android.mk
    CMakeLists.txt
    add_subdirectory(путь/до/ByNameModding EXCLUDE_FROM_ALL)
    get_property(BNM_INCLUDE_DIRECTORIES TARGET BNM PROPERTY BNM_INCLUDE_DIRECTORIES)
    
    # ...
    
    target_include_directories(
        # Имя вашей библиотеки
        PUBLIC
        ${BNM_INCLUDE_DIRECTORIES}
        # ...
    )
    target_link_libraries(
        # Имя вашей библиотеки
        PUBLIC
        BNM
        # ...
    )
  • измените UNITY_VER, добавьте свой шифровщик строк и ПО для подмены методов, раскомментируйте BNM_DOTNET35, если игра использует .NET 3.5 в GlobalSettings.hpp;
  • смотрите примеры или добавьте их в свой проект, чтобы понять, как работать с BNM.

Поддерживаемые версии Unity: 5.6.4f1, 2017.x - 6000.0.x

Зависимости

UTF8-CPP используется в il2cpp и в BNM тоже.
Open-hierarchy custom RTTI используется для оптимизации использования памяти

ПО для подмены методов на Android:

Dobby
ShadowHook
Substrate с And64InlineHook - не поддерживают отмену подмены