diff --git a/HarmonySrc/CinerariumLogist.cs b/HarmonySrc/CinerariumLogist.cs
index ffdf499..bbdf03e 100644
--- a/HarmonySrc/CinerariumLogist.cs
+++ b/HarmonySrc/CinerariumLogist.cs
@@ -61,18 +61,39 @@ namespace NecromancerTome
}
}
- /// Меню блока с урной логиста в руке: к пунктам игры - второй вид (подставка / у стены).
+ /// Меню блока с урной логиста в руке: к пунктам игры - второй вид (подставка / у стены).
+ /// 23.10 (#77, «зажимаю R - только вращает»): у блока с одним простым поворотом игра в конце SetupBlockShapeData зовёт
+ /// SetCommonData с одним пунктом - и сразу выполняет его (поворот) и закрывает меню; пункт, добавленный после (постфикс),
+ /// попадал в уже закрытое меню. Поэтому наш пункт и наш обработчик ставятся в самом SetCommonData этого вызова - до
+ /// подсчёта пунктов. Короткое нажатие R по-прежнему поворачивает (пункт «-1» уходит игре).
[HarmonyPatch(typeof(XUiC_Radial), nameof(XUiC_Radial.SetupBlockShapeData))]
public static class Patch_XUiC_Radial_SetupBlockShapeData_LogistForm
{
- public static void Postfix(XUiC_Radial __instance)
+ /// Идёт сборка меню блока с урной логиста в руке.
+ public static bool Building;
+
+ public static void Prefix(XUiC_Radial __instance)
{
- EntityPlayerLocal pl = __instance.xui?.playerUI?.entityPlayer;
- ItemClass held = pl?.inventory?.holdingItem;
- if (!CinerariumLogistForm.IsLogistItem(held))
+ Building = CinerariumLogistForm.IsLogistItem(__instance.xui?.playerUI?.entityPlayer?.inventory?.holdingItem);
+ }
+
+ public static void Postfix()
+ {
+ Building = false;
+ }
+ }
+
+ [HarmonyPatch(typeof(XUiC_Radial), nameof(XUiC_Radial.SetCommonData))]
+ public static class Patch_XUiC_Radial_SetCommonData_LogistForm
+ {
+ public static void Prefix(XUiC_Radial __instance, ref XUiC_Radial.CommandHandlerDelegate _commandHandlerFunc)
+ {
+ if (!Patch_XUiC_Radial_SetupBlockShapeData_LogistForm.Building)
{
return;
}
+ Patch_XUiC_Radial_SetupBlockShapeData_LogistForm.Building = false;
+ ItemClass held = __instance.xui.playerUI.entityPlayer.inventory.holdingItem;
bool wall = held.Name == TEFeatureCinerarium.LogistWallBlockName || held.Name == TEFeatureCinerarium.LogistWallSkullBlockName;
if (wall)
{
@@ -82,30 +103,7 @@ namespace NecromancerTome
{
__instance.CreateRadialEntry(CinerariumLogistForm.MenuWall, TEFeatureCinerarium.LogistWallBlockName, "ItemIconAtlas", "", Localization.Get("necroCinerariumLogistFormWall"));
}
- __instance.SetCommonData(UIUtils.GetButtonIconForAction(__instance.xui.playerUI.playerInput.Activate), CinerariumLogistForm.OnBlockMenu,
- new XUiC_Radial.RadialContextHoldingSlotIndex(pl.inventory.holdingItemIdx), -1, true, XUiC_Radial.RadialValidSameHoldingSlotIndex);
- Debug.Log("[NecromancerTome] LogistForm: меню блока - " + held.Name + ", пунктов " + __instance.currentEnabledEntriesCount());
- }
- }
-
- /// Диагностика #77 (23.10.2026: «зажимаю R - меню не открывается, только поворот»): на нажатие R с урной-логистом в
- /// руке - что видит игра (блок ли в руке, не считает ли предмет оружием). Убрать, когда причина найдена.
- [HarmonyPatch(typeof(PlayerMoveController), nameof(PlayerMoveController.Update))]
- public static class Patch_PlayerMoveController_Update_LogistFormDiag
- {
- public static void Postfix(PlayerMoveController __instance)
- {
- EntityPlayerLocal pl = __instance.entityPlayerLocal;
- PlayerActionsLocal inp = __instance.playerInput;
- if (pl?.inventory == null || inp == null || !CinerariumLogistForm.IsLogistItem(pl.inventory.holdingItem) ||
- !(inp.Reload.WasPressed || inp.PermanentActions.Reload.WasPressed))
- {
- return;
- }
- XUiC_Radial r = __instance.playerUI?.xui?.RadialWindow;
- Debug.Log("[NecromancerTome] LogistForm: R - " + pl.inventory.holdingItem.Name + ", блок " + (pl.inventory.GetHoldingBlock() != null) +
- ", оружие " + pl.inventory.IsHoldingGun() + "/" + pl.inventory.IsHoldingDynamicMelee() + ", смена руки " + pl.inventory.IsHandSwitching() +
- ", меню " + (r != null && r.IsOpen) + ", модальное " + (__instance.playerUI?.windowManager?.IsModalWindowOpen() ?? false));
+ _commandHandlerFunc = CinerariumLogistForm.OnBlockMenu;
}
}