Начните вводить название — например, MoreHead, Sodium или PEAK

HookDOTS API — иконка
Обложка V RisingМод для V Rising

HookDOTS API

от cheesasaurus

Предоставляет API для модов для подключения систем Unity DOTS.

  • Эпический
  • 15,4 тыс. скачиваний
  • Версия 1.1.1
  • Обновлён 22 октября 2025
  • Не обновлялся больше года
  • Инструменты
  • Серверный

О моде HookDOTS API

HookDOTS API — мод для V Rising (Ви Райзинг) от автора cheesasaurus. Предоставляет API для модов для подключения систем Unity DOTS.

Его скачали 15,4 тыс. раз: это 20-е место среди модов V Rising в нашем каталоге, редкость — «эпический» (топ-20% по скачиваниям). Мод обновлялся в течение года, актуальная версия — 1.1.1.

Для работы ему нужны: BepInExPack V Rising.

Автор отметил совместимость с обновлениями игры: Oakveil.

Полное описание HookDOTS API

Текст автора на языке оригинала

HookDOTS API

HookDOTS is a modding library for hooking Unity DOTS games. By itself, it doesn't do anything.

Why use HookDOTS?

Harmony is an excellent tool, but it fails at one important thing: Hooking unmanaged systems in IL2CPP builds.\ HookDOTS was created to solve this problem.

Notable attributes provided (for plugin developers):

  • [EcsSystemUpdatePrefix(typeof(EquipItemSystem))]
  • [EcsSystemUpdatePostfix(typeof(EquipItemSystem))]
  • [WhenCreatedWorldsContainAny("Server", "Client_0")]

Installation

  1. Install BepInEx
  2. Extract HookDOTS.API.dll into (VRising folder)/BepInEx/plugins

Usage

For Server Operators

By itself, HookDOTS doesn't do anything. It is required by other plugins and should be kept up to date.

For Plugin Developers

How to use

1. Add a reference to the plugin.

dotnet add package HookDOTS.API -v 1.*

2. Add the API plugin as a dependency via the BepInDependency attribute on your plugin class.

[BepInPlugin(MyPluginInfo.PLUGIN_GUID, MyPluginInfo.PLUGIN_NAME, MyPluginInfo.PLUGIN_VERSION)]
[BepInDependency("HookDOTS.API")]
public class ExamplePlugin : BasePlugin

3. Register hooks in your plugin's Load method.

public override void Load()
{
    //... other initialization code

    // Register your plugin's hooks with HookDOTS
    _hookDOTS = new HookDOTS.API.HookDOTS(MyPluginInfo.PLUGIN_GUID, Log);
    _hookDOTS.RegisterAnnotatedHooks();
}

4. Teardown in your plugin's Unload method.

public override bool Unload()
{
    //... other unloading code

    _hookDOTS.Dispose();
    return true;
}

5. Set up prefix and postifx hooks for System OnUpdate calls. Both managed and unmanaged systems can be hooked.

public class ExamplePatch
{
    // The hook must be `public` and `static`.
    // If you want SystemState* passed in, an `unsafe` context is also required.
    [EcsSystemUpdatePrefix(typeof(EquipItemSystem))]
    unsafe public static bool ExamplePrefix(SystemState* systemState)
    {
        var world = systemState->World;
        ExamplePlugin.LogInstance.LogInfo($"ExamplePrefix executing in world {world.Name}.");

        // You can return false, to skip the hooked OnUpdate. Other prefix hooks will still run.
        bool shouldSkipTheOriginal = true;
        return !shouldSkipTheOriginal; // this will be returned, and is false. Therefore the original will be skipped.
    }

    [EcsSystemUpdatePrefix(typeof(EquipItemSystem))]
    unsafe public static bool ExamplePrefixNoSkip(SystemState* systemState)
    {
        // Prefer to use the AfterDetours constants instead of true/false.

        // return AfterDetours.SkipOriginalMethod;
        return AfterDetours.OkToRunOriginalMethod;
        
    }

    [EcsSystemUpdatePostfix(typeof(EquipItemSystem))]
    unsafe public static void ExamplePostfix(SystemState* systemState)
    {
        var world = systemState->World;
        ExamplePlugin.LogInstance.LogInfo($"ExamplePostfix executing in world {world.Name}.");
        // Unlike a prefix hook, a postfix hook cannot return false to skip anything.
        // The only valid return type is `void`.
    }

}

onlyWhenSystemRuns

You can set onlyWhenSystemRuns to false, and the hook will be called even if the system doesn't actually run.

[EcsSystemUpdatePrefix(typeof(EquipItemSystem), onlyWhenSystemRuns: false)]
public static void ExamplePrefix2()
{
    // (this is commented out, because the log would be spammed every frame)
    // ExamplePlugin.LogInstance.LogInfo($"ExamplePrefix2 executing");
}

Throttling

If you're using hooks to dump information and don't want to be flooded every frame, the Throttle attribute can be used.

// You can specify `days`, `hours`, `minutes`, `seconds`, and `milliseconds` to define the throttle interval.
// Internally, these are used to create a `System.TimeSpan`
[Throttle(seconds: 10)]
[EcsSystemUpdatePrefix(typeof(EquipItemSystem), onlyWhenSystemRuns: false)]
public static void ExamplePrefixThrottled()
{
    ExamplePlugin.LogInstance.LogInfo($"ExamplePrefixThrottled executing (throttled to once every 10 seconds)");
}

Alternative ways to register hooks

Procedurally, using a HookRegistrar:

var hookDOTS = new HookDOTS.API.HookDOTS(MyPluginInfo.PLUGIN_GUID, Log);
//...
var hook = HookDOTS.Hooks.System_OnUpdate_Prefix.CreateHook(MyHookMethod);
hookDOTS.HookRegistrar.RegisterHook_System_OnUpdate_Prefix(hook);

