Ejemplo n.º 1
0
 public static void GetConstructionProgressPerHour(SiegeEngineType type, SiegeEvent siegeEvent, ISiegeEventSide side, StatExplainer explanation, ref float __result)
 {
     if (side?.SiegeParties?.Any(x => x.Leader?.IsPlayerCharacter ?? false) ?? false)
     {
         __result *= BannerlordCheatsSettings.Instance.SiegeBuildingSpeedMultiplier;
     }
 }
 public CustomBattleSiegeMachineVM(
     SiegeEngineType machineType,
     Action <CustomBattleSiegeMachineVM> onSelection)
 {
     this._onSelection = onSelection;
     this.SetMachineType(machineType);
 }
Ejemplo n.º 3
0
 public void SetMachineType(SiegeEngineType machine)
 {
     this.SiegeEngineType = machine;
     this.Name            = machine != null ? ((MBObjectBase)machine).StringId : "";
     this.IsRanged        = machine != null && machine.IsRanged;
     this.MachineID       = machine != null ? ((MBObjectBase)machine).StringId : "";
 }
 private static Type GetSiegeWeaponType(SiegeEngineType siegeWeaponType)
 {
     if (siegeWeaponType == DefaultSiegeEngineTypes.Ladder)
     {
         return(typeof(SiegeLadder));
     }
     if (siegeWeaponType == DefaultSiegeEngineTypes.Ballista)
     {
         return(typeof(Ballista));
     }
     if (siegeWeaponType == DefaultSiegeEngineTypes.FireBallista)
     {
         return(typeof(FireBallista));
     }
     if (siegeWeaponType == DefaultSiegeEngineTypes.Ram || siegeWeaponType == DefaultSiegeEngineTypes.ImprovedRam)
     {
         return(typeof(BatteringRam));
     }
     if (siegeWeaponType == DefaultSiegeEngineTypes.SiegeTower)
     {
         return(typeof(SiegeTower));
     }
     if (siegeWeaponType == DefaultSiegeEngineTypes.Onager || siegeWeaponType == DefaultSiegeEngineTypes.Catapult)
     {
         return(typeof(Mangonel));
     }
     if (siegeWeaponType == DefaultSiegeEngineTypes.FireOnager || siegeWeaponType == DefaultSiegeEngineTypes.FireCatapult)
     {
         return(typeof(FireMangonel));
     }
     return(siegeWeaponType == DefaultSiegeEngineTypes.Trebuchet || siegeWeaponType == DefaultSiegeEngineTypes.Bricole ? typeof(Trebuchet) : (Type)null);
 }
Ejemplo n.º 5
0
        public static void GetConstructionProgressPerHour(ref SiegeEngineType type, ref SiegeEvent siegeEvent, ref ISiegeEventSide side, ref float __result)
        {
            try
            {
                BattleSideEnum otherSide;
                switch (side.BattleSide)
                {
                case BattleSideEnum.Attacker:
                    otherSide = BattleSideEnum.Defender;
                    break;

                case BattleSideEnum.Defender:
                    otherSide = BattleSideEnum.Attacker;
                    break;

                default:
                    return;
                }

                if ((siegeEvent.GetSiegeEventSide(otherSide)?.SiegeParties.Any(x => x.IsPlayerParty()) ?? false) &&
                    BannerlordCheatsSettings.Instance?.EnemySiegeBuildingSpeedPercentage < 100f)
                {
                    var factor = BannerlordCheatsSettings.Instance.EnemySiegeBuildingSpeedPercentage / 100f;

                    var newValue = factor * __result;

                    __result = newValue;
                }
            }
            catch (Exception e)
            {
                SubModule.LogError(e, typeof(EnemySiegeBuildingSpeedPercentage));
            }
        }
        public static void GetConstructionProgressPerHour(SiegeEngineType type, SiegeEvent siegeEvent, ISiegeEventSide side, StatExplainer explanation, ref float __result)
        {
            BattleSideEnum otherSide;

            switch (side.BattleSide)
            {
            case BattleSideEnum.Attacker:
                otherSide = BattleSideEnum.Defender;
                break;

            case BattleSideEnum.Defender:
                otherSide = BattleSideEnum.Attacker;
                break;

            default:
                return;
            }

            if ((siegeEvent.GetSiegeEventSide(otherSide)?.SiegeParties.Any(x => x.Leader?.IsPlayerCharacter ?? false) ?? false) &&
                BannerlordCheatsSettings.Instance.EnemySiegeBuildingSpeedPercentage < 100)
            {
                var factor = BannerlordCheatsSettings.Instance.EnemySiegeBuildingSpeedPercentage / 100f;

                var newValue = factor * __result;

                __result = newValue;
            }
        }
