public static void OnCombatHit(
CharacterObject affectorCharacter,
CharacterObject affectedCharacter,
Hero captainHero,
Hero commander,
float speedBonusFromMovement,
float shotDifficulty,
WeaponComponentData affectorWeapon,
float hitPointRatio,
CombatXpModel.MissionTypeEnum missionType,
bool isAffectorMounted,
bool isTeamKill,
bool isAffectorUnderCommand,
float damageAmount,
bool isFatal)
{
float f = 1f;
if (isTeamKill)
return;
if (affectorCharacter.IsHero)
{
Hero heroObject = affectorCharacter.HeroObject;
int xpAmount;
Campaign.Current.Models.CombatXpModel.GetXpFromHit(heroObject.CharacterObject, affectedCharacter, heroObject.PartyBelongedTo?.Party, (int) damageAmount, isFatal, missionType, out xpAmount);
f = (float) xpAmount;
if (affectorWeapon != null)
{
SkillObject skillForWeapon = Campaign.Current.Models.CombatXpModel.GetSkillForWeapon(affectorWeapon);
float num = skillForWeapon == DefaultSkills.Bow ? 0.5f : 1f;
if ((double) shotDifficulty > 0.0)
f += (float) MBMath.Floor(f * num * Campaign.Current.Models.CombatXpModel.GetXpMultiplierFromShotDifficulty(shotDifficulty));
heroObject.AddSkillXp(skillForWeapon, (float) MBRandom.RoundRandomized(f));
}
else
heroObject.AddSkillXp(DefaultSkills.Athletics, (float) MBRandom.RoundRandomized(f));
if (isAffectorMounted)
{
float num1 = 0.1f;
if ((double) speedBonusFromMovement > 0.0)
num1 *= 1f + speedBonusFromMovement;
else if ((double) shotDifficulty - 1.0 > 0.0)
{
int num2 = MathF.Round(shotDifficulty - 1f);
if (num2 > 0)
num1 += (float) num2;
}
if ((double) num1 > 0.0)
heroObject.AddSkillXp(DefaultSkills.Riding, (float) MBRandom.RoundRandomized(num1 * f));
}
else
{
float num = 0.2f;
if ((double) speedBonusFromMovement > 0.0)
num += 1.5f * speedBonusFromMovement;
if ((double) num > 0.0)
heroObject.AddSkillXp(DefaultSkills.Athletics, (float) MBRandom.RoundRandomized(num * f));
}
}
if (commander == null || commander == affectorCharacter.HeroObject || commander.PartyBelongedTo == null)
return;
SkillLevelingManager.OnTacticsUsed(commander.PartyBelongedTo, (float) MathF.Ceiling(0.02f * f));
}