Игра 3.4: аналитика пояса падала на кинжале некроманта - нож не переключался (#79)
Inventory.SetStackAt до записи в слот зовёт LogToolBeltUsageEvent, та считает passive_effect без сущности и падает на значении из CVar (@$necroKnifeDamageCVar; в игре так же у мода modMeleeFortifyingGrip и админской одежды). Исключение телеметрии глотается финализатором, слот пишется как обычно. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
a747f5aa8d
commit
3938f1786a
@@ -0,0 +1,32 @@
|
|||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user