Ejemplo n.º 7
0
 private static SiegeEngineType GetSiegeWeaponType(SiegeEngineType siegeWeaponType)
 {
     if (siegeWeaponType == DefaultSiegeEngineTypes.Ladder)
     {
         return(DefaultSiegeEngineTypes.Ladder);
     }
     if (siegeWeaponType == DefaultSiegeEngineTypes.Ballista)
     {
         return(DefaultSiegeEngineTypes.Ballista);
     }
     if (siegeWeaponType == DefaultSiegeEngineTypes.FireBallista)
     {
         return(DefaultSiegeEngineTypes.FireBallista);
     }
     if (siegeWeaponType == DefaultSiegeEngineTypes.Ram || siegeWeaponType == DefaultSiegeEngineTypes.ImprovedRam)
     {
         return(DefaultSiegeEngineTypes.Ram);
     }
     if (siegeWeaponType == DefaultSiegeEngineTypes.SiegeTower)
     {
         return(DefaultSiegeEngineTypes.SiegeTower);
     }
     if (siegeWeaponType == DefaultSiegeEngineTypes.Onager || siegeWeaponType == DefaultSiegeEngineTypes.Catapult)
     {
         return(DefaultSiegeEngineTypes.Onager);
     }
     if (siegeWeaponType == DefaultSiegeEngineTypes.FireOnager || siegeWeaponType == DefaultSiegeEngineTypes.FireCatapult)
     {
         return(DefaultSiegeEngineTypes.FireOnager);
     }
     return(siegeWeaponType == DefaultSiegeEngineTypes.Trebuchet || siegeWeaponType == DefaultSiegeEngineTypes.Bricole ? DefaultSiegeEngineTypes.Trebuchet : siegeWeaponType);
 }
Ejemplo n.º 8
0
 public static void BombardPrefix(ISiegeEventSide siegeEventSide, SiegeEngineType attackerEngineType, SiegeEvent.SiegeEngineConstructionProgress damagedEngine)
 {
     if (!IsCatapult(attackerEngineType))
     {
         return;
     }
     CalculateBonusDamageAndRates(attackerEngineType, siegeEventSide, out _, out var bonusDamage);
     damagedEngine.SetHitpoints(damagedEngine.Hitpoints - bonusDamage);
 }
Ejemplo n.º 9
0
 public override float GetDestructionCasualties(SiegeEngineType destroyedSiegeEngine)
 {
     if (Settings.Instance.SiegeCasualtiesTweakEnabled)
     {
         return(Settings.Instance.SiegeDestructionCasualties);
     }
     else
     {
         return(base.GetDestructionCasualties(destroyedSiegeEngine));
     }
 }
Ejemplo n.º 10
0
 public override float GetConstructionProgressPerHour(SiegeEngineType type, SiegeEvent siegeEvent, ISiegeEventSide side, StatExplainer explanation = null)
 {
     if (Settings.Instance.SiegeConstructionProgressPerDayMultiplierEnabled)
     {
         return(base.GetConstructionProgressPerHour(type, siegeEvent, side, explanation) * Settings.Instance.SiegeConstructionProgressPerDayMultiplier);
     }
     else
     {
         return(base.GetConstructionProgressPerHour(type, siegeEvent, side, explanation));
     }
 }
