コード例 #1
0
    public double CalculateDamage(BattleCharacter attacker, BattleCharacter defender, SkillEffect effect, bool shouldCritical)
    {
        var damage = 0d;
        if (effect.HasStatModifier(Const.Stats.Attack))
        {
            var modifiedAtk = attacker.GetStatWithModifiers(Const.Stats.Attack, effect.StatsModifiers);
            damage += modifiedAtk.Value - defender.GetStat(Const.Stats.Defense);
        }

        if (effect.HasStatModifier(Const.Stats.Wisdom))
        {
            var modifiedWis = attacker.GetStatWithModifiers(Const.Stats.Wisdom, effect.StatsModifiers);
            damage += modifiedWis.Value - defender.GetStat(Const.Stats.Mind);
        }

        if (effect.HasStatModifier(Const.Stats.Mind))
        {
            damage += attacker.GetStatWithModifiers(Const.Stats.Mind, effect.StatsModifiers).Value;
        }

        if (shouldCritical)
        {
            damage *= Const.CriticalDamageMultiplier;
        }

        // damage value needs to be positive or zero at this point so a low atk doesn't heal a high def without going thru affinities 
        damage = Math.Max(0d, damage);

        damage = ApplyAffinityBonuses(damage, defender, effect.Affinities);

        return Math.Floor(damage);
    }