From 0eebada4bd73cf1af88490ce5795143c35ffae83 Mon Sep 17 00:00:00 2001
From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com>
Date: Sun, 7 Aug 2022 21:05:53 +0000
Subject: [PATCH] Implemented Spawn chaseRange parameter.
---
.../dist/game/config/NPC.ini | 2 ++
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 2 ++
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 2 ++
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 2 ++
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 2 ++
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 2 ++
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 2 ++
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 2 ++
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 2 ++
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 2 ++
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 2 ++
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 2 ++
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/General.ini | 8 ++++----
.../dist/game/config/General.ini | 8 ++++----
.../dist/game/config/NPC.ini | 10 ++++++----
.../dist/game/data/xsd/spawns.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../l2jmobius/gameserver/data/SpawnTable.java | 6 ++++++
.../org/l2jmobius/gameserver/model/Spawn.java | 12 ++++++++++++
.../dist/game/config/NPC.ini | 10 ++++++----
.../dist/game/data/xsd/spawns.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../l2jmobius/gameserver/data/SpawnTable.java | 6 ++++++
.../org/l2jmobius/gameserver/model/Spawn.java | 12 ++++++++++++
.../dist/game/config/NPC.ini | 10 ++++++----
.../dist/game/data/xsd/spawns.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../l2jmobius/gameserver/data/SpawnTable.java | 6 ++++++
.../org/l2jmobius/gameserver/model/Spawn.java | 12 ++++++++++++
.../dist/game/config/NPC.ini | 10 ++++++----
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 10 ++++++----
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 10 ++++++----
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 10 ++++++----
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 10 ++++++----
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 10 ++++++----
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 10 ++++++----
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 10 ++++++----
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 10 ++++++----
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 18 ++++++++++--------
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 18 ++++++++++--------
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 18 ++++++++++--------
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
.../dist/game/config/NPC.ini | 18 ++++++++++--------
.../dist/game/data/xsd/shared.xsd | 1 +
.../l2jmobius/gameserver/ai/AttackableAI.java | 2 +-
.../org/l2jmobius/gameserver/model/Spawn.java | 5 +++++
.../model/spawns/NpcSpawnTemplate.java | 8 ++++++++
142 files changed, 579 insertions(+), 116 deletions(-)
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 extends Npc> _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 extends Npc> _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 extends Npc> _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;