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 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); }