Jar1.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using Server.MirDatabase;
  2. using Server.MirEnvir;
  3. namespace Server.MirObjects.Monsters
  4. {
  5. public class Jar1 : MonsterObject
  6. {
  7. protected virtual byte AttackRange
  8. {
  9. get
  10. {
  11. return 1;
  12. }
  13. }
  14. protected override bool CanMove { get { return false; } }
  15. protected override bool CanRegen { get { return false; } }
  16. protected override bool InAttackRange()
  17. {
  18. return CurrentMap == Target.CurrentMap && Functions.InRange(CurrentLocation, Target.CurrentLocation, AttackRange);
  19. }
  20. protected internal Jar1(MonsterInfo info)
  21. : base(info)
  22. {
  23. }
  24. public override void Die()
  25. {
  26. ActionList.Add(new DelayedAction(DelayedType.Die, Envir.Time + 1000));
  27. base.Die();
  28. }
  29. protected override void CompleteDeath(IList<object> data)
  30. {
  31. SpawnSlave();
  32. }
  33. private void SpawnSlave()
  34. {
  35. ActionTime = Envir.Time + 300;
  36. AttackTime = Envir.Time + AttackSpeed;
  37. List<int> conquestAIs = new()
  38. {
  39. 72, // Siege Gate
  40. 73, // Gate West
  41. 80, // Archer
  42. 81, // Gate
  43. 82 // Wall
  44. };
  45. var validMonsters = Envir.MonsterInfoList
  46. .Where(x => x.Level <= Level && x.Level >= (Level - 10) && !x.IsBoss && !conquestAIs.Contains(x.AI))
  47. .ToList();
  48. if (validMonsters.Count > 0)
  49. {
  50. var idx = Envir.Random.Next(validMonsters.Count);
  51. var monster = validMonsters[idx];
  52. var mob = GetMonster(monster);
  53. if (mob == null) return;
  54. mob.Spawn(CurrentMap, CurrentLocation);
  55. mob.Target = Target;
  56. mob.ActionTime = Envir.Time + 2000;
  57. }
  58. }
  59. }
  60. }