diff --git a/L2J_Mobius_01.0_Ertheia/dist/game/config/NPC.ini b/L2J_Mobius_01.0_Ertheia/dist/game/config/NPC.ini index 85abaac399..ba94544238 100644 --- a/L2J_Mobius_01.0_Ertheia/dist/game/config/NPC.ini +++ b/L2J_Mobius_01.0_Ertheia/dist/game/config/NPC.ini @@ -98,6 +98,7 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 1500 AggroDistanceCheckRange = 1500 @@ -107,6 +108,7 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 3000 AggroDistanceCheckRaidRange = 3000 diff --git a/L2J_Mobius_01.0_Ertheia/dist/game/data/xsd/shared.xsd b/L2J_Mobius_01.0_Ertheia/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_01.0_Ertheia/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_01.0_Ertheia/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_02.5_Underground/dist/game/config/NPC.ini b/L2J_Mobius_02.5_Underground/dist/game/config/NPC.ini index 85abaac399..ba94544238 100644 --- a/L2J_Mobius_02.5_Underground/dist/game/config/NPC.ini +++ b/L2J_Mobius_02.5_Underground/dist/game/config/NPC.ini @@ -98,6 +98,7 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 1500 AggroDistanceCheckRange = 1500 @@ -107,6 +108,7 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 3000 AggroDistanceCheckRaidRange = 3000 diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/xsd/shared.xsd b/L2J_Mobius_02.5_Underground/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_02.5_Underground/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_02.5_Underground/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_03.0_Helios/dist/game/config/NPC.ini b/L2J_Mobius_03.0_Helios/dist/game/config/NPC.ini index 85abaac399..ba94544238 100644 --- a/L2J_Mobius_03.0_Helios/dist/game/config/NPC.ini +++ b/L2J_Mobius_03.0_Helios/dist/game/config/NPC.ini @@ -98,6 +98,7 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 1500 AggroDistanceCheckRange = 1500 @@ -107,6 +108,7 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 3000 AggroDistanceCheckRaidRange = 3000 diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/xsd/shared.xsd b/L2J_Mobius_03.0_Helios/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_03.0_Helios/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_03.0_Helios/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_04.0_GrandCrusade/dist/game/config/NPC.ini b/L2J_Mobius_04.0_GrandCrusade/dist/game/config/NPC.ini index 85abaac399..ba94544238 100644 --- a/L2J_Mobius_04.0_GrandCrusade/dist/game/config/NPC.ini +++ b/L2J_Mobius_04.0_GrandCrusade/dist/game/config/NPC.ini @@ -98,6 +98,7 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 1500 AggroDistanceCheckRange = 1500 @@ -107,6 +108,7 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 3000 AggroDistanceCheckRaidRange = 3000 diff --git a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/xsd/shared.xsd b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_05.0_Salvation/dist/game/config/NPC.ini b/L2J_Mobius_05.0_Salvation/dist/game/config/NPC.ini index 85abaac399..ba94544238 100644 --- a/L2J_Mobius_05.0_Salvation/dist/game/config/NPC.ini +++ b/L2J_Mobius_05.0_Salvation/dist/game/config/NPC.ini @@ -98,6 +98,7 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 1500 AggroDistanceCheckRange = 1500 @@ -107,6 +108,7 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 3000 AggroDistanceCheckRaidRange = 3000 diff --git a/L2J_Mobius_05.0_Salvation/dist/game/data/xsd/shared.xsd b/L2J_Mobius_05.0_Salvation/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_05.0_Salvation/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_05.0_Salvation/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_05.5_EtinasFate/dist/game/config/NPC.ini b/L2J_Mobius_05.5_EtinasFate/dist/game/config/NPC.ini index 85abaac399..ba94544238 100644 --- a/L2J_Mobius_05.5_EtinasFate/dist/game/config/NPC.ini +++ b/L2J_Mobius_05.5_EtinasFate/dist/game/config/NPC.ini @@ -98,6 +98,7 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 1500 AggroDistanceCheckRange = 1500 @@ -107,6 +108,7 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 3000 AggroDistanceCheckRaidRange = 3000 diff --git a/L2J_Mobius_05.5_EtinasFate/dist/game/data/xsd/shared.xsd b/L2J_Mobius_05.5_EtinasFate/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_05.5_EtinasFate/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_05.5_EtinasFate/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_06.0_Fafurion/dist/game/config/NPC.ini b/L2J_Mobius_06.0_Fafurion/dist/game/config/NPC.ini index 7f5801e67e..2291e75f6f 100644 --- a/L2J_Mobius_06.0_Fafurion/dist/game/config/NPC.ini +++ b/L2J_Mobius_06.0_Fafurion/dist/game/config/NPC.ini @@ -98,6 +98,7 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = True # Maximum distance monsters can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 1500 AggroDistanceCheckRange = 1500 @@ -107,6 +108,7 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 3000 AggroDistanceCheckRaidRange = 3000 diff --git a/L2J_Mobius_06.0_Fafurion/dist/game/data/xsd/shared.xsd b/L2J_Mobius_06.0_Fafurion/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_06.0_Fafurion/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_06.0_Fafurion/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/config/NPC.ini b/L2J_Mobius_07.0_PreludeOfWar/dist/game/config/NPC.ini index 3de9c5111d..774ce478ce 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/dist/game/config/NPC.ini +++ b/L2J_Mobius_07.0_PreludeOfWar/dist/game/config/NPC.ini @@ -98,6 +98,7 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = True # Maximum distance monsters can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 1500 AggroDistanceCheckRange = 1500 @@ -107,6 +108,7 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 3000 AggroDistanceCheckRaidRange = 3000 diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/xsd/shared.xsd b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/config/NPC.ini b/L2J_Mobius_08.2_Homunculus/dist/game/config/NPC.ini index 3de9c5111d..774ce478ce 100644 --- a/L2J_Mobius_08.2_Homunculus/dist/game/config/NPC.ini +++ b/L2J_Mobius_08.2_Homunculus/dist/game/config/NPC.ini @@ -98,6 +98,7 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = True # Maximum distance monsters can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 1500 AggroDistanceCheckRange = 1500 @@ -107,6 +108,7 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 3000 AggroDistanceCheckRaidRange = 3000 diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/data/xsd/shared.xsd b/L2J_Mobius_08.2_Homunculus/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_08.2_Homunculus/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_08.2_Homunculus/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/config/NPC.ini b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/config/NPC.ini index 3de9c5111d..774ce478ce 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/config/NPC.ini +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/config/NPC.ini @@ -98,6 +98,7 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = True # Maximum distance monsters can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 1500 AggroDistanceCheckRange = 1500 @@ -107,6 +108,7 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 3000 AggroDistanceCheckRaidRange = 3000 diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/xsd/shared.xsd b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_10.1_MasterClass/dist/game/config/NPC.ini b/L2J_Mobius_10.1_MasterClass/dist/game/config/NPC.ini index 3de9c5111d..774ce478ce 100644 --- a/L2J_Mobius_10.1_MasterClass/dist/game/config/NPC.ini +++ b/L2J_Mobius_10.1_MasterClass/dist/game/config/NPC.ini @@ -98,6 +98,7 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = True # Maximum distance monsters can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 1500 AggroDistanceCheckRange = 1500 @@ -107,6 +108,7 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 3000 AggroDistanceCheckRaidRange = 3000 diff --git a/L2J_Mobius_10.1_MasterClass/dist/game/data/xsd/shared.xsd b/L2J_Mobius_10.1_MasterClass/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_10.1_MasterClass/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_10.1_MasterClass/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/config/NPC.ini b/L2J_Mobius_10.2_MasterClass/dist/game/config/NPC.ini index 3de9c5111d..774ce478ce 100644 --- a/L2J_Mobius_10.2_MasterClass/dist/game/config/NPC.ini +++ b/L2J_Mobius_10.2_MasterClass/dist/game/config/NPC.ini @@ -98,6 +98,7 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = True # Maximum distance monsters can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 1500 AggroDistanceCheckRange = 1500 @@ -107,6 +108,7 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. +# Overridden by Spawn chaseRange parameter. # Default: 3000 AggroDistanceCheckRaidRange = 3000 diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/shared.xsd b/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_C4_ScionsOfDestiny/dist/game/config/General.ini b/L2J_Mobius_C4_ScionsOfDestiny/dist/game/config/General.ini index 0fb7591d7e..7e2ff1231a 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/dist/game/config/General.ini +++ b/L2J_Mobius_C4_ScionsOfDestiny/dist/game/config/General.ini @@ -572,8 +572,8 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. -# Default: 1500 -AggroDistanceCheckRange = 1500 +# Default: 2000 +AggroDistanceCheckRange = 2000 # Use maximum aggro distance check for raids. # Grandbosses are excluded. @@ -581,8 +581,8 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. -# Default: 3000 -AggroDistanceCheckRaidRange = 3000 +# Default: 4000 +AggroDistanceCheckRaidRange = 4000 # Use maximum aggro distance check in instances. # Default: False diff --git a/L2J_Mobius_C6_Interlude/dist/game/config/General.ini b/L2J_Mobius_C6_Interlude/dist/game/config/General.ini index be9a858f75..388f5ad824 100644 --- a/L2J_Mobius_C6_Interlude/dist/game/config/General.ini +++ b/L2J_Mobius_C6_Interlude/dist/game/config/General.ini @@ -600,8 +600,8 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. -# Default: 1500 -AggroDistanceCheckRange = 1500 +# Default: 2000 +AggroDistanceCheckRange = 2000 # Use maximum aggro distance check for raids. # Grandbosses are excluded. @@ -609,8 +609,8 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. -# Default: 3000 -AggroDistanceCheckRaidRange = 3000 +# Default: 4000 +AggroDistanceCheckRaidRange = 4000 # Use maximum aggro distance check in instances. # Default: False diff --git a/L2J_Mobius_CT_0_Interlude/dist/game/config/NPC.ini b/L2J_Mobius_CT_0_Interlude/dist/game/config/NPC.ini index 7b17c78ace..357e01e24c 100644 --- a/L2J_Mobius_CT_0_Interlude/dist/game/config/NPC.ini +++ b/L2J_Mobius_CT_0_Interlude/dist/game/config/NPC.ini @@ -111,8 +111,9 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. -# Default: 1500 -AggroDistanceCheckRange = 1500 +# Overridden by Spawn chaseRange parameter. +# Default: 2000 +AggroDistanceCheckRange = 2000 # Use maximum aggro distance check for raids. # Grandbosses are excluded. @@ -120,8 +121,9 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. -# Default: 3000 -AggroDistanceCheckRaidRange = 3000 +# Overridden by Spawn chaseRange parameter. +# Default: 4000 +AggroDistanceCheckRaidRange = 4000 # Use maximum aggro distance check in instances. # Default: False diff --git a/L2J_Mobius_CT_0_Interlude/dist/game/data/xsd/spawns.xsd b/L2J_Mobius_CT_0_Interlude/dist/game/data/xsd/spawns.xsd index f67a465a47..bfe4e88cf3 100644 --- a/L2J_Mobius_CT_0_Interlude/dist/game/data/xsd/spawns.xsd +++ b/L2J_Mobius_CT_0_Interlude/dist/game/data/xsd/spawns.xsd @@ -50,6 +50,7 @@ + diff --git a/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/ai/AttackableAI.java index 74f94a23ca..36f5a46604 100644 --- a/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -733,7 +733,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || (npc.getInstanceId() == 0))) { diff --git a/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/data/SpawnTable.java b/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/data/SpawnTable.java index bfafe59c13..f7c0d61ccf 100644 --- a/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/data/SpawnTable.java +++ b/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/data/SpawnTable.java @@ -335,6 +335,11 @@ public class SpawnTable implements IXmlReader spawnInfo.set("respawnRandom", parseInteger(attrs, "respawnRandom")); } + if (attrs.getNamedItem("chaseRange") != null) + { + spawnInfo.set("chaseRange", parseInteger(attrs, "chaseRange")); + } + if (attrs.getNamedItem("periodOfDay") != null) { final String period = attrs.getNamedItem("periodOfDay").getNodeValue(); @@ -371,6 +376,7 @@ public class SpawnTable implements IXmlReader spawnDat.setXYZ(spawnInfo.getInt("x", 0), spawnInfo.getInt("y", 0), spawnInfo.getInt("z", 0)); spawnDat.setHeading(spawnInfo.getInt("heading", -1)); spawnDat.setRespawnDelay(spawnInfo.getInt("respawnDelay", 0), spawnInfo.getInt("respawnRandom", 0)); + spawnDat.setChaseRange(spawnInfo.getInt("chaseRange", 0)); spawnDat.setLocationId(spawnInfo.getInt("locId", 0)); final String territoryName = spawnInfo.getString("territoryName", ""); final String spawnName = spawnInfo.getString("spawnName", ""); diff --git a/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/model/Spawn.java index a49936809d..e8c94dc52f 100644 --- a/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/model/Spawn.java @@ -71,6 +71,8 @@ public class Spawn extends Location implements IIdentifiable, INamable private int _respawnMinDelay; /** Maximum respawn delay */ private int _respawnMaxDelay; + /** Maximum distance monsters can be pulled away from spawn. */ + private int _chaseRange; /** The generic constructor of Npc managed by this Spawn */ private Constructor _constructor; /** If True an Npc is respawned each time that another is killed */ @@ -546,6 +548,16 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public void setChaseRange(int chaseRange) + { + _chaseRange = chaseRange; + } + + public int getChaseRange() + { + return _chaseRange; + } + public void setSpawnTerritory(NpcSpawnTerritory territory) { _spawnTerritory = territory; diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/config/NPC.ini b/L2J_Mobius_CT_2.4_Epilogue/dist/game/config/NPC.ini index 41d6617583..f509c48b97 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/config/NPC.ini +++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/config/NPC.ini @@ -111,8 +111,9 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. -# Default: 1500 -AggroDistanceCheckRange = 1500 +# Overridden by Spawn chaseRange parameter. +# Default: 2000 +AggroDistanceCheckRange = 2000 # Use maximum aggro distance check for raids. # Grandbosses are excluded. @@ -120,8 +121,9 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. -# Default: 3000 -AggroDistanceCheckRaidRange = 3000 +# Overridden by Spawn chaseRange parameter. +# Default: 4000 +AggroDistanceCheckRaidRange = 4000 # Use maximum aggro distance check in instances. # Default: False diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/xsd/spawns.xsd b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/xsd/spawns.xsd index f67a465a47..bfe4e88cf3 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/xsd/spawns.xsd +++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/xsd/spawns.xsd @@ -50,6 +50,7 @@ + diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/ai/AttackableAI.java index 74f94a23ca..36f5a46604 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -733,7 +733,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || (npc.getInstanceId() == 0))) { diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/SpawnTable.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/SpawnTable.java index bfafe59c13..f7c0d61ccf 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/SpawnTable.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/SpawnTable.java @@ -335,6 +335,11 @@ public class SpawnTable implements IXmlReader spawnInfo.set("respawnRandom", parseInteger(attrs, "respawnRandom")); } + if (attrs.getNamedItem("chaseRange") != null) + { + spawnInfo.set("chaseRange", parseInteger(attrs, "chaseRange")); + } + if (attrs.getNamedItem("periodOfDay") != null) { final String period = attrs.getNamedItem("periodOfDay").getNodeValue(); @@ -371,6 +376,7 @@ public class SpawnTable implements IXmlReader spawnDat.setXYZ(spawnInfo.getInt("x", 0), spawnInfo.getInt("y", 0), spawnInfo.getInt("z", 0)); spawnDat.setHeading(spawnInfo.getInt("heading", -1)); spawnDat.setRespawnDelay(spawnInfo.getInt("respawnDelay", 0), spawnInfo.getInt("respawnRandom", 0)); + spawnDat.setChaseRange(spawnInfo.getInt("chaseRange", 0)); spawnDat.setLocationId(spawnInfo.getInt("locId", 0)); final String territoryName = spawnInfo.getString("territoryName", ""); final String spawnName = spawnInfo.getString("spawnName", ""); diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/Spawn.java index a3e996371f..e07b926fc3 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/Spawn.java @@ -71,6 +71,8 @@ public class Spawn extends Location implements IIdentifiable, INamable private int _respawnMinDelay; /** Maximum respawn delay */ private int _respawnMaxDelay; + /** Maximum distance monsters can be pulled away from spawn. */ + private int _chaseRange; /** The generic constructor of Npc managed by this Spawn */ private Constructor _constructor; /** If True an Npc is respawned each time that another is killed */ @@ -540,6 +542,16 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public void setChaseRange(int chaseRange) + { + _chaseRange = chaseRange; + } + + public int getChaseRange() + { + return _chaseRange; + } + public void setSpawnTerritory(NpcSpawnTerritory territory) { _spawnTerritory = territory; diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/config/NPC.ini b/L2J_Mobius_CT_2.6_HighFive/dist/game/config/NPC.ini index 41d6617583..f509c48b97 100644 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/config/NPC.ini +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/config/NPC.ini @@ -111,8 +111,9 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. -# Default: 1500 -AggroDistanceCheckRange = 1500 +# Overridden by Spawn chaseRange parameter. +# Default: 2000 +AggroDistanceCheckRange = 2000 # Use maximum aggro distance check for raids. # Grandbosses are excluded. @@ -120,8 +121,9 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. -# Default: 3000 -AggroDistanceCheckRaidRange = 3000 +# Overridden by Spawn chaseRange parameter. +# Default: 4000 +AggroDistanceCheckRaidRange = 4000 # Use maximum aggro distance check in instances. # Default: False diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/xsd/spawns.xsd b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/xsd/spawns.xsd index f67a465a47..bfe4e88cf3 100644 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/xsd/spawns.xsd +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/xsd/spawns.xsd @@ -50,6 +50,7 @@ + diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/ai/AttackableAI.java index 74f94a23ca..36f5a46604 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -733,7 +733,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || (npc.getInstanceId() == 0))) { diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/SpawnTable.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/SpawnTable.java index bfafe59c13..f7c0d61ccf 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/SpawnTable.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/SpawnTable.java @@ -335,6 +335,11 @@ public class SpawnTable implements IXmlReader spawnInfo.set("respawnRandom", parseInteger(attrs, "respawnRandom")); } + if (attrs.getNamedItem("chaseRange") != null) + { + spawnInfo.set("chaseRange", parseInteger(attrs, "chaseRange")); + } + if (attrs.getNamedItem("periodOfDay") != null) { final String period = attrs.getNamedItem("periodOfDay").getNodeValue(); @@ -371,6 +376,7 @@ public class SpawnTable implements IXmlReader spawnDat.setXYZ(spawnInfo.getInt("x", 0), spawnInfo.getInt("y", 0), spawnInfo.getInt("z", 0)); spawnDat.setHeading(spawnInfo.getInt("heading", -1)); spawnDat.setRespawnDelay(spawnInfo.getInt("respawnDelay", 0), spawnInfo.getInt("respawnRandom", 0)); + spawnDat.setChaseRange(spawnInfo.getInt("chaseRange", 0)); spawnDat.setLocationId(spawnInfo.getInt("locId", 0)); final String territoryName = spawnInfo.getString("territoryName", ""); final String spawnName = spawnInfo.getString("spawnName", ""); diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/Spawn.java index a49936809d..e8c94dc52f 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/Spawn.java @@ -71,6 +71,8 @@ public class Spawn extends Location implements IIdentifiable, INamable private int _respawnMinDelay; /** Maximum respawn delay */ private int _respawnMaxDelay; + /** Maximum distance monsters can be pulled away from spawn. */ + private int _chaseRange; /** The generic constructor of Npc managed by this Spawn */ private Constructor _constructor; /** If True an Npc is respawned each time that another is killed */ @@ -546,6 +548,16 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public void setChaseRange(int chaseRange) + { + _chaseRange = chaseRange; + } + + public int getChaseRange() + { + return _chaseRange; + } + public void setSpawnTerritory(NpcSpawnTerritory territory) { _spawnTerritory = territory; diff --git a/L2J_Mobius_Classic_1.0/dist/game/config/NPC.ini b/L2J_Mobius_Classic_1.0/dist/game/config/NPC.ini index 85abaac399..8a8e5e15c0 100644 --- a/L2J_Mobius_Classic_1.0/dist/game/config/NPC.ini +++ b/L2J_Mobius_Classic_1.0/dist/game/config/NPC.ini @@ -98,8 +98,9 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. -# Default: 1500 -AggroDistanceCheckRange = 1500 +# Overridden by Spawn chaseRange parameter. +# Default: 2000 +AggroDistanceCheckRange = 2000 # Use maximum aggro distance check for raids. # Grandbosses are excluded. @@ -107,8 +108,9 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. -# Default: 3000 -AggroDistanceCheckRaidRange = 3000 +# Overridden by Spawn chaseRange parameter. +# Default: 4000 +AggroDistanceCheckRaidRange = 4000 # Use maximum aggro distance check in instances. # Default: False diff --git a/L2J_Mobius_Classic_1.0/dist/game/data/xsd/shared.xsd b/L2J_Mobius_Classic_1.0/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_Classic_1.0/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_Classic_1.0/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_Classic_1.5_AgeOfSplendor/dist/game/config/NPC.ini b/L2J_Mobius_Classic_1.5_AgeOfSplendor/dist/game/config/NPC.ini index 85abaac399..8a8e5e15c0 100644 --- a/L2J_Mobius_Classic_1.5_AgeOfSplendor/dist/game/config/NPC.ini +++ b/L2J_Mobius_Classic_1.5_AgeOfSplendor/dist/game/config/NPC.ini @@ -98,8 +98,9 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. -# Default: 1500 -AggroDistanceCheckRange = 1500 +# Overridden by Spawn chaseRange parameter. +# Default: 2000 +AggroDistanceCheckRange = 2000 # Use maximum aggro distance check for raids. # Grandbosses are excluded. @@ -107,8 +108,9 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. -# Default: 3000 -AggroDistanceCheckRaidRange = 3000 +# Overridden by Spawn chaseRange parameter. +# Default: 4000 +AggroDistanceCheckRaidRange = 4000 # Use maximum aggro distance check in instances. # Default: False diff --git a/L2J_Mobius_Classic_1.5_AgeOfSplendor/dist/game/data/xsd/shared.xsd b/L2J_Mobius_Classic_1.5_AgeOfSplendor/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_Classic_1.5_AgeOfSplendor/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_Classic_1.5_AgeOfSplendor/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/NPC.ini b/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/NPC.ini index 85abaac399..8a8e5e15c0 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/NPC.ini +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/NPC.ini @@ -98,8 +98,9 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. -# Default: 1500 -AggroDistanceCheckRange = 1500 +# Overridden by Spawn chaseRange parameter. +# Default: 2000 +AggroDistanceCheckRange = 2000 # Use maximum aggro distance check for raids. # Grandbosses are excluded. @@ -107,8 +108,9 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. -# Default: 3000 -AggroDistanceCheckRaidRange = 3000 +# Overridden by Spawn chaseRange parameter. +# Default: 4000 +AggroDistanceCheckRaidRange = 4000 # Use maximum aggro distance check in instances. # Default: False diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/shared.xsd b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_Classic_2.5_Zaken/dist/game/config/NPC.ini b/L2J_Mobius_Classic_2.5_Zaken/dist/game/config/NPC.ini index 85abaac399..8a8e5e15c0 100644 --- a/L2J_Mobius_Classic_2.5_Zaken/dist/game/config/NPC.ini +++ b/L2J_Mobius_Classic_2.5_Zaken/dist/game/config/NPC.ini @@ -98,8 +98,9 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. -# Default: 1500 -AggroDistanceCheckRange = 1500 +# Overridden by Spawn chaseRange parameter. +# Default: 2000 +AggroDistanceCheckRange = 2000 # Use maximum aggro distance check for raids. # Grandbosses are excluded. @@ -107,8 +108,9 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. -# Default: 3000 -AggroDistanceCheckRaidRange = 3000 +# Overridden by Spawn chaseRange parameter. +# Default: 4000 +AggroDistanceCheckRaidRange = 4000 # Use maximum aggro distance check in instances. # Default: False diff --git a/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/xsd/shared.xsd b/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_Classic_2.7_Antharas/dist/game/config/NPC.ini b/L2J_Mobius_Classic_2.7_Antharas/dist/game/config/NPC.ini index 85abaac399..8a8e5e15c0 100644 --- a/L2J_Mobius_Classic_2.7_Antharas/dist/game/config/NPC.ini +++ b/L2J_Mobius_Classic_2.7_Antharas/dist/game/config/NPC.ini @@ -98,8 +98,9 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. -# Default: 1500 -AggroDistanceCheckRange = 1500 +# Overridden by Spawn chaseRange parameter. +# Default: 2000 +AggroDistanceCheckRange = 2000 # Use maximum aggro distance check for raids. # Grandbosses are excluded. @@ -107,8 +108,9 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. -# Default: 3000 -AggroDistanceCheckRaidRange = 3000 +# Overridden by Spawn chaseRange parameter. +# Default: 4000 +AggroDistanceCheckRaidRange = 4000 # Use maximum aggro distance check in instances. # Default: False diff --git a/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/xsd/shared.xsd b/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/config/NPC.ini b/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/config/NPC.ini index 85abaac399..8a8e5e15c0 100644 --- a/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/config/NPC.ini +++ b/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/config/NPC.ini @@ -98,8 +98,9 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. -# Default: 1500 -AggroDistanceCheckRange = 1500 +# Overridden by Spawn chaseRange parameter. +# Default: 2000 +AggroDistanceCheckRange = 2000 # Use maximum aggro distance check for raids. # Grandbosses are excluded. @@ -107,8 +108,9 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. -# Default: 3000 -AggroDistanceCheckRaidRange = 3000 +# Overridden by Spawn chaseRange parameter. +# Default: 4000 +AggroDistanceCheckRaidRange = 4000 # Use maximum aggro distance check in instances. # Default: False diff --git a/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/xsd/shared.xsd b/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/config/NPC.ini b/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/config/NPC.ini index 85abaac399..8a8e5e15c0 100644 --- a/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/config/NPC.ini +++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/config/NPC.ini @@ -98,8 +98,9 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. -# Default: 1500 -AggroDistanceCheckRange = 1500 +# Overridden by Spawn chaseRange parameter. +# Default: 2000 +AggroDistanceCheckRange = 2000 # Use maximum aggro distance check for raids. # Grandbosses are excluded. @@ -107,8 +108,9 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. -# Default: 3000 -AggroDistanceCheckRaidRange = 3000 +# Overridden by Spawn chaseRange parameter. +# Default: 4000 +AggroDistanceCheckRaidRange = 4000 # Use maximum aggro distance check in instances. # Default: False diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/xsd/shared.xsd b/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/config/NPC.ini b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/config/NPC.ini index 85abaac399..8a8e5e15c0 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/config/NPC.ini +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/config/NPC.ini @@ -98,8 +98,9 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. -# Default: 1500 -AggroDistanceCheckRange = 1500 +# Overridden by Spawn chaseRange parameter. +# Default: 2000 +AggroDistanceCheckRange = 2000 # Use maximum aggro distance check for raids. # Grandbosses are excluded. @@ -107,8 +108,9 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. -# Default: 3000 -AggroDistanceCheckRaidRange = 3000 +# Overridden by Spawn chaseRange parameter. +# Default: 4000 +AggroDistanceCheckRaidRange = 4000 # Use maximum aggro distance check in instances. # Default: False diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/shared.xsd b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_Classic_Interlude/dist/game/config/NPC.ini b/L2J_Mobius_Classic_Interlude/dist/game/config/NPC.ini index 85abaac399..8a8e5e15c0 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/config/NPC.ini +++ b/L2J_Mobius_Classic_Interlude/dist/game/config/NPC.ini @@ -98,8 +98,9 @@ MaxDriftRange = 300 AggroDistanceCheckEnabled = False # Maximum distance monsters can be pulled away from spawn. -# Default: 1500 -AggroDistanceCheckRange = 1500 +# Overridden by Spawn chaseRange parameter. +# Default: 2000 +AggroDistanceCheckRange = 2000 # Use maximum aggro distance check for raids. # Grandbosses are excluded. @@ -107,8 +108,9 @@ AggroDistanceCheckRange = 1500 AggroDistanceCheckRaids = False # Maximum distance raids can be pulled away from spawn. -# Default: 3000 -AggroDistanceCheckRaidRange = 3000 +# Overridden by Spawn chaseRange parameter. +# Default: 4000 +AggroDistanceCheckRaidRange = 4000 # Use maximum aggro distance check in instances. # Default: False diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/shared.xsd b/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/ai/AttackableAI.java index dc6073c082..bf198b8071 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/config/NPC.ini b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/config/NPC.ini index 85abaac399..05b01eebd6 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/config/NPC.ini +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/config/NPC.ini @@ -94,21 +94,23 @@ MaxDriftRange = 300 # Enable monster aggro distance check. # When enabled monsters will lose aggro if pulled far away from spawn. -# Default: False -AggroDistanceCheckEnabled = False +# Default: True +AggroDistanceCheckEnabled = True # Maximum distance monsters can be pulled away from spawn. -# Default: 1500 -AggroDistanceCheckRange = 1500 +# Overridden by Spawn chaseRange parameter. +# Default: 2000 +AggroDistanceCheckRange = 2000 # Use maximum aggro distance check for raids. # Grandbosses are excluded. -# Default: False -AggroDistanceCheckRaids = False +# Default: True +AggroDistanceCheckRaids = True # Maximum distance raids can be pulled away from spawn. -# Default: 3000 -AggroDistanceCheckRaidRange = 3000 +# Overridden by Spawn chaseRange parameter. +# Default: 4000 +AggroDistanceCheckRaidRange = 4000 # Use maximum aggro distance check in instances. # Default: False diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/xsd/shared.xsd b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/config/NPC.ini b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/config/NPC.ini index 85abaac399..05b01eebd6 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/config/NPC.ini +++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/config/NPC.ini @@ -94,21 +94,23 @@ MaxDriftRange = 300 # Enable monster aggro distance check. # When enabled monsters will lose aggro if pulled far away from spawn. -# Default: False -AggroDistanceCheckEnabled = False +# Default: True +AggroDistanceCheckEnabled = True # Maximum distance monsters can be pulled away from spawn. -# Default: 1500 -AggroDistanceCheckRange = 1500 +# Overridden by Spawn chaseRange parameter. +# Default: 2000 +AggroDistanceCheckRange = 2000 # Use maximum aggro distance check for raids. # Grandbosses are excluded. -# Default: False -AggroDistanceCheckRaids = False +# Default: True +AggroDistanceCheckRaids = True # Maximum distance raids can be pulled away from spawn. -# Default: 3000 -AggroDistanceCheckRaidRange = 3000 +# Overridden by Spawn chaseRange parameter. +# Default: 4000 +AggroDistanceCheckRaidRange = 4000 # Use maximum aggro distance check in instances. # Default: False diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/xsd/shared.xsd b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/config/NPC.ini b/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/config/NPC.ini index 85abaac399..05b01eebd6 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/config/NPC.ini +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/config/NPC.ini @@ -94,21 +94,23 @@ MaxDriftRange = 300 # Enable monster aggro distance check. # When enabled monsters will lose aggro if pulled far away from spawn. -# Default: False -AggroDistanceCheckEnabled = False +# Default: True +AggroDistanceCheckEnabled = True # Maximum distance monsters can be pulled away from spawn. -# Default: 1500 -AggroDistanceCheckRange = 1500 +# Overridden by Spawn chaseRange parameter. +# Default: 2000 +AggroDistanceCheckRange = 2000 # Use maximum aggro distance check for raids. # Grandbosses are excluded. -# Default: False -AggroDistanceCheckRaids = False +# Default: True +AggroDistanceCheckRaids = True # Maximum distance raids can be pulled away from spawn. -# Default: 3000 -AggroDistanceCheckRaidRange = 3000 +# Overridden by Spawn chaseRange parameter. +# Default: 4000 +AggroDistanceCheckRaidRange = 4000 # Use maximum aggro distance check in instances. # Default: False diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/xsd/shared.xsd b/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations; diff --git a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/config/NPC.ini b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/config/NPC.ini index 85abaac399..05b01eebd6 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/config/NPC.ini +++ b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/config/NPC.ini @@ -94,21 +94,23 @@ MaxDriftRange = 300 # Enable monster aggro distance check. # When enabled monsters will lose aggro if pulled far away from spawn. -# Default: False -AggroDistanceCheckEnabled = False +# Default: True +AggroDistanceCheckEnabled = True # Maximum distance monsters can be pulled away from spawn. -# Default: 1500 -AggroDistanceCheckRange = 1500 +# Overridden by Spawn chaseRange parameter. +# Default: 2000 +AggroDistanceCheckRange = 2000 # Use maximum aggro distance check for raids. # Grandbosses are excluded. -# Default: False -AggroDistanceCheckRaids = False +# Default: True +AggroDistanceCheckRaids = True # Maximum distance raids can be pulled away from spawn. -# Default: 3000 -AggroDistanceCheckRaidRange = 3000 +# Overridden by Spawn chaseRange parameter. +# Default: 4000 +AggroDistanceCheckRaidRange = 4000 # Use maximum aggro distance check in instances. # Default: False diff --git a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/xsd/shared.xsd b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/xsd/shared.xsd index b62e7ac554..ad57275436 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/xsd/shared.xsd +++ b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/xsd/shared.xsd @@ -113,6 +113,7 @@ + diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/ai/AttackableAI.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/ai/AttackableAI.java index e73e1a5f7a..77620528b1 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/ai/AttackableAI.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/ai/AttackableAI.java @@ -608,7 +608,7 @@ public class AttackableAI extends CreatureAI if (Config.AGGRO_DISTANCE_CHECK_ENABLED && npc.isMonster() && !npc.isWalker() && !(npc instanceof GrandBoss)) { final Spawn spawn = npc.getSpawn(); - if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE))) + if ((spawn != null) && (npc.calculateDistance3D(spawn.getLocation()) > (spawn.getChaseRange() > 0 ? Math.max(Config.MAX_DRIFT_RANGE, spawn.getChaseRange()) : (npc.isRaid() ? Config.AGGRO_DISTANCE_CHECK_RAID_RANGE : Config.AGGRO_DISTANCE_CHECK_RANGE)))) { if ((Config.AGGRO_DISTANCE_CHECK_RAIDS || !npc.isRaid()) && (Config.AGGRO_DISTANCE_CHECK_INSTANCES || !npc.isInInstance())) { diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/Spawn.java index da50a0b5fe..274a6252ee 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/Spawn.java @@ -517,6 +517,11 @@ public class Spawn extends Location implements IIdentifiable, INamable return _respawnMinDelay != _respawnMaxDelay; } + public int getChaseRange() + { + return _spawnTemplate.getChaseRange(); + } + public Npc getLastSpawn() { if (!_spawnedNpcs.isEmpty()) diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index 35584acd3d..90cb059e11 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -54,6 +54,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized private final int _count; private final Duration _respawnTime; private final Duration _respawnTimeRandom; + private final int _chaseRange; private List _locations; private SpawnTerritory _zone; private StatSet _parameters; @@ -73,6 +74,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = template._count; _respawnTime = template._respawnTime; _respawnTimeRandom = template._respawnTimeRandom; + _chaseRange = template._chaseRange; _spawnAnimation = template._spawnAnimation; _saveInDB = template._saveInDB; _dbName = template._dbName; @@ -90,6 +92,7 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized _count = set.getInt("count", 1); _respawnTime = set.getDuration("respawnTime", null); _respawnTimeRandom = set.getDuration("respawnRandom", null); + _chaseRange = set.getInt("chaseRange", 0); _spawnAnimation = set.getBoolean("spawnAnimation", false); _saveInDB = set.getBoolean("dbSave", false); _dbName = set.getString("dbName", null); @@ -195,6 +198,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return _respawnTimeRandom; } + public int getChaseRange() + { + return _chaseRange; + } + public List getLocation() { return _locations;