Exemplo n.º 1
0
 public override void GetXpFromHit(
     CharacterObject attackerTroop,
     CharacterObject attackedTroop,
     int damage,
     bool isFatal,
     MissionTypeEnum missionType,
     out int xpAmount)
 {
     if (Settlement.CurrentSettlement != null && Settlement.CurrentSettlement.IsTrainingField())
     {
         xpAmount = 0;
     }
     else
     {
         base.GetXpFromHit(attackerTroop, attackedTroop, damage, isFatal, missionType, out xpAmount);
     }
 }
Exemplo n.º 2
0
        public override void GetXpFromHit(CharacterObject attackerTroop, CharacterObject attackedTroop, int damage, bool isFatal, MissionTypeEnum missionType, out int xpAmount)
        {
            if (attackerTroop == null || attackedTroop == null)
            {
                xpAmount = 0;
                return;
            }
            int num = attackerTroop.MaxHitPoints();

            xpAmount = MBMath.Round(0.4f * ((attackedTroop.GetPower() + 0.5f) * (float)(Math.Min(damage, num) + (isFatal ? num : 0))));
            //There are three things to do here: Tournament Experience, Arena Experience, Troop Experience.
            if (attackerTroop.IsHero)
            {
                if (missionType == MissionTypeEnum.Tournament)
                {
                    if (Settings.Instance.TournamentHeroExperienceMultiplierEnabled)
                    {
                        xpAmount = (int)Math.Round(Settings.Instance.TournamentHeroExperienceMultiplier * (float)xpAmount);
                    }
                    else
                    {
                        xpAmount = MathF.Round((float)xpAmount * 0.25f);
                    }
                }
                else if (missionType == MissionTypeEnum.PracticeFight)
                {
                    if (Settings.Instance.ArenaHeroExperienceMultiplierEnabled)
                    {
                        xpAmount = (int)Math.Round(Settings.Instance.ArenaHeroExperienceMultiplier * (float)xpAmount);
                    }
                    else
                    {
                        xpAmount = MathF.Round((float)xpAmount * 0.0625f);
                    }
                }
            }
            else if ((missionType == MissionTypeEnum.Battle || missionType == MissionTypeEnum.SimulationBattle))
            {
                if (Settings.Instance.TroopBattleSimulationExperienceMultiplierEnabled && missionType == MissionTypeEnum.SimulationBattle)
                {
                    xpAmount = (int)Math.Round(xpAmount * Settings.Instance.TroopBattleSimulationExperienceMultiplier);
                }
                else if (missionType == MissionTypeEnum.SimulationBattle)
                {
                    xpAmount *= 8;
                }
                else if (Settings.Instance.TroopBattleExperienceMultiplierEnabled && missionType == MissionTypeEnum.Battle)
                {
                    xpAmount = (int)Math.Round(xpAmount * Settings.Instance.TroopBattleExperienceMultiplier);
                }
            }
        }
 public static void GetXpFromHit(CharacterObject attackerTroop, CharacterObject attackedTroop, int damage, bool isFatal, MissionTypeEnum missionType, ref int xpAmount)
 {
     if (Mission.Current != null &&
         Mission.Current.PlayerTeam != null &&
         Mission.Current.PlayerTeam.ActiveAgents.Any(x => x?.Character == attackerTroop))
     {
         xpAmount *= BannerlordCheatsSettings.Instance.TroopExperienceMultiplier;
     }
 }
Exemplo n.º 4
0
        public override void GetXpFromHit(CharacterObject attackerTroop, CharacterObject attackedTroop, int damage, bool isFatal, MissionTypeEnum missionType, out int xpAmount)
        {
            int baseXpAmount = 0;

            if (attackerTroop != null && attackedTroop != null)
            {
                base.GetXpFromHit(attackerTroop, attackedTroop, damage, isFatal, missionType, out baseXpAmount);

                if (!attackerTroop.IsHero)
                {
                    if (Settings.Instance.TroopBattleExperienceMultiplierEnabled && missionType == MissionTypeEnum.Battle)
                    {
                        baseXpAmount = (int)Math.Ceiling(Settings.Instance.TroopBattleExperienceMultiplier * baseXpAmount);
                    }
                    else if (Settings.Instance.TroopBattleSimulationExperienceMultiplierEnabled && missionType == MissionTypeEnum.SimulationBattle)
                    {
                        baseXpAmount = (int)Math.Ceiling(Settings.Instance.TroopBattleSimulationExperienceMultiplier * baseXpAmount);
                    }
                }
                xpAmount = baseXpAmount;
                //MessageBox.Show($"Attacker: {attackerTroop.Name}\nAttacked: {attackedTroop.Name}\nDefault xp: {baseXpAmount / Settings.Instance.TroopExperienceBattleMultiplier}\nMultiplied xp: {baseXpAmount}\nDamage:{damage}");
            }
            else
            {
                xpAmount = baseXpAmount;
            }
        }