Ejemplo n.º 11
0
 public override float GetColleteralDamageCasualties(SiegeEngineType siegeEngineType, MobileParty party)
 {
     if (Settings.Instance.SiegeCasualtiesTweakEnabled)
     {
         return(Settings.Instance.SiegeCollateralDamageCasualties);
     }
     else
     {
         return(base.GetColleteralDamageCasualties(siegeEngineType, party));
     }
 }
 private void ArrangeSiegeMachinesForNonAssaultMission()
 {
     foreach (GameEntity gameEntity in Mission.Current.GetActiveEntitiesWithScriptComponentOfType <SiegeWeapon>())
     {
         SiegeWeapon     firstScriptOfType = gameEntity.GetFirstScriptOfType <SiegeWeapon>();
         SiegeEngineType siegeEngineType   = firstScriptOfType.GetSiegeEngineType();
         if (siegeEngineType != DefaultSiegeEngineTypes.Ballista && siegeEngineType != DefaultSiegeEngineTypes.FireBallista && (siegeEngineType != DefaultSiegeEngineTypes.Catapult && siegeEngineType != DefaultSiegeEngineTypes.FireCatapult) && (siegeEngineType != DefaultSiegeEngineTypes.Onager && siegeEngineType != DefaultSiegeEngineTypes.FireOnager))
         {
             firstScriptOfType.Deactivate();
         }
     }
 }
Ejemplo n.º 13
0
        private void OnDefenderRangedMachineSelection(CustomBattleSiegeMachineVM selectedSlot)
        {
            List <InquiryElement> inquiryElementList = new List <InquiryElement>();

            inquiryElementList.Add(new InquiryElement((object)null, "Empty", (ImageIdentifier)null));
            using (IEnumerator <SiegeEngineType> enumerator = this.GetAllDefenderRangedMachines().GetEnumerator())
            {
                while (((IEnumerator)enumerator).MoveNext())
                {
                    SiegeEngineType current = enumerator.Current;
                    inquiryElementList.Add(new InquiryElement((object)current, ((object)current.Name).ToString(), (ImageIdentifier)null));
                }
            }
            InformationManager.ShowMultiSelectionInquiry(new MultiSelectionInquiryData(((object)new TextObject("{=SLZzfNPr}Select a Ranged Machine", (Dictionary <string, TextObject>)null)).ToString(), string.Empty, inquiryElementList, false, true, ((object)GameTexts.FindText("str_done", (string)null)).ToString(), "", (Action <List <InquiryElement> >)(selectedElements => selectedSlot.SetMachineType(selectedElements[0].Identifier as SiegeEngineType)), (Action <List <InquiryElement> >)null, ""), false);
        }
Ejemplo n.º 14
0
 public static void GetConstructionProgressPerHour(ref SiegeEngineType type, ref SiegeEvent siegeEvent, ref ISiegeEventSide side, ref float __result)
 {
     try
     {
         if (side.IsPlayerSide() &&
             BannerlordCheatsSettings.Instance?.SiegeBuildingSpeedMultiplier > 1f)
         {
             __result *= BannerlordCheatsSettings.Instance.SiegeBuildingSpeedMultiplier;
         }
     }
     catch (Exception e)
     {
         SubModule.LogError(e, typeof(SiegeBuildingSpeedMultiplier));
     }
 }
Ejemplo n.º 15
0
        private static void CalculateBonusDamageAndRates(
            SiegeEngineType siegeEngineType,
            ISiegeEventSide siegeEventSide, out float bonusRateOnly, out float bonusDamageOnly)
        {
            var perk              = ActivePatch._perk;
            var baseDamage        = siegeEngineType.Damage;
            var partyMemberDamage = new ExplainedNumber(baseDamage);
            var partyMemberRate   = new ExplainedNumber(100f);
            var parties           = siegeEventSide.SiegeParties.Where(x => x.MobileParty != null);

            foreach (var party in parties)
            {
                PerkHelper.AddPerkBonusForParty(perk, party.MobileParty, ref partyMemberRate);
                PerkHelper.AddPerkBonusForParty(perk, party.MobileParty, ref partyMemberDamage);
            }

            bonusRateOnly   = partyMemberRate.ResultNumber - 100;
            bonusDamageOnly = partyMemberDamage.ResultNumber - baseDamage;
        }
