Deer.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using Server.MirDatabase;
  2. namespace Server.MirObjects.Monsters
  3. {
  4. public class Deer : HarvestMonster
  5. {
  6. private bool _runAway;
  7. protected override bool CanAttack
  8. {
  9. get
  10. {
  11. return base.CanAttack && !_runAway;
  12. }
  13. }
  14. protected internal Deer(MonsterInfo info)
  15. : base(info)
  16. {
  17. if (Info.AI != 2) return;
  18. RemainingSkinCount = 5;
  19. if (Envir.Random.Next(7) == 0)
  20. {
  21. _runAway = true;
  22. Quality = (short)(Envir.Random.Next(8) * 2000);
  23. MoveSpeed -= 300;
  24. }
  25. else
  26. Quality = (short)(Envir.Random.Next(4) * 1000);
  27. }
  28. public override void RefreshAll()
  29. {
  30. base.RefreshAll();
  31. if (_runAway && MoveSpeed >= 600) MoveSpeed -= 300;
  32. }
  33. protected override void FindTarget()
  34. {
  35. if (_runAway)
  36. base.FindTarget();
  37. }
  38. protected override void ProcessTarget()
  39. {
  40. if (_runAway)
  41. {
  42. if (!CanMove || Target == null) return;
  43. MirDirection dir = Functions.DirectionFromPoint(Target.CurrentLocation, CurrentLocation);
  44. if (Walk(dir)) return;
  45. switch (Envir.Random.Next(2)) //No favour
  46. {
  47. case 0:
  48. for (int i = 0; i < 7; i++)
  49. {
  50. dir = Functions.NextDir(dir);
  51. if (Walk(dir))
  52. return;
  53. }
  54. break;
  55. default:
  56. for (int i = 0; i < 7; i++)
  57. {
  58. dir = Functions.PreviousDir(dir);
  59. if (Walk(dir))
  60. return;
  61. }
  62. break;
  63. }
  64. }
  65. else base.ProcessTarget();
  66. }
  67. }
  68. }