Example #1
0
        public static HitDamage GetDamage(LiveMonster src, LiveMonster dest)
        {
            HitDamage damage;
            double attrRateOn = 1; //属性相克的伤害修正
            bool isCrt = false;
            if (dest.Avatar.MonsterConfig.AttrDef != null)
            {
                attrRateOn -= dest.Avatar.MonsterConfig.AttrDef[src.AttackType];
            }

            if (src.RealCrt > 0)//存在暴击率
            {
                if (MathTool.GetRandom(100) < src.RealCrt * GameConstants.CrtToRate)
                {
                    attrRateOn *= (GameConstants.DefaultCrtDamage + src.CrtDamAddRate);
                    isCrt = true;
                }
            }

            var realAttackType = MonsterBook.HasTag(src.CardId, "mattack") ? src.Attr : src.AttackType;
            if (realAttackType == 0)//物理攻击
            {
                var damValue = Math.Max(1, (int)(src.RealAtk*(100-dest.RealDef*GameConstants.DefToRate)/100f * attrRateOn));//至少有1点伤害
                var noDefDamValue = (int)(src.RealAtk * attrRateOn);
                damage = new HitDamage(damValue, noDefDamValue, 0, DamageTypes.Physical);
            }
            else
            {
                var damValue = (int)(src.RealAtk * (100 + src.RealMag * GameConstants.MagToRate) / 100f * attrRateOn);
                damage = new HitDamage(damValue, damValue, realAttackType, DamageTypes.Magic);
                dest.CheckMagicDamage(damage);
            }
            damage.IsCrt = isCrt;

            bool nodef = false; //无视防御
            if (!src.BuffManager.HasBuff(BuffEffectTypes.NoSkill))
            {
                src.SkillManager.CheckDamage(src, dest, true, damage, ref nodef);
            }
            if (!dest.BuffManager.HasBuff(BuffEffectTypes.NoSkill))
            {
                dest.SkillManager.CheckDamage(src, dest, false, damage, ref nodef);
            }

            damage.SetDamage(DamageTypes.All, damage.Value);
            return damage;
        }
Example #2
0
 public static int GetMagicDamage(LiveMonster dest, HitDamage damage)
 {
     if (damage.Dtype == DamageTypes.Magic)
     {
         dest.CheckMagicDamage(damage);
     }
     return damage.Value;
 }