private static void Postfix(SmeltingVM __instance) { if (__instance.SmeltableItemList == null || __instance.SmeltableItemList.Count == 0) { return; } var locks = Campaign.Current.GetCampaignBehavior <InventoryLockTracker>().GetLocks().Select(a => a.Item).ToList(); List <SmeltingItemVM> smeltingItemVMs = new List <SmeltingItemVM>(); foreach (var item in __instance.SmeltableItemList) { if (locks.Contains(item.Item)) { smeltingItemVMs.Add(item); } } foreach (var item in smeltingItemVMs) { __instance.SmeltableItemList.Remove(item); } if (__instance.SmeltableItemList.Count == 0) { __instance.CurrentSelectedItem = null; } }
private static void Postfix(SmeltingVM __instance, ItemRoster ____playerItemRoster) { foreach (SmeltingItemVM item in __instance.SmeltableItemList) { int count = SmeltingHelper.GetNewPartsFromSmelting(item.Item).Count(); if (count > 0) { string parts = count == 1 ? "part" : "parts"; item.Name = item.Name + $" ({count} new {parts})"; } } }
static void Postfix(SmeltingVM __instance, Hero currentCraftingHero, ref SmeltingItemVM ____currentSelectedItem, ref ICraftingCampaignBehavior ____smithingBehavior) { if (repeating) { return; } if (____currentSelectedItem != null && ____smithingBehavior != null && Input.IsKeyDown(InputKey.LeftControl)) { repeating = true; int maxfailsafe = 100; while (maxfailsafe-- > 0 && ____currentSelectedItem != null && ____smithingBehavior != null) { __instance.SmeltSelectedItems(currentCraftingHero); } repeating = false; } }
private static void Postfix(SmeltingVM __instance, ItemRoster ____playerItemRoster) { // This appears to be how the game works out if an item is locked // From TaleWorlds.CampaignSystem.ViewModelCollection.SPInventoryVM.InitializeInventory() IEnumerable <EquipmentElement> locks = Campaign.Current.GetCampaignBehavior <TaleWorlds.CampaignSystem.SandBox.CampaignBehaviors.IInventoryLockTracker>().GetLocks(); // Updated line 24 to Line 25 which seems to be the updated way game works out item locks in v1.4.3 InitializeInventory() // EquipmentElement[] locked_items = locks?.ToArray<EquipmentElement>(); EquipmentElement[] locked_items = (locks != null) ? locks.ToArray <EquipmentElement>() : null; bool isLocked(EquipmentElement test_item) { return(locked_items != null && locked_items.Any(delegate(EquipmentElement x) { ItemObject lock_item = x.Item; if (lock_item.StringId == test_item.Item.StringId) { ItemModifier itemModifier = x.ItemModifier; string a = itemModifier?.StringId; ItemModifier itemModifier2 = test_item.ItemModifier; return a == (itemModifier2?.StringId); } return false; })); } MBBindingList <SmeltingItemVM> filteredList = new MBBindingList <SmeltingItemVM>(); foreach (SmeltingItemVM sItem in __instance.SmeltableItemList) { if (!____playerItemRoster.Any(rItem => sItem.Item == rItem.EquipmentElement.Item && isLocked(rItem.EquipmentElement) )) { filteredList.Add(sItem); } } __instance.SmeltableItemList = filteredList; if (__instance.SmeltableItemList.Count == 0) { __instance.CurrentSelectedItem = null; } }
private static bool Prefix(SmeltingVM __instance, Hero currentCraftingHero) { if (Traverse.Create(__instance).Field("_currentSelectedItem").GetValue() != null && Traverse.Create(__instance).Field("_smithingBehavior").GetValue() != null) { ICraftingCampaignBehavior smithingBehavior = (ICraftingCampaignBehavior)Traverse.Create(__instance).Field("_smithingBehavior").GetValue(); var itemRoster = MobileParty.MainParty.ItemRoster; if (smithingBehavior != null) { if (Input.IsKeyDown(InputKey.LeftShift)) { var stackAmount = __instance.CurrentSelectedItem.NumOfItems; var charcoalAmount = itemRoster.GetItemNumber(DefaultItems.Charcoal); var energyCost = Campaign.Current.Models.SmithingModel.GetEnergyCostForSmelting(__instance.CurrentSelectedItem.Item, currentCraftingHero); var heroStamina = smithingBehavior.GetHeroCraftingStamina(currentCraftingHero); for (int i = 0; i < stackAmount && heroStamina >= energyCost && charcoalAmount >= 1; i++) { smithingBehavior.DoSmelting(currentCraftingHero, ((SmeltingItemVM)Traverse.Create(__instance).Field("_currentSelectedItem").GetValue()).Item); __instance.RefreshList(); charcoalAmount--; heroStamina -= energyCost; } } else { smithingBehavior.DoSmelting(currentCraftingHero, ((SmeltingItemVM)Traverse.Create(__instance).Field("_currentSelectedItem").GetValue()).Item); } } } __instance.RefreshList(); if (__instance.CurrentSelectedItem != null) { SmeltingItemVM newItem = __instance.SmeltableItemList.FirstOrDefault((SmeltingItemVM i) => i.Item == __instance.CurrentSelectedItem.Item) ?? __instance.SmeltableItemList.FirstOrDefault <SmeltingItemVM>(); Traverse.Create(__instance).Method("OnItemSelection", newItem).GetValue(); } Traverse.Create(__instance).Method("_updateYieldValuesAcion").GetValue(); return(false); }
private static void Postfix(SmeltingVM __instance, ItemRoster ____playerItemRoster) { if (BannerlordTweaksSettings.Instance is { } settings&& settings.PreventSmeltingLockedItems) { List <string> locked_items = Campaign.Current.GetCampaignBehavior <IInventoryLockTracker>().GetLocks().ToList <string>(); bool isLocked(ItemRosterElement item) { string text = item.EquipmentElement.Item.StringId; if (item.EquipmentElement.ItemModifier != null) { text += item.EquipmentElement.ItemModifier.StringId; } return(locked_items.Contains(text)); } MBBindingList <SmeltingItemVM> filteredList = new MBBindingList <SmeltingItemVM>(); foreach (SmeltingItemVM sItem in __instance.SmeltableItemList) { if (!____playerItemRoster.Any(rItem => sItem.EquipmentElement.Item == rItem.EquipmentElement.Item && isLocked(rItem) )) { filteredList.Add(sItem); } } __instance.SmeltableItemList = filteredList; if (__instance.SmeltableItemList.Count == 0) { __instance.CurrentSelectedItem = null; } } }