diff --git a/HarmonySrc/ToolBeltAnalyticsPatch.cs b/HarmonySrc/ToolBeltAnalyticsPatch.cs new file mode 100644 index 0000000..ef26683 --- /dev/null +++ b/HarmonySrc/ToolBeltAnalyticsPatch.cs @@ -0,0 +1,32 @@ +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; + } + } +} diff --git a/NecromancerHarmony.dll b/NecromancerHarmony.dll index 6bd7861..afc92ba 100644 Binary files a/NecromancerHarmony.dll and b/NecromancerHarmony.dll differ diff --git a/NecromancerHarmony.pdb b/NecromancerHarmony.pdb index 16ac0dc..516eb61 100644 Binary files a/NecromancerHarmony.pdb and b/NecromancerHarmony.pdb differ