Ejemplo n.º 16
0
        private void ExecuteStart()
        {
            int  armySize1        = this.PlayerSide.CompositionGroup.ArmySize;
            int  armySize2        = this.EnemySide.CompositionGroup.ArmySize;
            bool isPlayerAttacker = this.GameTypeSelectionGroup.GetCurrentPlayerSide() == BattleSideEnum.Attacker;
            bool isPlayerGeneral  = this.GameTypeSelectionGroup.GetCurrentPlayerType() == GameTypeSelectionGroup.PlayerType.Commander;
            BasicCharacterObject playerSideGeneralCharacter = (BasicCharacterObject)null;

            if (!isPlayerGeneral)
            {
                List <BasicCharacterObject> list = this._charactersList.ToList <BasicCharacterObject>();
                list.Remove(this._charactersList[this.PlayerSide.CharacterSelectionGroup.get_SelectedIndex()]);
                list.Remove(this._charactersList[this.EnemySide.CharacterSelectionGroup.get_SelectedIndex()]);
                playerSideGeneralCharacter = list.GetRandomElement <BasicCharacterObject>();
                --armySize1;
            }
            int num1  = armySize1 - 1;
            int num2  = (int)Math.Round((double)this.PlayerSide.CompositionGroup.ArmyComposition2Value / 100.0 * (double)num1);
            int num3  = (int)Math.Round((double)this.PlayerSide.CompositionGroup.ArmyComposition3Value / 100.0 * (double)num1);
            int num4  = (int)Math.Round((double)this.PlayerSide.CompositionGroup.ArmyComposition4Value / 100.0 * (double)num1);
            int num5  = num1 - (num2 + num3 + num4);
            int num6  = armySize2 - 1;
            int num7  = (int)Math.Round((double)this.EnemySide.CompositionGroup.ArmyComposition2Value / 100.0 * (double)num6);
            int num8  = (int)Math.Round((double)this.EnemySide.CompositionGroup.ArmyComposition3Value / 100.0 * (double)num6);
            int num9  = (int)Math.Round((double)this.EnemySide.CompositionGroup.ArmyComposition4Value / 100.0 * (double)num6);
            int num10 = num6 - (num7 + num8 + num9);

            CustomBattleCombatant[] customBattleParties = this._customBattleState.GetCustomBattleParties(this._charactersList[this.PlayerSide.CharacterSelectionGroup.get_SelectedIndex()], playerSideGeneralCharacter, this._charactersList[this.EnemySide.CharacterSelectionGroup.get_SelectedIndex()], this._factionList[this.PlayerSide.FactionSelectionGroup.get_SelectedIndex()], new int[4]
            {
                num5,
                num2,
                num3,
                num4
            }, new List <BasicCharacterObject>[4]
            {
                this.PlayerSide.CompositionGroup.SelectedMeleeInfantryTypes,
                this.PlayerSide.CompositionGroup.SelectedRangedInfantryTypes,
                this.PlayerSide.CompositionGroup.SelectedMeleeCavalryTypes,
                this.PlayerSide.CompositionGroup.SelectedRangedCavalryTypes
            }, this._factionList[this.EnemySide.FactionSelectionGroup.get_SelectedIndex()], new int[4]
            {
                num10,
                num7,
                num8,
                num9
            }, new List <BasicCharacterObject>[4]
            {
                this.EnemySide.CompositionGroup.SelectedMeleeInfantryTypes,
                this.EnemySide.CompositionGroup.SelectedRangedInfantryTypes,
                this.EnemySide.CompositionGroup.SelectedMeleeCavalryTypes,
                this.EnemySide.CompositionGroup.SelectedRangedCavalryTypes
            }, (isPlayerAttacker ? 1 : 0) != 0);
            Game.Current.PlayerTroop = this._charactersList[this.PlayerSide.CharacterSelectionGroup.get_SelectedIndex()];
            bool isSiege = this.GameTypeSelectionGroup.GetCurrentGameType() == GameTypeSelectionGroup.GameType.Siege;
            MapSelectionElement selectedMap = this.MapSelectionGroup.SelectedMap;
            MapSelectionElement mapWithName = this.MapSelectionGroup.GetMapWithName(this.MapSelectionGroup.SearchText);

            if (mapWithName != null && mapWithName != selectedMap)
            {
                selectedMap = mapWithName;
            }
            CustomBattleSceneData customBattleSceneData = selectedMap != null?this._customBattleScenes.Single <CustomBattleSceneData>((Func <CustomBattleSceneData, bool>)(s => s.Name.ToString() == selectedMap.MapName)) : this._customBattleScenes.First <CustomBattleSceneData>((Func <CustomBattleSceneData, bool>)(cbs => cbs.IsSiegeMap == isSiege));

            float timeOfDay = 6f;

            if (this.MapSelectionGroup.IsCurrentMapSiege)
            {
                Dictionary <SiegeEngineType, int> siegeWeaponsCountOfAttackers = new Dictionary <SiegeEngineType, int>();
                foreach (CustomBattleSiegeMachineVM attackerMeleeMachine in (Collection <CustomBattleSiegeMachineVM>) this._attackerMeleeMachines)
                {
                    if (attackerMeleeMachine.SiegeEngineType != null)
                    {
                        SiegeEngineType siegeWeaponType = CustomBattleMenuVM.GetSiegeWeaponType(attackerMeleeMachine.SiegeEngineType);
                        if (!siegeWeaponsCountOfAttackers.ContainsKey(siegeWeaponType))
                        {
                            siegeWeaponsCountOfAttackers.Add(siegeWeaponType, 0);
                        }
                        siegeWeaponsCountOfAttackers[siegeWeaponType]++;
                    }
                }
                foreach (CustomBattleSiegeMachineVM attackerRangedMachine in (Collection <CustomBattleSiegeMachineVM>) this._attackerRangedMachines)
                {
                    if (attackerRangedMachine.SiegeEngineType != null)
                    {
                        SiegeEngineType siegeWeaponType = CustomBattleMenuVM.GetSiegeWeaponType(attackerRangedMachine.SiegeEngineType);
                        if (!siegeWeaponsCountOfAttackers.ContainsKey(siegeWeaponType))
                        {
                            siegeWeaponsCountOfAttackers.Add(siegeWeaponType, 0);
                        }
                        siegeWeaponsCountOfAttackers[siegeWeaponType]++;
                    }
                }
                Dictionary <SiegeEngineType, int> siegeWeaponsCountOfDefenders = new Dictionary <SiegeEngineType, int>();
                foreach (CustomBattleSiegeMachineVM defenderMachine in (Collection <CustomBattleSiegeMachineVM>) this._defenderMachines)
                {
                    if (defenderMachine.SiegeEngineType != null)
                    {
                        SiegeEngineType siegeWeaponType = CustomBattleMenuVM.GetSiegeWeaponType(defenderMachine.SiegeEngineType);
                        if (!siegeWeaponsCountOfDefenders.ContainsKey(siegeWeaponType))
                        {
                            siegeWeaponsCountOfDefenders.Add(siegeWeaponType, 0);
                        }
                        siegeWeaponsCountOfDefenders[siegeWeaponType]++;
                    }
                }
                int     num11;
                float   num12 = (float)(num11 = int.Parse(this.MapSelectionGroup.WallHitpointSelection.get_ItemList()[this.MapSelectionGroup.WallHitpointSelection.get_SelectedIndex()].get_StringItem())) / 100f;
                float[] wallHitPointPercentages = new float[2];
                if (num11 == 50)
                {
                    int index = MBRandom.RandomInt(2);
                    wallHitPointPercentages[index]     = 0.0f;
                    wallHitPointPercentages[1 - index] = 1f;
                }
                else
                {
                    wallHitPointPercentages[0] = num12;
                    wallHitPointPercentages[1] = num12;
                }
                BannerlordMissions.OpenSiegeMissionWithDeployment(customBattleSceneData.SceneID, this._charactersList[this.PlayerSide.CharacterSelectionGroup.get_SelectedIndex()], customBattleParties[0], customBattleParties[1], this.GameTypeSelectionGroup.GetCurrentPlayerType() == GameTypeSelectionGroup.PlayerType.Commander, wallHitPointPercentages, this._attackerMeleeMachines.Any <CustomBattleSiegeMachineVM>((Func <CustomBattleSiegeMachineVM, bool>)(mm => mm.SiegeEngineType == DefaultSiegeEngineTypes.SiegeTower)), siegeWeaponsCountOfAttackers, siegeWeaponsCountOfDefenders, isPlayerAttacker, int.Parse(this.MapSelectionGroup.SceneLevelSelection.GetCurrentItem().get_StringItem()), this.MapSelectionGroup.SeasonSelection.GetCurrentItem().get_StringItem().ToLower(), this.MapSelectionGroup.IsSallyOutSelected, false, timeOfDay);
            }
            else
            {
                BannerlordMissions.OpenCustomBattleMission(customBattleSceneData.SceneID, this._charactersList[this.PlayerSide.CharacterSelectionGroup.get_SelectedIndex()], customBattleParties[0], customBattleParties[1], isPlayerGeneral, playerSideGeneralCharacter, "", this.MapSelectionGroup.SeasonSelection.GetCurrentItem().get_StringItem().ToLower(), timeOfDay);
            }
            Debug.Print("P-Ranged: " + (object)num2 + " P-Mounted: " + (object)num3 + " P-HorseArcher: " + (object)num4 + " P-Infantry: " + (object)num5, 0, Debug.DebugColor.Blue, 17592186044416UL);
            Debug.Print("E-Ranged: " + (object)num7 + " E-Mounted: " + (object)num8 + " E-HorseArcher: " + (object)num9 + " E-Infantry: " + (object)num10, 0, Debug.DebugColor.Blue, 17592186044416UL);
            Debug.Print("EXECUTE START - PRESSED", 0, Debug.DebugColor.Green, 17592186044416UL);
        }
