using System; using HarmonyLib; using UnityEngine; namespace NecromancerTome { /// /// Баг игры 3.4 (найден 24.10.2026: «словил ошибку при переключении ножа», #79). Inventory.SetStackAt /// ДО записи в слот пояса зовёт новую аналитику LogToolBeltUsageEvent; та считает характеристики /// предмета через EffectManager.GetValue без сущности (_entity = null), и у passive_effect со /// значением из CVar (у кинжала некроманта value="@$necroKnifeDamageCVar") PassiveEffect.ModifyValue /// падает на _ea.Buffs. Исключение вылетает раньше ItemGrid.SetItem - нож не меняется, слот не пишется. /// /// Лечение: аналитика - только телеметрия игры, её исключение глотаем (Finalizer), SetStackAt /// продолжает и пишет слот как обычно. Предупреждение в лог - один раз за запуск. /// [HarmonyPatch(typeof(Inventory), nameof(Inventory.LogToolBeltUsageEvent))] public static class Patch_Inventory_LogToolBeltUsageEvent_Guard { static bool _warned; public static Exception Finalizer(Exception __exception) { if (__exception != null && !_warned) { _warned = true; Debug.LogWarning("[NecromancerTome] ToolBeltAnalyticsGuard: game analytics failed in Inventory.LogToolBeltUsageEvent, ignored: " + __exception.Message); } return null; } } }