示例#1
0
        private void player_BeginFitting(Living living)
        {
            this.m_count--;
            if (living is Player)
            {
                Player p = (living as Player);

                if (p.Blood < Math.Abs(m_blood))
                {
                    p.ReducedBlood(-p.Blood + 2);//MrPhuong
                }
                else
                {
                    p.ReducedBlood(m_blood);//MrPhuong
                }
            }
            if (living is NormalNpc)
            {
                NormalNpc p = (living as NormalNpc);

                if (p.Blood < Math.Abs(m_blood))
                {
                    p.ReducedBlood(-p.Blood + 2);//MrPhuong
                }
                else
                {
                    p.ReducedBlood(m_blood);//MrPhuong
                }
            }
            if (m_count < 0)
            {
                Stop();
            }
        }
        private int MakeCriticalDamage(NormalNpc p, int baseDamage)
        {
            double lucky = m_living.Lucky;

            Random rd     = new Random();
            bool   canHit = 75000 * lucky / (lucky + 800) > rd.Next(100000);

            if (canHit)
            {
                return((int)((0.5 + lucky * 0.0003) * baseDamage));
            }
            else
            {
                return(0);
            }
        }
        private int MakeDamage(NormalNpc p)
        {
            double baseDamage = m_living.BaseDamage;
            double baseGuard  = p.BaseGuard;

            double defence = p.Defence;
            double attack  = m_living.Attack;

            if (m_living.IgnoreArmor)
            {
                baseGuard = 0;
                defence   = 0;
            }

            float damagePlus = m_living.CurrentDamagePlus;
            float shootMinus = m_living.CurrentShootMinus;


            double DR1 = 0.95 * (p.BaseGuard - 3 * m_living.Grade) / (500 + p.BaseGuard - 3 * m_living.Grade);
            double DR2 = 0;

            if ((p.Defence - m_living.Lucky) < 0)
            {
                DR2 = 0;
            }
            else
            {
                DR2 = 0.95 * (p.Defence - m_living.Lucky) / (600 + p.Defence - m_living.Lucky);
            }

            double damage = (baseDamage * (1 + attack * 0.001) * (1 - (DR1 + DR2 - DR1 * DR2))) * damagePlus * shootMinus;

            Rectangle rect     = p.GetDirectDemageRect();
            double    distance = Math.Sqrt((rect.X - m_living.X) * (rect.X - m_living.X) + (rect.Y - m_living.Y) * (rect.Y - m_living.Y));

            damage = damage * (1 - distance / Math.Abs(m_tx - m_fx) / 4);

            if (damage < 0)
            {
                return(1);
            }
            else
            {
                return((int)damage);
            }
        }