Beispiel #1
0
 public Weapon(WeaponDesign design, EquipmentMaterial material)
     : base(design, material)
 {
     element   = design.element;
     ammoType  = design.ammoType;
     style     = design.style;
     minRange  = design.minRange;
     maxRange  = design.maxRange;
     damage    = design.damage * material.attack[element];
     attribute = design.attribute;
 }
Beispiel #2
0
 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;
 }
Beispiel #3
0
        public static void GetSmithingCostsForWeaponDesign(WeaponDesign weaponDesign, ref int[] __result)
        {
            if (BannerlordCheatsSettings.Instance.SmithingCostPercentage < 100)
            {
                var factor = BannerlordCheatsSettings.Instance.SmithingCostPercentage / 100f;

                for (var i = 0; i < __result.Length; i++)
                {
                    var newValue = (int)Math.Round(factor * __result[i]);

                    __result[i] = newValue;
                }
            }
        }
        /// <summary>
        /// Replace custom crafting pieces with the default ones
        /// </summary>
        public static void GenerateCraftedItemPrefix(WeaponDesign craftedData)
        {
            var validPieces = new List <WeaponDesignElement>();

            foreach (var weaponDesignElement in craftedData.UsedPieces)
            {
                if (weaponDesignElement.IsValid && !craftedData.Template.Pieces.Contains(weaponDesignElement.CraftingPiece))
                {
                    var replacementCraftingPiece = craftedData.Template.Pieces.First(p => p.PieceType == weaponDesignElement.CraftingPiece.PieceType);
                    validPieces.Add(WeaponDesignElement.CreateUsablePiece(replacementCraftingPiece));
                }
                else
                {
                    validPieces.Add(weaponDesignElement);
                }
            }
            UsedPiecesFieldRef(craftedData) = validPieces.ToArray();
        }
        public static void GetSmithingCostsForWeaponDesign(WeaponDesign weaponDesign, ref int[] __result)
        {
            try
            {
                if (BannerlordCheatsSettings.Instance?.SmithingCostPercentage < 100f)
                {
                    var factor = BannerlordCheatsSettings.Instance.SmithingCostPercentage / 100f;

                    for (var i = 0; i < __result.Length; i++)
                    {
                        var newValue = (int)Math.Round(factor * __result[i]);

                        __result[i] = newValue;
                    }
                }
            }
            catch (Exception e)
            {
                SubModule.LogError(e, typeof(SmithingCostPercentage));
            }
        }
        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);
        }
Beispiel #8
0
        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;
            }
        }