Порт на игру 3.4: замок ячеек, бросок на пустое место окна, проверка версии (#79)

- 3.4 убрала XUiC_ContainerStandardControls.ToggleLockMode: замок при обыске
  крысой/волком и у сумки волка запрещается в сеттере UserLockMode.
- 3.4 кладёт предмет, брошенный на пустое место окна, прямо в ящик/мешок/
  рюкзак (dropItemToGrid) мимо запертых ячеек - при обыске отказ.
- GameVersionGuard: мод собран под 3.4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
AlexCube
2026-10-24 13:57:50 +03:00
co-authored by Claude Opus 5.5
parent 945b03dfea
commit a747f5aa8d
5 changed files with 63 additions and 5 deletions
+42 -1
View File
@@ -487,7 +487,6 @@ namespace NecromancerTome
yield return AccessTools.Method(typeof(XUiC_ContainerStandardControls), nameof(XUiC_ContainerStandardControls.MoveFillAndSmart));
yield return AccessTools.Method(typeof(XUiC_ContainerStandardControls), nameof(XUiC_ContainerStandardControls.MoveFillStacks));
yield return AccessTools.Method(typeof(XUiC_ContainerStandardControls), nameof(XUiC_ContainerStandardControls.MoveSmart));
yield return AccessTools.Method(typeof(XUiC_ContainerStandardControls), nameof(XUiC_ContainerStandardControls.ToggleLockMode));
}
public static bool Prefix(XUiC_ContainerStandardControls __instance, System.Reflection.MethodBase __originalMethod)
@@ -504,6 +503,48 @@ namespace NecromancerTome
}
}
/// <summary>Замок ячеек при обыске не включается. В 3.4 ToggleLockMode нет: замок - свойство UserLockMode, кнопка -
/// XUiC_ButtonSelectable (её подсветку снимаем, иначе кнопка осталась бы «нажатой»).</summary>
[HarmonyPatch(typeof(XUiC_ContainerStandardControls), nameof(XUiC_ContainerStandardControls.UserLockMode), MethodType.Setter)]
public static class Patch_UserLockMode
{
public static bool Prefix(XUiC_ContainerStandardControls __instance, bool value)
{
if (!value || !Viewing)
{
return true;
}
if (__instance.btnToggleLockMode != null)
{
__instance.btnToggleLockMode.IsSelected = false;
}
return false;
}
}
/// <summary>3.4: предмет, брошенный на пустое место окна (не в ячейку), игра кладёт прямо в ящик, мешок или рюкзак
/// (dropItemToGrid) - мимо запертых ячеек. При обыске - отказ, предмет остаётся в руке.</summary>
[HarmonyPatch]
public static class Patch_DropItemToGrid
{
static System.Collections.Generic.IEnumerable<System.Reflection.MethodBase> TargetMethods()
{
yield return AccessTools.Method(typeof(XUiC_LootContainer), nameof(XUiC_LootContainer.dropItemToGrid));
yield return AccessTools.Method(typeof(XUiC_BagContainer), nameof(XUiC_BagContainer.dropItemToGrid));
yield return AccessTools.Method(typeof(XUiC_Backpack), nameof(XUiC_Backpack.dropItemToGrid));
}
public static bool Prefix()
{
if (!Viewing)
{
return true;
}
Deny();
return false;
}
}
/// <summary>Щелчок по запертой ячейке контейнера - отказ «рюкзак полон».</summary>
[HarmonyPatch(typeof(XUiC_ItemStack), nameof(XUiC_ItemStack.Update))]
public static class Patch_ItemStack_Update