HellBomb.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using Server.MirDatabase;
  2. using Server.MirEnvir;
  3. using S = ServerPackets;
  4. namespace Server.MirObjects.Monsters
  5. {
  6. public class HellBomb : MonsterObject
  7. {
  8. public long ExplosionTime;
  9. protected override bool CanMove { get { return false; } }
  10. protected override bool CanRegen { get { return false; } }
  11. protected internal HellBomb(MonsterInfo info)
  12. : base(info)
  13. {
  14. ExplosionTime = Envir.Time + (10 * Settings.Second);
  15. Direction = MirDirection.Up;
  16. }
  17. protected override void FindTarget() { }
  18. public override void Turn(MirDirection dir)
  19. {
  20. }
  21. public override bool Walk(MirDirection dir)
  22. {
  23. return false;
  24. }
  25. protected override void ProcessRegen() { }
  26. protected override void ProcessSearch() { }
  27. protected override void ProcessRoam() { }
  28. public override void ApplyPoison(Poison p, MapObject Caster = null, bool NoResist = false, bool ignoreDefence = true) { }
  29. public override int Struck(int damage, DefenceType type = DefenceType.ACAgility)
  30. {
  31. return 0;
  32. }
  33. protected override void ProcessTarget()
  34. {
  35. if (Envir.Time > ExplosionTime) { Die(); return; }
  36. }
  37. public override void Die()
  38. {
  39. if (HP > 0)
  40. {
  41. Broadcast(new S.ObjectAttack { ObjectID = ObjectID, Direction = Direction, Location = CurrentLocation });
  42. ActionList.Add(new DelayedAction(DelayedType.Die, Envir.Time + 500));
  43. }
  44. base.Die();
  45. }
  46. protected override void CompleteDeath(IList<object> data)
  47. {
  48. List<MapObject> targets = FindAllTargets(4, CurrentLocation, false);
  49. if (targets.Count == 0) return;
  50. for (int i = 0; i < targets.Count; i++)
  51. {
  52. int damage = GetAttackPower(Stats[Stat.MinDC], Stats[Stat.MaxDC]);
  53. if (damage == 0) return;
  54. if (targets[i].Attacked(this, damage, DefenceType.AC) <= 0) continue;
  55. switch (Info.Image)
  56. {
  57. case Monster.HellBomb1:
  58. PoisonTarget(targets[i], 1, 5, PoisonType.Frozen, 2000);
  59. break;
  60. case Monster.HellBomb2:
  61. PoisonTarget(targets[i], 1, 5, PoisonType.Dazed, 2000);
  62. break;
  63. case Monster.HellBomb3:
  64. PoisonTarget(targets[i], 1, 5, PoisonType.Bleeding, 2000);
  65. break;
  66. }
  67. }
  68. }
  69. }
  70. }