DigOutZombie.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. using System.Drawing;
  2. using Server.MirDatabase;
  3. using S = ServerPackets;
  4. namespace Server.MirObjects.Monsters
  5. {
  6. public class DigOutZombie : MonsterObject
  7. {
  8. public bool Visible, DoneDigOut;
  9. public long VisibleTime, DigOutTime;
  10. public Point DigOutLocation;
  11. public MirDirection DigOutDirection;
  12. protected override bool CanAttack
  13. {
  14. get
  15. {
  16. return Visible && base.CanAttack;
  17. }
  18. }
  19. protected override bool CanMove
  20. {
  21. get
  22. {
  23. return Visible && base.CanMove;
  24. }
  25. }
  26. public override bool Blocking
  27. {
  28. get
  29. {
  30. return Visible && base.Blocking;
  31. }
  32. }
  33. protected internal DigOutZombie(MonsterInfo info)
  34. : base(info)
  35. {
  36. Visible = false;
  37. }
  38. protected override void ProcessAI()
  39. {
  40. if (!Dead && Envir.Time > VisibleTime)
  41. {
  42. VisibleTime = Envir.Time + 2000;
  43. bool visible = FindNearby(3);
  44. if (!Visible && visible)
  45. {
  46. Visible = true;
  47. CellTime = Envir.Time + 500;
  48. Broadcast(GetInfo());
  49. Broadcast(new S.ObjectShow { ObjectID = ObjectID });
  50. ActionTime = Envir.Time + 2000;
  51. DigOutTime = Envir.Time;
  52. DigOutLocation = CurrentLocation;
  53. DigOutDirection = Direction;
  54. }
  55. }
  56. SpawnDigOutEffect();
  57. base.ProcessAI();
  58. }
  59. protected virtual void SpawnDigOutEffect()
  60. {
  61. if (Visible && Envir.Time > DigOutTime + 1000 && !DoneDigOut)
  62. {
  63. SpellObject ob = new SpellObject
  64. {
  65. Spell = Spell.DigOutZombie,
  66. Value = 1,
  67. ExpireTime = Envir.Time + (5 * 60 * 1000),
  68. TickSpeed = 2000,
  69. Caster = null,
  70. CurrentLocation = DigOutLocation,
  71. CurrentMap = this.CurrentMap,
  72. Direction = DigOutDirection
  73. };
  74. CurrentMap.AddObject(ob);
  75. ob.Spawned();
  76. DoneDigOut = true;
  77. }
  78. }
  79. public override bool Walk(MirDirection dir)
  80. {
  81. return Visible && base.Walk(dir);
  82. }
  83. public override bool IsAttackTarget(MonsterObject attacker)
  84. {
  85. return Visible && base.IsAttackTarget(attacker);
  86. }
  87. public override bool IsAttackTarget(HumanObject attacker)
  88. {
  89. return Visible && base.IsAttackTarget(attacker);
  90. }
  91. protected override void ProcessSearch()
  92. {
  93. if (Visible)
  94. {
  95. base.ProcessSearch();
  96. }
  97. }
  98. public override Packet GetInfo()
  99. {
  100. return !Visible ? null : base.GetInfo();
  101. }
  102. }
  103. }