CannibalPlant.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using Server.MirDatabase;
  2. using Server.MirEnvir;
  3. using S = ServerPackets;
  4. namespace Server.MirObjects.Monsters
  5. {
  6. public class CannibalPlant : HarvestMonster
  7. {
  8. public bool Visible;
  9. public long VisibleTime;
  10. protected override bool CanAttack
  11. {
  12. get
  13. {
  14. return Visible && base.CanAttack;
  15. }
  16. }
  17. protected override bool CanMove { get { return false; } }
  18. public override bool Blocking
  19. {
  20. get
  21. {
  22. return Visible && base.Blocking;
  23. }
  24. }
  25. protected internal CannibalPlant(MonsterInfo info)
  26. : base(info)
  27. {
  28. Visible = false;
  29. }
  30. protected override void ProcessAI()
  31. {
  32. if (!Dead && Envir.Time > VisibleTime)
  33. {
  34. VisibleTime = Envir.Time + 2000;
  35. bool visible = FindNearby(3);
  36. if (!Visible && visible)
  37. {
  38. Visible = true;
  39. CellTime = Envir.Time + 500;
  40. Broadcast(GetInfo());
  41. Broadcast(new S.ObjectShow { ObjectID = ObjectID });
  42. ActionTime = Envir.Time + 1000;
  43. }
  44. if (Visible && !visible)
  45. {
  46. Visible = false;
  47. VisibleTime = Envir.Time + 3000;
  48. Broadcast(new S.ObjectHide { ObjectID = ObjectID });
  49. SetHP(Stats[Stat.HP]);
  50. }
  51. }
  52. base.ProcessAI();
  53. }
  54. public override void Turn(MirDirection dir)
  55. {
  56. }
  57. public override bool Walk(MirDirection dir) { return false; }
  58. public override bool IsAttackTarget(MonsterObject attacker)
  59. {
  60. return Visible && base.IsAttackTarget(attacker);
  61. }
  62. public override bool IsAttackTarget(HumanObject attacker)
  63. {
  64. return Visible && base.IsAttackTarget(attacker);
  65. }
  66. protected override void ProcessRoam() { }
  67. protected override void ProcessSearch()
  68. {
  69. if (Visible)
  70. base.ProcessSearch();
  71. }
  72. public override Packet GetInfo()
  73. {
  74. if (!Visible) return null;
  75. return base.GetInfo();
  76. }
  77. }
  78. }