❓ Как навсегда удалить торговца Холдора в Valheim с помощью мода на C#?

Я разрабатываю мод для игры Valheim и хочу навсегда удалить НПС Холдора (торговца) из мира. В данный момент использую следующий метод, чтобы найти и удалить объект Trader:

public static string RemoveOriginalHaldorCommand(Terminal.ConsoleEventArgs args)
{
    var traders = UnityEngine.Object.FindObjectsOfType<Trader>();
    foreach (var trader in traders)
    {
        if (trader.name == "Haldor" || trader.name == "Haldor(Clone)")
        {
            UnityEngine.Object.Destroy(trader.gameObject);
            Console.instance.Print("❌ Оригинальный Холдор был удалён (только для тестирования).");
            return null;
        }
    }

    Console.instance.Print("⚠️ Оригинальный Холдор не найден.");
    return "Оригинальный Холдор не найден.";
}

? Что работает:

  • Халдор удаляется в текущей игровой сессии.

? Проблема:

  • После выхода из мира и повторного входа он снова появляется.

  • Если заспавнить дополнительного Холдора вручную, то после выхода и входа — оба остаются.

  • Каждый раз после входа их становится всё больше — видимо, где-то они сохраняются или переинициализируются.

? Что я уже пробовал:

  1. Использую Object.Destroy() на Trader-объекты.

  2. Проверил, что объект действительно удаляется из сцены.

  3. Убедился, что после перезахода в игру — он появляется заново.

? Что подозреваю:

  • Его спавн завязан на ZDO или ZNetView.

  • Возможно, он привязан к мировому маркеру через ZoneSystem.

  • Может быть, создаётся жёстко прописанным способом где-то в Awake() или Start().

❓ Вопрос:

  1. Как можно навсегда удалить Холдора из мира?

  2. Как корректно удалить или заблокировать его ZDO?

  3. Есть ли способ отключить его спавн через патч или хук?

  4. Как предотвратить его автоматическое создание при загрузке мира?

? Буду благодарен за советы, опыт, хаки или даже костыли — главное, чтобы работало. Если нужно больше деталей — скину что угодно, хоть мир, хоть репку.


Ответы (0 шт):