using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HarmonyLib;
using TaleWorlds.CampaignSystem;
using TaleWorlds.CampaignSystem.SandBox.GameComponents.Map;
using TaleWorlds.Core;
using TaleWorlds.Library;
using TaleWorlds.MountAndBlade;
namespace ArenaXP
{
// Token: 0x02000002 RID: 2
public class SubModule : MBSubModuleBase
{
// Token: 0x06000001 RID: 1 RVA: 0x00002050 File Offset: 0x00000250
protected override void OnBeforeInitialModuleScreenSetAsRoot()
{
base.OnBeforeInitialModuleScreenSetAsRoot();
InformationManager.DisplayMessage(new InformationMessage("Arena XP"));
}
protected override void OnSubModuleLoad()
{
base.OnSubModuleLoad();
var harmony = new Harmony("arenaxp");
harmony.PatchAll();
}
}
// Token: 0x02000003 RID: 3
[HarmonyPatch(typeof(DefaultCombatXpModel), "GetXpFromHit")]
internal class ArenaXPOverride
{
// Token: 0x06002E0C RID: 11788 RVA: 0x000BAFD4 File Offset: 0x000B91D4
public static bool Prefix(CharacterObject attackerTroop, CharacterObject captain, CharacterObject attackedTroop, PartyBase party, int damage, bool isFatal, CombatXpModel.MissionTypeEnum missionType, out int xpAmount)
{
int num = attackedTroop.MaxHitPoints();
float troopPowerBasedOnContext;
if (((party != null) ? party.MapEvent : null) != 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);
}
float num2 = 0.4f * ((troopPowerBasedOnContext + 0.5f) * (float)(Math.Min(damage, num) + (isFatal ? num : 0)));
num2 *= ((missionType == CombatXpModel.MissionTypeEnum.NoXp) ? 0f : ((missionType == CombatXpModel.MissionTypeEnum.PracticeFight) ? 1f : ((missionType == CombatXpModel.MissionTypeEnum.Tournament) ? 1f : ((missionType == CombatXpModel.MissionTypeEnum.SimulationBattle) ? 1f : ((missionType == CombatXpModel.MissionTypeEnum.Battle) ? 1f : 1f)))));
ExplainedNumber explainedNumber = new ExplainedNumber(num2, false, null);
if (party != null)
{
this.GetBattleXpBonusFromPerks(party, ref explainedNumber, attackerTroop);
}
if (captain != null && captain.IsHero && captain.GetPerkValue(DefaultPerks.Leadership.InspiringLeader))
{
explainedNumber.AddFactor(DefaultPerks.Leadership.InspiringLeader.SecondaryBonus, DefaultPerks.Leadership.InspiringLeader.Name);
}
xpAmount = MathF.Round(explainedNumber.ResultNumber);
return false;
}
}
}