Порт на игру 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:
co-authored by
Claude Opus 5.5
parent
945b03dfea
commit
a747f5aa8d
@@ -29,10 +29,10 @@ namespace NecromancerTome
|
||||
/// </summary>
|
||||
public static class GameVersionGuard
|
||||
{
|
||||
/// <summary>Под какую версию собран мод: Major и десяток Minor (3.3.x = 3 и 3; сборка 1.4.x была под 3.2).</summary>
|
||||
/// <summary>Под какую версию собран мод: Major и десяток Minor (3.4.x = 3 и 4; 1.5-1.6 были под 3.3, 1.4.x - под 3.2).</summary>
|
||||
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;
|
||||
|
||||
|
||||
+42
-1
@@ -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
|
||||
|
||||
+18
-1
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Замок ячеек у сумки волка не включается (в 3.4 вместо ToggleLockMode - свойство UserLockMode).</summary>
|
||||
[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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Кнопка замка видна по привязке {hasslotlocks} - у волка её нет.</summary>
|
||||
[HarmonyPatch(typeof(XUiC_BagContainer), nameof(XUiC_BagContainer.GetBindingValueInternal))]
|
||||
public static class Patch_BagContainer_Binding_WolfBag
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user