Exemplo n.º 5
0
        public override void GetXpFromHit(CharacterObject attackerTroop, CharacterObject attackedTroop, PartyBase party, int damage, bool isFatal, MissionTypeEnum missionType, out int xpAmount)
        {
            int   num  = attackedTroop.MaxHitPoints();
            float num2 = 0.4f * ((attackedTroop.GetPower() + 0.5f) * (float)(Math.Min(damage, num) + (isFatal ? num : 0)));

            num2 *= ((missionType == CombatXpModel.MissionTypeEnum.NoXp) ? 0f : ((missionType == CombatXpModel.MissionTypeEnum.PracticeFight) ? 0.0625f : ((missionType == CombatXpModel.MissionTypeEnum.Tournament) ? 0.33f : ((missionType == CombatXpModel.MissionTypeEnum.SimulationBattle) ? 0.9f : ((missionType == CombatXpModel.MissionTypeEnum.Battle) ? 1f : 1f)))));
            ExplainedNumber explainedNumber = new ExplainedNumber(num2, null);

            if (party != null)
            {
                this.GetBattleXpBonusFromPerks(party, ref explainedNumber, attackerTroop);
            }
            xpAmount = MathF.Round(explainedNumber.ResultNumber) * 3;             //buffed by a factor of 3 -> had to import the private Getbattlexp as this method uses an out in the inputs
        }
        public override void GetXpFromHit(CharacterObject attackerTroop, CharacterObject attackedTroop, int damage, bool isFatal, MissionTypeEnum missionType, out int xpAmount)
        {
            base.GetXpFromHit(attackerTroop, attackedTroop, damage, isFatal, missionType, out xpAmount);

            if (missionType == MissionTypeEnum.Battle)
            {
                decimal mult = getMult(attackerTroop);

                if (mult != 1.0m)
                {
                    xpAmount = (int)decimal.Round((decimal)xpAmount * mult);
                }
            }
        }
Exemplo n.º 7
0
        public override void GetXpFromHit(CharacterObject attackerTroop, CharacterObject captain, CharacterObject attackedTroop, PartyBase party, int damage, bool isFatal, MissionTypeEnum missionType, out int xpAmount)
        {
            if (attackerTroop == null || attackedTroop == null)
            {
                xpAmount = 0;
                return;
            }

            int   num = attackerTroop.MaxHitPoints();
            float troopPowerBasedOnContext;

            if (party != null && party.MapEvent != null)
            {
                troopPowerBasedOnContext = Campaign.Current.Models.MilitaryPowerModel.GetTroopPowerBasedOnContext(attackerTroop, party.MapEvent.EventType, party.Side, missionType == CombatXpModel.MissionTypeEnum.SimulationBattle);
            }
            else
            {
                troopPowerBasedOnContext = Campaign.Current.Models.MilitaryPowerModel.GetTroopPowerBasedOnContext(attackerTroop, MapEvent.BattleTypes.None, BattleSideEnum.None, false);
            }
            xpAmount = MBMath.Round(0.4f * ((troopPowerBasedOnContext + 0.5f) * (float)(Math.Min(damage, num) + (isFatal ? num : 0))));
            if (missionType == CombatXpModel.MissionTypeEnum.NoXp)
            {
                xpAmount = 0;
            }

            if (attackerTroop.IsHero && missionType == MissionTypeEnum.Tournament)
            {
                if (BannerlordTweaksSettings.Instance is { } settings&& settings.TournamentHeroExperienceMultiplierEnabled)
                {
                    xpAmount = (int)MathF.Round(settings.TournamentHeroExperienceMultiplier * (float)xpAmount);
                }
                else
                {
                    xpAmount = MathF.Round((float)xpAmount * 0.33f);
                }
            }
Exemplo n.º 8
0
 public override void GetXpFromHit(CharacterObject attackerTroop, CharacterObject attackedTroop, int damage, bool isFatal,
                                   MissionTypeEnum missionType, out int xpAmount)
 {
     base.GetXpFromHit(attackerTroop, attackedTroop, damage, isFatal, missionType, out xpAmount);
     xpAmount = (int)Math.Round(xpAmount * (CustomCampaignOptionsBehaviour.Instance.TroopXp / 100f));
 }