Files
AlexCubeandClaude Opus 5.5 3938f1786a Игра 3.4: аналитика пояса падала на кинжале некроманта - нож не переключался (#79)
Inventory.SetStackAt до записи в слот зовёт LogToolBeltUsageEvent, та считает
passive_effect без сущности и падает на значении из CVar (@$necroKnifeDamageCVar;
в игре так же у мода modMeleeFortifyingGrip и админской одежды). Исключение
телеметрии глотается финализатором, слот пишется как обычно.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 14:21:09 +03:00

33 lines
1.6 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using HarmonyLib;
using UnityEngine;
namespace NecromancerTome
{
/// <summary>
/// Баг игры 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
/// продолжает и пишет слот как обычно. Предупреждение в лог - один раз за запуск.
/// </summary>
[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;
}
}
}