Esempio n. 1
0
        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})";
         }
     }
 }
Esempio n. 3
0
 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;
     }
 }
Esempio n. 4
0
        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;
                }
            }
        }