public static DamageHandler CalculateDamage(SkillCast skill, Player player, Mob mob, bool isCrit = false) { if (player.GmFlags.Contains("oneshot")) { return(new DamageHandler(mob.Stats.Hp.Total, true)); } // TODO: Calculate attack damage w/ stats double attackDamage = 300; double skillDamageRate = isCrit ? skill.GetCriticalDamage() : skill.GetDamageRate(); double skillDamage = skillDamageRate * attackDamage; double enemyRes = skill.GetSkillDamageType() == DamageType.Physical ? mob.Stats.PhysRes.Total : mob.Stats.MagRes.Total; double resPierce = skill.GetSkillDamageType() == DamageType.Physical ? player.Stats[PlayerStatId.PhysAtk].Current : player.Stats[PlayerStatId.MagAtk].Current; // TODO: Fix damage multiplier (add pet?) double numerator = skillDamage * (1 + player.Stats[PlayerStatId.BonusAtk].Current) * (1500 - (enemyRes - (resPierce * 15))); double pierceCoeff = 1 - player.Stats[PlayerStatId.Pierce].Current; // TODO: Find correct enemy defense stats double denominator = mob.Stats.Cad.Total * pierceCoeff * 15; return(new DamageHandler(numerator / denominator, isCrit)); }
public static DamageHandler CalculateSkillDamage(SkillCast skillCast) => new DamageHandler(skillCast.GetDamageRate(), false);