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); } }