Ejemplo n.º 17
0
        private void ExecuteStart()
        {
            int  armySize1 = this.PlayerSide.CompositionGroup.ArmySize;
            int  armySize2 = this.EnemySide.CompositionGroup.ArmySize;
            bool flag1     = (int)this.GameTypeSelectionGroup.GetCurrentPlayerSide() == 1;
            bool flag2     = this.GameTypeSelectionGroup.GetCurrentPlayerType() == GameTypeSelectionGroup.PlayerType.Commander;
            BasicCharacterObject basicCharacterObject = (BasicCharacterObject)null;

            if (!flag2)
            {
                List <BasicCharacterObject> list = ((IEnumerable <BasicCharacterObject>) this._charactersList).ToList <BasicCharacterObject>();
                list.Remove(this._charactersList[this.PlayerSide.CharacterSelectionGroup.SelectedIndex]);
                list.Remove(this._charactersList[this.EnemySide.CharacterSelectionGroup.SelectedIndex]);
                basicCharacterObject = (BasicCharacterObject)TaleWorlds.Core.Extensions.GetRandomElement <BasicCharacterObject>((IEnumerable <BasicCharacterObject>)list);
                --armySize1;
            }
            int num1  = armySize1 - 1;
            int num2  = (int)Math.Round((double)this.PlayerSide.CompositionGroup.ArmyComposition2Value / 100.0 * (double)num1);
            int num3  = (int)Math.Round((double)this.PlayerSide.CompositionGroup.ArmyComposition3Value / 100.0 * (double)num1);
            int num4  = (int)Math.Round((double)this.PlayerSide.CompositionGroup.ArmyComposition4Value / 100.0 * (double)num1);
            int num5  = num1 - (num2 + num3 + num4);
            int num6  = armySize2 - 1;
            int num7  = (int)Math.Round((double)this.EnemySide.CompositionGroup.ArmyComposition2Value / 100.0 * (double)num6);
            int num8  = (int)Math.Round((double)this.EnemySide.CompositionGroup.ArmyComposition3Value / 100.0 * (double)num6);
            int num9  = (int)Math.Round((double)this.EnemySide.CompositionGroup.ArmyComposition4Value / 100.0 * (double)num6);
            int num10 = num6 - (num7 + num8 + num9);

            CustomBattleCombatant[] customBattleParties = this._customBattleState.GetCustomBattleParties(this._charactersList[this.PlayerSide.CharacterSelectionGroup.SelectedIndex], basicCharacterObject, this._charactersList[this.EnemySide.CharacterSelectionGroup.SelectedIndex], this._factionList[this.PlayerSide.FactionSelectionGroup.SelectedIndex], new int[4]
            {
                num5,
                num2,
                num3,
                num4
            }, new List <BasicCharacterObject>[4]
            {
                this.PlayerSide.CompositionGroup.SelectedMeleeInfantryTypes,
                this.PlayerSide.CompositionGroup.SelectedRangedInfantryTypes,
                this.PlayerSide.CompositionGroup.SelectedMeleeCavalryTypes,
                this.PlayerSide.CompositionGroup.SelectedRangedCavalryTypes
            }, this._factionList[this.EnemySide.FactionSelectionGroup.SelectedIndex], new int[4]
            {
                num10,
                num7,
                num8,
                num9
            }, new List <BasicCharacterObject>[4]
            {
                this.EnemySide.CompositionGroup.SelectedMeleeInfantryTypes,
                this.EnemySide.CompositionGroup.SelectedRangedInfantryTypes,
                this.EnemySide.CompositionGroup.SelectedMeleeCavalryTypes,
                this.EnemySide.CompositionGroup.SelectedRangedCavalryTypes
            }, (flag1 ? 1 : 0) != 0);
            Game.Current.PlayerTroop = this._charactersList[this.PlayerSide.CharacterSelectionGroup.SelectedIndex];
            bool isSiege = this.GameTypeSelectionGroup.GetCurrentGameType() == GameTypeSelectionGroup.GameType.Siege;
            MapSelectionElement selectedMap = this.MapSelectionGroup.SelectedMap;
            MapSelectionElement mapWithName = this.MapSelectionGroup.GetMapWithName(this.MapSelectionGroup.SearchText);

            if (mapWithName != null && mapWithName != selectedMap)
            {
                selectedMap = mapWithName;
            }
            CustomBattleSceneData customBattleSceneData = selectedMap != null ? ((IEnumerable <CustomBattleSceneData>) this._customBattleScenes).Single <CustomBattleSceneData>((Func <CustomBattleSceneData, bool>)(s => ((object)((CustomBattleSceneData)s).Name).ToString() == selectedMap.MapName)) : ((IEnumerable <CustomBattleSceneData>) this._customBattleScenes).First <CustomBattleSceneData>((Func <CustomBattleSceneData, bool>)(cbs => ((CustomBattleSceneData)cbs).IsSiegeMap == isSiege));
            float num11 = 6f;

            if (this.MapSelectionGroup.IsCurrentMapSiege)
            {
                Dictionary <SiegeEngineType, int> dictionary1 = new Dictionary <SiegeEngineType, int>();
                foreach (CustomBattleSiegeMachineVM attackerMeleeMachine in (Collection <CustomBattleSiegeMachineVM>) this._attackerMeleeMachines)
                {
                    if (attackerMeleeMachine.SiegeEngineType != null)
                    {
                        SiegeEngineType siegeWeaponType = CustomBattleMenuVM.GetSiegeWeaponType(attackerMeleeMachine.SiegeEngineType);
                        if (!dictionary1.ContainsKey(siegeWeaponType))
                        {
                            dictionary1.Add(siegeWeaponType, 0);
                        }
                        dictionary1[siegeWeaponType]++;
                    }
                }
                foreach (CustomBattleSiegeMachineVM attackerRangedMachine in (Collection <CustomBattleSiegeMachineVM>) this._attackerRangedMachines)
                {
                    if (attackerRangedMachine.SiegeEngineType != null)
                    {
                        SiegeEngineType siegeWeaponType = CustomBattleMenuVM.GetSiegeWeaponType(attackerRangedMachine.SiegeEngineType);
                        if (!dictionary1.ContainsKey(siegeWeaponType))
                        {
                            dictionary1.Add(siegeWeaponType, 0);
                        }
                        dictionary1[siegeWeaponType]++;
                    }
                }
                Dictionary <SiegeEngineType, int> dictionary2 = new Dictionary <SiegeEngineType, int>();
                foreach (CustomBattleSiegeMachineVM defenderMachine in (Collection <CustomBattleSiegeMachineVM>) this._defenderMachines)
                {
                    if (defenderMachine.SiegeEngineType != null)
                    {
                        SiegeEngineType siegeWeaponType = CustomBattleMenuVM.GetSiegeWeaponType(defenderMachine.SiegeEngineType);
                        if (!dictionary2.ContainsKey(siegeWeaponType))
                        {
                            dictionary2.Add(siegeWeaponType, 0);
                        }
                        dictionary2[siegeWeaponType]++;
                    }
                }
                int     num12;
                float   num13    = (float)(num12 = int.Parse(((Collection <SelectorItemVM>) this.MapSelectionGroup.WallHitpointSelection.ItemList)[this.MapSelectionGroup.WallHitpointSelection.SelectedIndex].StringItem)) / 100f;
                float[] numArray = new float[2];
                if (num12 == 50)
                {
                    int index = MBRandom.RandomInt(2);
                    numArray[index]     = 0.0f;
                    numArray[1 - index] = 1f;
                }
                else
                {
                    numArray[0] = num13;
                    numArray[1] = num13;
                }
                BannerlordMissions.OpenSiegeMissionWithDeployment(((CustomBattleSceneData)customBattleSceneData).SceneID, this._charactersList[this.PlayerSide.CharacterSelectionGroup.SelectedIndex], customBattleParties[0], customBattleParties[1], this.GameTypeSelectionGroup.GetCurrentPlayerType() == GameTypeSelectionGroup.PlayerType.Commander, numArray, ((IEnumerable <CustomBattleSiegeMachineVM>) this._attackerMeleeMachines).Any <CustomBattleSiegeMachineVM>((Func <CustomBattleSiegeMachineVM, bool>)(mm => mm.SiegeEngineType == DefaultSiegeEngineTypes.SiegeTower)), dictionary1, dictionary2, flag1, int.Parse(this.MapSelectionGroup.SceneLevelSelection.GetCurrentItem().StringItem), this.MapSelectionGroup.SeasonSelection.GetCurrentItem().StringItem.ToLower(), this.MapSelectionGroup.IsSallyOutSelected, false, num11);
            }
            else
            {
                BannerlordMissions.OpenCustomBattleMission(((CustomBattleSceneData)customBattleSceneData).SceneID, this._charactersList[this.PlayerSide.CharacterSelectionGroup.SelectedIndex], customBattleParties[0], customBattleParties[1], flag2, basicCharacterObject, "", this.MapSelectionGroup.SeasonSelection.GetCurrentItem().StringItem.ToLower(), num11);
            }
            Debug.Print("P-Ranged: " + (object)num2 + " P-Mounted: " + (object)num3 + " P-HorseArcher: " + (object)num4 + " P-Infantry: " + (object)num5, 0, (Debug.DebugColor) 5, 17592186044416UL);
            Debug.Print("E-Ranged: " + (object)num7 + " E-Mounted: " + (object)num8 + " E-HorseArcher: " + (object)num9 + " E-Infantry: " + (object)num10, 0, (Debug.DebugColor) 5, 17592186044416UL);
            Debug.Print("EXECUTE START - PRESSED", 0, (Debug.DebugColor) 4, 17592186044416UL);
        }
 public override float GetConstructionProgressPerHour(SiegeEngineType type, SiegeEvent siegeEvent, ISiegeEventSide side)
 {
     if (BannerlordTweaksSettings.Instance is { } settings)
     {
         return(base.GetConstructionProgressPerHour(type, siegeEvent, side) * settings.SiegeConstructionProgressPerDayMultiplier);
     }
Ejemplo n.º 19
0
 private static bool IsCatapult(SiegeEngineType engine)
 => engine == DefaultSiegeEngineTypes.Catapult || engine == DefaultSiegeEngineTypes.FireCatapult;
Ejemplo n.º 20
0
 public static void Prefix(ISiegeEventSide siegeEventSide, SiegeEngineType attackerEngineType, SiegeEvent.SiegeEngineConstructionProgress damagedEngine)
 {
     CalculateBonusDamageAndRates(attackerEngineType, siegeEventSide, out _, out var bonusDamageOnly);
     damagedEngine.SetHitpoints(damagedEngine.Hitpoints - bonusDamageOnly);
 }