Builder style, using SetupHooks:

var hookDOTS = new HookDOTS.API.HookDOTS(MyPluginInfo.PLUGIN_GUID, Log);
//...
hookDOTS
    .SetupHooks()
        .BeforeSystemUpdates()
            .ExecuteDetour(MyMethodA).Always()
            .And()
            .ExecuteDetour(MyMethodB).Always()
    .Also()
        .AfterSystemUpdates()
            .ExecuteAction(MyMethodC).Throttled(seconds: 2)
    .Also()
        .BeforeSystemUpdates(onlyWhenSystemRuns: false)
            .ExecuteDetour(MyMethodD).Throttled(seconds: 5)
    .RegisterChain();
    // be sure to call RegisterChain! Otherwise the entire chain will be discarded.

World Readiness triggers for Initialization

There are world readiness checks/triggers if you need to defer something until after worlds are created.

Worlds are immediately checked during hook registration, in case they were already set up.\ Each r

Описание длинное — здесь его начало. Читать целиком на странице автора

Нужно для работы

В r2modman ставится автоматически

Моды, которым нужен HookDOTS API

10 в каталоге · показаны самые популярные

KindredLogistics — иконка

KindredLogistics

Мод управления запасами. Хранение, вытаскивание, нахождение сундуков и т.д.

Легендарный48,2 тыс.Библиотека

RaidForge — иконка

RaidForge

Тонны вариантов конфигурации

Редкий3,9 тыс.Серверный

Soul Bloodcraft PvE Mod Pack — иконка

Soul Bloodcraft PvE Mod Pack

Все клиентские модификации для сервера Soul PvE Bloodcraft.

Редкий1,8 тыс.

EventScheduler — иконка

EventScheduler

Позволяет операторам серверов планировать повторяющиеся события.

Обычный938Инструменты

Satisvampory — иконка

Satisvampory

Модифицированная вилка KindredLogistics (Odjit, Zfolmt): scoop, Clan Share, ремни с колпачками / резервами, быстрый депозит, тайник слуги, повторные охоты, переключатели администратора.

Обычный736Серверный

LoadoutLockdown — иконка

LoadoutLockdown

Ограниченное (или неограниченное) оснащение снаряжения, как в бою, так и вне его. Полностью настраиваемый.

Обычный660Серверный

Как установить HookDOTS API

Файл скачивается с официального сервера Thunderstore, без перезаливов и сторонних установщиков

Подробная инструкция для V Rising
  1. Скачайте менеджер модов r2modman (или Gale) и выберите в нём игру V Rising.
  2. Создайте профиль — так моды не смешаются с чистой версией игры.
  3. Найдите «HookDOTS API» во вкладке Online и нажмите Download — BepInEx и все зависимости подтянутся сами.
  4. Нажмите «Start modded» — игра запустится с модами.
  5. Чтобы сыграть без модов, запустите игру как обычно из Steam — r2modman не трогает чистую версию игры.
Вы автор мода? Поставьте ссылку на русское описание

Вставьте значок в описание на Thunderstore, в README или в Discord — русскоязычные игроки сразу попадут на страницу с переводом и инструкцией.

Описание на русском — Модка
Markdown[![Описание на русском — Модка](https://modka.app/badge.png)](https://modka.app/v-rising/cheesasaurus-hookdots-api/)
HTML<a href="https://modka.app/v-rising/cheesasaurus-hookdots-api/"><img src="https://modka.app/badge.png" alt="Описание на русском — Модка" height="44"></a>
Steam (BBCode)[url=https://modka.app/v-rising/cheesasaurus-hookdots-api/]Описание на русском — Модка[/url]

Частые вопросы о HookDOTS API

Как установить HookDOTS API?

Скачайте менеджер модов r2modman (или Gale) и выберите в нём игру V Rising. Создайте профиль — так моды не смешаются с чистой версией игры. Найдите «HookDOTS API» во вкладке Online и нажмите Download — BepInEx и все зависимости подтянутся сами. Нажмите «Start modded» — игра запустится с модами. Чтобы сыграть без модов, запустите игру как обычно из Steam — r2modman не трогает чистую версию игры.

Безопасен ли HookDOTS API?

Файл скачивается с официального сервера Thunderstore, куда его загрузил cheesasaurus. Мы не перезаливаем и не изменяем моды.

Что нужно для работы HookDOTS API?

Установите вместе с ним: BepInExPack V Rising. В менеджере модов зависимости подтягиваются автоматически.

Когда HookDOTS API обновлялся последний раз?

22 октября 2025, актуальная версия — 1.1.1. Это больше года назад: перед установкой проверьте, работает ли мод на текущей версии игры.

Похожие моды

Все моды на V Rising
SoulPvEServerClientModPack1 — иконка

SoulPvEServerClientModPack1

Все клиентские моды для сервера Soul PvE.

Редкий2,9 тыс.Серверный

SystemsDumper — иконка

SystemsDumper

Инструмент развития. Информация о системе ECS.

Обычный492Инструменты

Intro Skip — иконка

Intro Skip

Пропустите интро видео прямо в главное меню

Редкий3,1 тыс.Серверный

ScarletHooks — иконка

ScarletHooks

Продвинутая интеграция webhook для серверов V Rising. Отправьте чат, логин / логаут, PvP убивает, а VBlood побеждает в Discord. Функции admin/public/clan-specific logs с настраиваемым форматированием.

Редкий2,1 тыс.Серверный

JSONRising — иконка

JSONRising

GUI JSON Editor for V Rising Mods

Обычный1,4 тыс.Инструменты