diff --git a/HarmonySrc/GameVersionGuard.cs b/HarmonySrc/GameVersionGuard.cs index 8ecfe59..a994ac7 100644 --- a/HarmonySrc/GameVersionGuard.cs +++ b/HarmonySrc/GameVersionGuard.cs @@ -29,10 +29,10 @@ namespace NecromancerTome /// public static class GameVersionGuard { - /// Под какую версию собран мод: Major и десяток Minor (3.3.x = 3 и 3; сборка 1.4.x была под 3.2). + /// Под какую версию собран мод: Major и десяток Minor (3.4.x = 3 и 4; 1.5-1.6 были под 3.3, 1.4.x - под 3.2). public const int SupportedMajor = 3; - public const int SupportedMinorTens = 3; - public const string SupportedText = "3.3"; + public const int SupportedMinorTens = 4; + public const string SupportedText = "3.4"; private static bool? supported; diff --git a/HarmonySrc/RatLoot.cs b/HarmonySrc/RatLoot.cs index aa8bc1c..51f96df 100644 --- a/HarmonySrc/RatLoot.cs +++ b/HarmonySrc/RatLoot.cs @@ -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 } } + /// Замок ячеек при обыске не включается. В 3.4 ToggleLockMode нет: замок - свойство UserLockMode, кнопка - + /// XUiC_ButtonSelectable (её подсветку снимаем, иначе кнопка осталась бы «нажатой»). + [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; + } + } + + /// 3.4: предмет, брошенный на пустое место окна (не в ячейку), игра кладёт прямо в ящик, мешок или рюкзак + /// (dropItemToGrid) - мимо запертых ячеек. При обыске - отказ, предмет остаётся в руке. + [HarmonyPatch] + public static class Patch_DropItemToGrid + { + static System.Collections.Generic.IEnumerable 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; + } + } + /// Щелчок по запертой ячейке контейнера - отказ «рюкзак полон». [HarmonyPatch(typeof(XUiC_ItemStack), nameof(XUiC_ItemStack.Update))] public static class Patch_ItemStack_Update diff --git a/HarmonySrc/WolfBag.cs b/HarmonySrc/WolfBag.cs index d61e2f3..9510eaa 100644 --- a/HarmonySrc/WolfBag.cs +++ b/HarmonySrc/WolfBag.cs @@ -690,7 +690,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) @@ -699,6 +698,24 @@ namespace NecromancerTome } } + /// Замок ячеек у сумки волка не включается (в 3.4 вместо ToggleLockMode - свойство UserLockMode). + [HarmonyPatch(typeof(XUiC_ContainerStandardControls), nameof(XUiC_ContainerStandardControls.UserLockMode), MethodType.Setter)] + public static class Patch_ContainerStandardControls_UserLockMode_WolfBag + { + public static bool Prefix(XUiC_ContainerStandardControls __instance, bool value) + { + if (!value || !WolfBagControls.Blocked(__instance)) + { + return true; + } + if (__instance.btnToggleLockMode != null) + { + __instance.btnToggleLockMode.IsSelected = false; + } + return false; + } + } + /// Кнопка замка видна по привязке {hasslotlocks} - у волка её нет. [HarmonyPatch(typeof(XUiC_BagContainer), nameof(XUiC_BagContainer.GetBindingValueInternal))] public static class Patch_BagContainer_Binding_WolfBag diff --git a/NecromancerHarmony.dll b/NecromancerHarmony.dll index 83c2228..6bd7861 100644 Binary files a/NecromancerHarmony.dll and b/NecromancerHarmony.dll differ diff --git a/NecromancerHarmony.pdb b/NecromancerHarmony.pdb index 9ff5a04..16ac0dc 100644 Binary files a/NecromancerHarmony.pdb and b/NecromancerHarmony.pdb differ