public static void ComputeBlowDamage(ref AttackInformation attackInformation, ref AttackCollisionData attackCollisionData, in MissionWeapon attackerWeapon, DamageTypes damageType, float magnitude, int speedBonus, bool cancelDamage, out int inflictedDamage, out int absorbedByArmor)
{
float armorAmountFloat = attackInformation.ArmorAmountFloat;
WeaponComponentData shieldOnBack = attackInformation.ShieldOnBack;
AgentFlag victimAgentFlag = attackInformation.VictimAgentFlag;
float victimAgentAbsorbedDamageRatio = attackInformation.VictimAgentAbsorbedDamageRatio;
float damageMultiplierOfBone = attackInformation.DamageMultiplierOfBone;
float combatDifficultyMultiplier = attackInformation.CombatDifficultyMultiplier;
Vec3 collisionGlobalPosition = attackCollisionData.CollisionGlobalPosition;
bool attackBlockedWithShield = attackCollisionData.AttackBlockedWithShield;
bool collidedWithShieldOnBack = attackCollisionData.CollidedWithShieldOnBack;
bool isFallDamage = attackCollisionData.IsFallDamage;
BasicCharacterObject attackerAgentCharacter = attackInformation.AttackerAgentCharacter;
BasicCharacterObject attackerCaptainCharacter = attackInformation.AttackerCaptainCharacter;
BasicCharacterObject victimAgentCharacter = attackInformation.VictimAgentCharacter;
BasicCharacterObject victimCaptainCharacter = attackInformation.VictimCaptainCharacter;
float num = 0f;
if (!isFallDamage)
{
StrikeMagnitudeCalculationModel strikeMagnitudeModel = Game.Current.BasicModels.StrikeMagnitudeModel;
float baseArmor = armorAmountFloat;
BasicCharacterObject attackerCharacter = attackerAgentCharacter;
BasicCharacterObject attackerCaptainCharacter2 = attackerCaptainCharacter;
BasicCharacterObject victimCharacter = victimAgentCharacter;
BasicCharacterObject victimCaptainCharacter2 = victimCaptainCharacter;
MissionWeapon missionWeapon = attackerWeapon;
num = strikeMagnitudeModel.CalculateAdjustedArmorForBlow(baseArmor, attackerCharacter, attackerCaptainCharacter2, victimCharacter, victimCaptainCharacter2, missionWeapon.CurrentUsageItem);
}
if (collidedWithShieldOnBack && shieldOnBack != null)
{
num += 10f;
}
float absorbedDamageRatio = victimAgentAbsorbedDamageRatio;
float num2 = Game.Current.BasicModels.StrikeMagnitudeModel.ComputeRawDamage(damageType, magnitude, num, absorbedDamageRatio);
float num3 = 1f;
if (!attackBlockedWithShield && !isFallDamage)
{
num3 *= damageMultiplierOfBone;
num3 *= combatDifficultyMultiplier;
}
num2 *= num3;
inflictedDamage = MBMath.ClampInt((int)num2, 0, 2000);
int num4 = MBMath.ClampInt((int)(Game.Current.BasicModels.StrikeMagnitudeModel.ComputeRawDamage(damageType, magnitude, 0f, absorbedDamageRatio) * num3), 0, 2000);
absorbedByArmor = num4 - inflictedDamage;
}