diff --git a/HarmonySrc/BoneSteedFuelPatch.cs b/HarmonySrc/BoneSteedFuelPatch.cs index e7284db..478a33b 100644 --- a/HarmonySrc/BoneSteedFuelPatch.cs +++ b/HarmonySrc/BoneSteedFuelPatch.cs @@ -264,6 +264,42 @@ namespace NecromancerTome } } + /// Шифт-клик сферой или камнем в окне скакуна (01.10: «в оссуарий сфера вставляется + /// по шифт-клику, а в мотоцикл только перетаскиванием»). Ваниль ставит деталь шифт-кликом + /// через AddPartToItem, а он пускает модификацию только по InstallableTags хозяина - у сферы + /// и камня там браслет. Для скакуна - первая пустая ячейка, как у ванили. + [HarmonyPatch(typeof(XUiM_AssembleItem), nameof(XUiM_AssembleItem.AddPartToItem))] + public static class Patch_XUiM_AssembleItem_AddPartToItem_BoneSteed + { + public static bool Prefix(XUiM_AssembleItem __instance, ItemStack _partStack, out ItemStack _resultStack, ref bool __result) + { + _resultStack = _partStack; + ItemStack current = __instance.CurrentItem; + if (current == null || current.IsEmpty() || !BoneSteedFuel.IsSteedItem(current.itemValue)) + return true; + __result = false; + ItemValue add = _partStack.itemValue; + bool blood = BoneSteedFuel.IsStone(add) || + BoneSteedFuel.IsSphere(add) && add.UseTimes < add.MaxUseTimes; + if (!blood) + return false; + ItemValue item = current.itemValue; + for (int i = 0; i < item.ModificationCount; i++) + { + ItemValue m = item.GetModification(i); + if (m != null && !m.IsEmpty()) + continue; + item.SetModification(i, add.Clone()); + __instance.RefreshAssembleItem(); + __instance.UpdateAssembleWindow(); + _resultStack = ItemStack.Empty; + __result = true; + return false; + } + return false; + } + } + /// Здоровье скакуна не зависит от сфер в ячейках (у сферы DegradationMax 500). [HarmonyPatch(typeof(ItemValue), nameof(ItemValue.MaxUseTimesBase), MethodType.Getter)] public static class Patch_ItemValue_MaxUseTimesBase_BoneSteed