private static void CompleteCraftedItem(ItemObject item, Crafting.OverrideData overrideData = null) { ItemObject.InitAsPlayerCraftedItem(ref item); MBObjectManager.Instance.RegisterObject(item); #if e159 || e1510 AccessTools.Method(typeof(CampaignEventDispatcher), "OnNewItemCrafted") .Invoke(CampaignEventDispatcher.Instance, new object[] { item, overrideData }); #else CampaignEventDispatcher.Instance.OnNewItemCrafted(item, overrideData, false); #endif }
public CraftedItemInfo(ItemObject item , WeaponDesign design , CultureObject culture , TaleWorlds.Localization.TextObject itemName , Crafting.OverrideData overrideData) { this.item = item; this.design = design; this.culture = culture; this.itemName = itemName; this.overrideData = overrideData; }
private static ItemObject InitializePreCraftedWeaponOnLoad(ItemObject itemObject, WeaponDesign craftedData, TaleWorlds.Localization.TextObject itemName, BasicCultureObject culture, Crafting.OverrideData overrideData) { Crafting crafting1 = new Crafting(craftedData.Template, culture); crafting1.CraftedWeaponName = itemName.ToString(); crafting1.GetType().GetProperty("CurrentWeaponDesign", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.SetProperty).SetValue(crafting1, craftedData); crafting1.GetType().GetProperty("_history", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.SetProperty).SetValue(crafting1, new System.Collections.Generic.List <WeaponDesign> { craftedData }); crafting1.GetType().GetMethod("SetItemObject", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.InvokeMethod).Invoke(crafting1, new Object[] { overrideData, itemObject }); return(itemObject); }
public static int GetMaxCounts(ref CraftingCampaignBehavior instance, Hero hero, WeaponDesign weaponDesign, int modifierTier, Crafting.OverrideData overrideData) { ItemRoster itemRoster = MobileParty.MainParty.ItemRoster; int[] smithingCostsForWeaponDesign = Campaign.Current.Models.SmithingModel.GetSmithingCostsForWeaponDesign(weaponDesign); //Taleworlds may fix "9" in following days CraftingState craftingState; ItemObject currentCraftedItemObject; if ((craftingState = (GameStateManager.Current.ActiveState as CraftingState)) != null) { //false == don't force recreate. shall this effect item creation? currentCraftedItemObject = craftingState.CraftingLogic.GetCurrentCraftedItemObject(false, null); } else { return(0); } int energyCostForSmithing = Campaign.Current.Models.SmithingModel.GetEnergyCostForSmithing(currentCraftedItemObject, hero); int result; if (energyCostForSmithing <= 0) { result = 2147483647; } else { result = instance.GetHeroCraftingStamina(hero) / energyCostForSmithing; } for (int i = 0; i < 9; i++) { if (smithingCostsForWeaponDesign[i] < 0) { result = Math.Min(result, MaxForInput(itemRoster, Campaign.Current.Models.SmithingModel.GetCraftingMaterialItem((CraftingMaterials)i), smithingCostsForWeaponDesign[i])); } } return(result); }
public static void Postfix(ref CraftingCampaignBehavior __instance, Hero hero, WeaponDesign weaponDesign, int modifierTier, Crafting.OverrideData overrideData) { ScreenBase topScreen = ScreenManager.TopScreen; if (topScreen != null && Input.IsKeyDown(InputKey.LeftShift) && !TLSmithingFasterOperationCounts.Flag) { TLSmithingFasterOperationCounts.Flag = true; int maxcounts = TLSmithingFasterOperationCounts.GetMaxCounts(ref __instance, hero, weaponDesign, modifierTier, overrideData); maxcounts = Math.Min(maxcounts, 4); for (int i = 0; i < maxcounts; i++) { __instance.CreateCraftedWeapon(hero, weaponDesign, modifierTier, overrideData); } TLSmithingFasterOperationCounts.Flag = false; } if (topScreen != null && Input.IsKeyDown(InputKey.LeftControl) && !TLSmithingFasterOperationCounts.Flag) { TLSmithingFasterOperationCounts.Flag = true; int maxcounts = TLSmithingFasterOperationCounts.GetMaxCounts(ref __instance, hero, weaponDesign, modifierTier, overrideData); for (int i = 0; i < maxcounts; i++) { __instance.CreateCraftedWeapon(hero, weaponDesign, modifierTier, overrideData); } TLSmithingFasterOperationCounts.Flag = false; } }