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