From 30bb3a55b5854040a1439f371a0e5deab734949f Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Wed, 18 Apr 2018 18:16:14 +0000 Subject: [PATCH] Monsters teleport back to spawn. --- .../scripts/ai/areas/Wastelands/Wastelands.java | 4 ---- .../scripts/ai/bosses/Lindvior/Lindvior.java | 1 - .../ChamberOfProphecies/ChamberOfProphecies.java | 1 - .../instances/NornilsGarden/NornilsGarden.java | 1 - .../l2jmobius/gameserver/ai/L2AttackableAI.java | 16 +++++++++++++--- .../gameserver/model/actor/L2Attackable.java | 11 ----------- .../scripts/ai/areas/Wastelands/Wastelands.java | 4 ---- .../scripts/ai/bosses/Lindvior/Lindvior.java | 1 - .../ChamberOfProphecies/ChamberOfProphecies.java | 1 - .../instances/NornilsGarden/NornilsGarden.java | 1 - .../l2jmobius/gameserver/ai/L2AttackableAI.java | 16 +++++++++++++--- .../gameserver/model/actor/L2Attackable.java | 11 ----------- .../scripts/ai/areas/Wastelands/Wastelands.java | 4 ---- .../scripts/ai/bosses/Lindvior/Lindvior.java | 1 - .../ChamberOfProphecies/ChamberOfProphecies.java | 1 - .../instances/NornilsGarden/NornilsGarden.java | 1 - .../l2jmobius/gameserver/ai/L2AttackableAI.java | 16 +++++++++++++--- .../gameserver/model/actor/L2Attackable.java | 11 ----------- .../scripts/ai/areas/Wastelands/Wastelands.java | 4 ---- .../scripts/ai/bosses/Lindvior/Lindvior.java | 1 - .../ChamberOfProphecies/ChamberOfProphecies.java | 1 - .../instances/NornilsGarden/NornilsGarden.java | 1 - .../l2jmobius/gameserver/ai/L2AttackableAI.java | 16 +++++++++++++--- .../gameserver/model/actor/L2Attackable.java | 11 ----------- .../l2jmobius/gameserver/ai/L2AttackableAI.java | 14 ++++++++++++-- .../l2jmobius/gameserver/ai/L2AttackableAI.java | 16 +++++++++++++--- .../gameserver/model/actor/L2Attackable.java | 11 ----------- .../l2jmobius/gameserver/ai/L2AttackableAI.java | 16 +++++++++++++--- .../gameserver/model/actor/L2Attackable.java | 11 ----------- 29 files changed, 90 insertions(+), 114 deletions(-) diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/areas/Wastelands/Wastelands.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/areas/Wastelands/Wastelands.java index b7825c0f21..89bbfca215 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/areas/Wastelands/Wastelands.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/areas/Wastelands/Wastelands.java @@ -140,7 +140,6 @@ public final class Wastelands extends AbstractNpcAI { guard.reduceCurrentHp(1, monster, null); // TODO: Find better way for attack monster.reduceCurrentHp(1, guard, null); - guard.setCanStopAttackByTime(false); if ((guard.getId() != COMMANDO) && (guard.getId() != COMMANDO_CAPTAIN)) { @@ -161,7 +160,6 @@ public final class Wastelands extends AbstractNpcAI { decoGuard.reduceCurrentHp(1, monster, null); // TODO: Find better way for attack monster.reduceCurrentHp(1, decoGuard, null); - decoGuard.setCanStopAttackByTime(false); decoGuard.setIsInvul(true); } } @@ -303,7 +301,6 @@ public final class Wastelands extends AbstractNpcAI commander.reduceCurrentHp(1, sakum, null); // TODO: Find better way for attack sakum.reduceCurrentHp(1, commander, null); - commander.setCanStopAttackByTime(false); notifyEvent("START_ATTACK", commander, null); } @@ -319,7 +316,6 @@ public final class Wastelands extends AbstractNpcAI commander.reduceCurrentHp(1, sakum, null); // TODO: Find better way for attack sakum.reduceCurrentHp(1, commander, null); - commander.setCanStopAttackByTime(false); notifyEvent("START_ATTACK", commander, null); } diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java index ef75b87d78..4e0aa0800f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java @@ -521,7 +521,6 @@ public class Lindvior extends AbstractNpcAI } case LYN_DRACO_ATTACKER_GENERATORS: { - ((L2Attackable) npc).setCanStopAttackByTime(false); ((L2Attackable) npc).setCanReturnToSpawnPoint(false); startQuestTimer("attack_generator", 10000, npc, null, true); break; diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/instances/ChamberOfProphecies/ChamberOfProphecies.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/instances/ChamberOfProphecies/ChamberOfProphecies.java index c0c1bba266..52994fb214 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/instances/ChamberOfProphecies/ChamberOfProphecies.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/instances/ChamberOfProphecies/ChamberOfProphecies.java @@ -228,7 +228,6 @@ public final class ChamberOfProphecies extends AbstractInstance { npc.setRunning(); ((L2Attackable) npc).setCanReturnToSpawnPoint(false); - ((L2Attackable) npc).setCanStopAttackByTime(false); if (npc.isScriptValue(0) && world.getAliveNpcs(L2MonsterInstance.class).isEmpty()) { npc.setTarget(player); diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java index 7edec48c25..fc2be4cd7a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java @@ -300,7 +300,6 @@ public class NornilsGarden extends AbstractInstance final Instance world = npc.getInstanceWorld(); if (isInInstance(world) && (CommonUtil.contains(ATTACABLE_MONSTERS, npc.getId()))) { - ((L2Attackable) npc).setCanStopAttackByTime(false); ((L2Attackable) npc).setCanReturnToSpawnPoint(false); startQuestTimer("check_agrro", 1000, npc, null, true); } diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java index e39af75c7a..ed49686a8b 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java @@ -505,7 +505,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable } // Chance to forget attackers after some time - if ((npc.getCurrentHp() == npc.getMaxHp()) && (npc.getCurrentMp() == npc.getMaxMp()) && !npc.getAttackByList().isEmpty() && (Rnd.nextInt(500) == 0) && npc.canStopAttackByTime()) + if ((npc.getCurrentHp() == npc.getMaxHp()) && (npc.getCurrentMp() == npc.getMaxMp()) && !npc.getAttackByList().isEmpty() && (Rnd.nextInt(500) == 0)) { npc.clearAggroList(); npc.getAttackByList().clear(); @@ -661,11 +661,15 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable } // Check if target is dead or if timeout is expired to stop this attack - if ((target == null) || target.isAlikeDead() || ((_attackTimeout < GameTimeController.getInstance().getGameTicks()) && npc.canStopAttackByTime())) + if ((target == null) || target.isAlikeDead()) { // Stop hating this target after the attack timeout or if target is dead npc.stopHating(target); - + return; + } + + if (_attackTimeout < GameTimeController.getInstance().getGameTicks()) + { // Set the AI Intention to AI_INTENTION_ACTIVE setIntention(AI_INTENTION_ACTIVE); @@ -673,6 +677,12 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable { npc.setWalking(); } + + // Monster teleport to spawn + if (npc.isMonster() && (npc.getSpawn() != null)) + { + npc.teleToLocation(npc.getSpawn(), false); + } return; } diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java index ae8fe0638a..242d15899d 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java @@ -94,7 +94,6 @@ public class L2Attackable extends L2Npc private boolean _isReturningToSpawnPoint = false; private boolean _canReturnToSpawnPoint = true; private boolean _seeThroughSilentMove = false; - private boolean _canStopAttackByTime = true; // Manor private boolean _seeded = false; private L2Seed _seed = null; @@ -186,16 +185,6 @@ public class L2Attackable extends L2Npc _seeThroughSilentMove = val; } - public boolean canStopAttackByTime() - { - return _canStopAttackByTime; - } - - public void setCanStopAttackByTime(boolean val) - { - _canStopAttackByTime = val; - } - /** * Use the skill if minimum checks are pass. * @param skill the skill diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/areas/Wastelands/Wastelands.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/areas/Wastelands/Wastelands.java index b7825c0f21..89bbfca215 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/areas/Wastelands/Wastelands.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/areas/Wastelands/Wastelands.java @@ -140,7 +140,6 @@ public final class Wastelands extends AbstractNpcAI { guard.reduceCurrentHp(1, monster, null); // TODO: Find better way for attack monster.reduceCurrentHp(1, guard, null); - guard.setCanStopAttackByTime(false); if ((guard.getId() != COMMANDO) && (guard.getId() != COMMANDO_CAPTAIN)) { @@ -161,7 +160,6 @@ public final class Wastelands extends AbstractNpcAI { decoGuard.reduceCurrentHp(1, monster, null); // TODO: Find better way for attack monster.reduceCurrentHp(1, decoGuard, null); - decoGuard.setCanStopAttackByTime(false); decoGuard.setIsInvul(true); } } @@ -303,7 +301,6 @@ public final class Wastelands extends AbstractNpcAI commander.reduceCurrentHp(1, sakum, null); // TODO: Find better way for attack sakum.reduceCurrentHp(1, commander, null); - commander.setCanStopAttackByTime(false); notifyEvent("START_ATTACK", commander, null); } @@ -319,7 +316,6 @@ public final class Wastelands extends AbstractNpcAI commander.reduceCurrentHp(1, sakum, null); // TODO: Find better way for attack sakum.reduceCurrentHp(1, commander, null); - commander.setCanStopAttackByTime(false); notifyEvent("START_ATTACK", commander, null); } diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java index ef75b87d78..4e0aa0800f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java @@ -521,7 +521,6 @@ public class Lindvior extends AbstractNpcAI } case LYN_DRACO_ATTACKER_GENERATORS: { - ((L2Attackable) npc).setCanStopAttackByTime(false); ((L2Attackable) npc).setCanReturnToSpawnPoint(false); startQuestTimer("attack_generator", 10000, npc, null, true); break; diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/instances/ChamberOfProphecies/ChamberOfProphecies.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/instances/ChamberOfProphecies/ChamberOfProphecies.java index c0c1bba266..52994fb214 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/instances/ChamberOfProphecies/ChamberOfProphecies.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/instances/ChamberOfProphecies/ChamberOfProphecies.java @@ -228,7 +228,6 @@ public final class ChamberOfProphecies extends AbstractInstance { npc.setRunning(); ((L2Attackable) npc).setCanReturnToSpawnPoint(false); - ((L2Attackable) npc).setCanStopAttackByTime(false); if (npc.isScriptValue(0) && world.getAliveNpcs(L2MonsterInstance.class).isEmpty()) { npc.setTarget(player); diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java index 7edec48c25..fc2be4cd7a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java @@ -300,7 +300,6 @@ public class NornilsGarden extends AbstractInstance final Instance world = npc.getInstanceWorld(); if (isInInstance(world) && (CommonUtil.contains(ATTACABLE_MONSTERS, npc.getId()))) { - ((L2Attackable) npc).setCanStopAttackByTime(false); ((L2Attackable) npc).setCanReturnToSpawnPoint(false); startQuestTimer("check_agrro", 1000, npc, null, true); } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java index e39af75c7a..ed49686a8b 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java @@ -505,7 +505,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable } // Chance to forget attackers after some time - if ((npc.getCurrentHp() == npc.getMaxHp()) && (npc.getCurrentMp() == npc.getMaxMp()) && !npc.getAttackByList().isEmpty() && (Rnd.nextInt(500) == 0) && npc.canStopAttackByTime()) + if ((npc.getCurrentHp() == npc.getMaxHp()) && (npc.getCurrentMp() == npc.getMaxMp()) && !npc.getAttackByList().isEmpty() && (Rnd.nextInt(500) == 0)) { npc.clearAggroList(); npc.getAttackByList().clear(); @@ -661,11 +661,15 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable } // Check if target is dead or if timeout is expired to stop this attack - if ((target == null) || target.isAlikeDead() || ((_attackTimeout < GameTimeController.getInstance().getGameTicks()) && npc.canStopAttackByTime())) + if ((target == null) || target.isAlikeDead()) { // Stop hating this target after the attack timeout or if target is dead npc.stopHating(target); - + return; + } + + if (_attackTimeout < GameTimeController.getInstance().getGameTicks()) + { // Set the AI Intention to AI_INTENTION_ACTIVE setIntention(AI_INTENTION_ACTIVE); @@ -673,6 +677,12 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable { npc.setWalking(); } + + // Monster teleport to spawn + if (npc.isMonster() && (npc.getSpawn() != null)) + { + npc.teleToLocation(npc.getSpawn(), false); + } return; } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java index 135bf7e68b..6011451050 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java @@ -93,7 +93,6 @@ public class L2Attackable extends L2Npc private boolean _isReturningToSpawnPoint = false; private boolean _canReturnToSpawnPoint = true; private boolean _seeThroughSilentMove = false; - private boolean _canStopAttackByTime = true; // Manor private boolean _seeded = false; private L2Seed _seed = null; @@ -182,16 +181,6 @@ public class L2Attackable extends L2Npc _seeThroughSilentMove = val; } - public boolean canStopAttackByTime() - { - return _canStopAttackByTime; - } - - public void setCanStopAttackByTime(boolean val) - { - _canStopAttackByTime = val; - } - /** * Use the skill if minimum checks are pass. * @param skill the skill diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/areas/Wastelands/Wastelands.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/areas/Wastelands/Wastelands.java index b7825c0f21..89bbfca215 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/areas/Wastelands/Wastelands.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/areas/Wastelands/Wastelands.java @@ -140,7 +140,6 @@ public final class Wastelands extends AbstractNpcAI { guard.reduceCurrentHp(1, monster, null); // TODO: Find better way for attack monster.reduceCurrentHp(1, guard, null); - guard.setCanStopAttackByTime(false); if ((guard.getId() != COMMANDO) && (guard.getId() != COMMANDO_CAPTAIN)) { @@ -161,7 +160,6 @@ public final class Wastelands extends AbstractNpcAI { decoGuard.reduceCurrentHp(1, monster, null); // TODO: Find better way for attack monster.reduceCurrentHp(1, decoGuard, null); - decoGuard.setCanStopAttackByTime(false); decoGuard.setIsInvul(true); } } @@ -303,7 +301,6 @@ public final class Wastelands extends AbstractNpcAI commander.reduceCurrentHp(1, sakum, null); // TODO: Find better way for attack sakum.reduceCurrentHp(1, commander, null); - commander.setCanStopAttackByTime(false); notifyEvent("START_ATTACK", commander, null); } @@ -319,7 +316,6 @@ public final class Wastelands extends AbstractNpcAI commander.reduceCurrentHp(1, sakum, null); // TODO: Find better way for attack sakum.reduceCurrentHp(1, commander, null); - commander.setCanStopAttackByTime(false); notifyEvent("START_ATTACK", commander, null); } diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java index ef75b87d78..4e0aa0800f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java @@ -521,7 +521,6 @@ public class Lindvior extends AbstractNpcAI } case LYN_DRACO_ATTACKER_GENERATORS: { - ((L2Attackable) npc).setCanStopAttackByTime(false); ((L2Attackable) npc).setCanReturnToSpawnPoint(false); startQuestTimer("attack_generator", 10000, npc, null, true); break; diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/instances/ChamberOfProphecies/ChamberOfProphecies.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/instances/ChamberOfProphecies/ChamberOfProphecies.java index c0c1bba266..52994fb214 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/instances/ChamberOfProphecies/ChamberOfProphecies.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/instances/ChamberOfProphecies/ChamberOfProphecies.java @@ -228,7 +228,6 @@ public final class ChamberOfProphecies extends AbstractInstance { npc.setRunning(); ((L2Attackable) npc).setCanReturnToSpawnPoint(false); - ((L2Attackable) npc).setCanStopAttackByTime(false); if (npc.isScriptValue(0) && world.getAliveNpcs(L2MonsterInstance.class).isEmpty()) { npc.setTarget(player); diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java index 7edec48c25..fc2be4cd7a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java @@ -300,7 +300,6 @@ public class NornilsGarden extends AbstractInstance final Instance world = npc.getInstanceWorld(); if (isInInstance(world) && (CommonUtil.contains(ATTACABLE_MONSTERS, npc.getId()))) { - ((L2Attackable) npc).setCanStopAttackByTime(false); ((L2Attackable) npc).setCanReturnToSpawnPoint(false); startQuestTimer("check_agrro", 1000, npc, null, true); } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java index e39af75c7a..ed49686a8b 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java @@ -505,7 +505,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable } // Chance to forget attackers after some time - if ((npc.getCurrentHp() == npc.getMaxHp()) && (npc.getCurrentMp() == npc.getMaxMp()) && !npc.getAttackByList().isEmpty() && (Rnd.nextInt(500) == 0) && npc.canStopAttackByTime()) + if ((npc.getCurrentHp() == npc.getMaxHp()) && (npc.getCurrentMp() == npc.getMaxMp()) && !npc.getAttackByList().isEmpty() && (Rnd.nextInt(500) == 0)) { npc.clearAggroList(); npc.getAttackByList().clear(); @@ -661,11 +661,15 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable } // Check if target is dead or if timeout is expired to stop this attack - if ((target == null) || target.isAlikeDead() || ((_attackTimeout < GameTimeController.getInstance().getGameTicks()) && npc.canStopAttackByTime())) + if ((target == null) || target.isAlikeDead()) { // Stop hating this target after the attack timeout or if target is dead npc.stopHating(target); - + return; + } + + if (_attackTimeout < GameTimeController.getInstance().getGameTicks()) + { // Set the AI Intention to AI_INTENTION_ACTIVE setIntention(AI_INTENTION_ACTIVE); @@ -673,6 +677,12 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable { npc.setWalking(); } + + // Monster teleport to spawn + if (npc.isMonster() && (npc.getSpawn() != null)) + { + npc.teleToLocation(npc.getSpawn(), false); + } return; } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java index 135bf7e68b..6011451050 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java @@ -93,7 +93,6 @@ public class L2Attackable extends L2Npc private boolean _isReturningToSpawnPoint = false; private boolean _canReturnToSpawnPoint = true; private boolean _seeThroughSilentMove = false; - private boolean _canStopAttackByTime = true; // Manor private boolean _seeded = false; private L2Seed _seed = null; @@ -182,16 +181,6 @@ public class L2Attackable extends L2Npc _seeThroughSilentMove = val; } - public boolean canStopAttackByTime() - { - return _canStopAttackByTime; - } - - public void setCanStopAttackByTime(boolean val) - { - _canStopAttackByTime = val; - } - /** * Use the skill if minimum checks are pass. * @param skill the skill diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/ai/areas/Wastelands/Wastelands.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/ai/areas/Wastelands/Wastelands.java index b7825c0f21..89bbfca215 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/ai/areas/Wastelands/Wastelands.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/ai/areas/Wastelands/Wastelands.java @@ -140,7 +140,6 @@ public final class Wastelands extends AbstractNpcAI { guard.reduceCurrentHp(1, monster, null); // TODO: Find better way for attack monster.reduceCurrentHp(1, guard, null); - guard.setCanStopAttackByTime(false); if ((guard.getId() != COMMANDO) && (guard.getId() != COMMANDO_CAPTAIN)) { @@ -161,7 +160,6 @@ public final class Wastelands extends AbstractNpcAI { decoGuard.reduceCurrentHp(1, monster, null); // TODO: Find better way for attack monster.reduceCurrentHp(1, decoGuard, null); - decoGuard.setCanStopAttackByTime(false); decoGuard.setIsInvul(true); } } @@ -303,7 +301,6 @@ public final class Wastelands extends AbstractNpcAI commander.reduceCurrentHp(1, sakum, null); // TODO: Find better way for attack sakum.reduceCurrentHp(1, commander, null); - commander.setCanStopAttackByTime(false); notifyEvent("START_ATTACK", commander, null); } @@ -319,7 +316,6 @@ public final class Wastelands extends AbstractNpcAI commander.reduceCurrentHp(1, sakum, null); // TODO: Find better way for attack sakum.reduceCurrentHp(1, commander, null); - commander.setCanStopAttackByTime(false); notifyEvent("START_ATTACK", commander, null); } diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java index ef75b87d78..4e0aa0800f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java @@ -521,7 +521,6 @@ public class Lindvior extends AbstractNpcAI } case LYN_DRACO_ATTACKER_GENERATORS: { - ((L2Attackable) npc).setCanStopAttackByTime(false); ((L2Attackable) npc).setCanReturnToSpawnPoint(false); startQuestTimer("attack_generator", 10000, npc, null, true); break; diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/instances/ChamberOfProphecies/ChamberOfProphecies.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/instances/ChamberOfProphecies/ChamberOfProphecies.java index c0c1bba266..52994fb214 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/instances/ChamberOfProphecies/ChamberOfProphecies.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/instances/ChamberOfProphecies/ChamberOfProphecies.java @@ -228,7 +228,6 @@ public final class ChamberOfProphecies extends AbstractInstance { npc.setRunning(); ((L2Attackable) npc).setCanReturnToSpawnPoint(false); - ((L2Attackable) npc).setCanStopAttackByTime(false); if (npc.isScriptValue(0) && world.getAliveNpcs(L2MonsterInstance.class).isEmpty()) { npc.setTarget(player); diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java index 7edec48c25..fc2be4cd7a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/instances/NornilsGarden/NornilsGarden.java @@ -300,7 +300,6 @@ public class NornilsGarden extends AbstractInstance final Instance world = npc.getInstanceWorld(); if (isInInstance(world) && (CommonUtil.contains(ATTACABLE_MONSTERS, npc.getId()))) { - ((L2Attackable) npc).setCanStopAttackByTime(false); ((L2Attackable) npc).setCanReturnToSpawnPoint(false); startQuestTimer("check_agrro", 1000, npc, null, true); } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java index e39af75c7a..ed49686a8b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java @@ -505,7 +505,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable } // Chance to forget attackers after some time - if ((npc.getCurrentHp() == npc.getMaxHp()) && (npc.getCurrentMp() == npc.getMaxMp()) && !npc.getAttackByList().isEmpty() && (Rnd.nextInt(500) == 0) && npc.canStopAttackByTime()) + if ((npc.getCurrentHp() == npc.getMaxHp()) && (npc.getCurrentMp() == npc.getMaxMp()) && !npc.getAttackByList().isEmpty() && (Rnd.nextInt(500) == 0)) { npc.clearAggroList(); npc.getAttackByList().clear(); @@ -661,11 +661,15 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable } // Check if target is dead or if timeout is expired to stop this attack - if ((target == null) || target.isAlikeDead() || ((_attackTimeout < GameTimeController.getInstance().getGameTicks()) && npc.canStopAttackByTime())) + if ((target == null) || target.isAlikeDead()) { // Stop hating this target after the attack timeout or if target is dead npc.stopHating(target); - + return; + } + + if (_attackTimeout < GameTimeController.getInstance().getGameTicks()) + { // Set the AI Intention to AI_INTENTION_ACTIVE setIntention(AI_INTENTION_ACTIVE); @@ -673,6 +677,12 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable { npc.setWalking(); } + + // Monster teleport to spawn + if (npc.isMonster() && (npc.getSpawn() != null)) + { + npc.teleToLocation(npc.getSpawn(), false); + } return; } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java index 135bf7e68b..6011451050 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java @@ -93,7 +93,6 @@ public class L2Attackable extends L2Npc private boolean _isReturningToSpawnPoint = false; private boolean _canReturnToSpawnPoint = true; private boolean _seeThroughSilentMove = false; - private boolean _canStopAttackByTime = true; // Manor private boolean _seeded = false; private L2Seed _seed = null; @@ -182,16 +181,6 @@ public class L2Attackable extends L2Npc _seeThroughSilentMove = val; } - public boolean canStopAttackByTime() - { - return _canStopAttackByTime; - } - - public void setCanStopAttackByTime(boolean val) - { - _canStopAttackByTime = val; - } - /** * Use the skill if minimum checks are pass. * @param skill the skill diff --git a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java index 265ff75ece..ddfd241fc8 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java @@ -827,11 +827,15 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable // Check if target is dead or if timeout is expired to stop this attack final L2Character originalAttackTarget = getAttackTarget(); - if ((originalAttackTarget == null) || originalAttackTarget.isAlikeDead() || (_attackTimeout < GameTimeController.getInstance().getGameTicks())) + if ((originalAttackTarget == null) || originalAttackTarget.isAlikeDead()) { // Stop hating this target after the attack timeout or if target is dead npc.stopHating(originalAttackTarget); - + return; + } + + if (_attackTimeout < GameTimeController.getInstance().getGameTicks()) + { // Set the AI Intention to AI_INTENTION_ACTIVE setIntention(AI_INTENTION_ACTIVE); @@ -839,6 +843,12 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable { npc.setWalking(); } + + // Monster teleport to spawn + if (npc.isMonster() && (npc.getSpawn() != null)) + { + npc.teleToLocation(npc.getSpawn(), false); + } return; } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java index e39af75c7a..ed49686a8b 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java @@ -505,7 +505,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable } // Chance to forget attackers after some time - if ((npc.getCurrentHp() == npc.getMaxHp()) && (npc.getCurrentMp() == npc.getMaxMp()) && !npc.getAttackByList().isEmpty() && (Rnd.nextInt(500) == 0) && npc.canStopAttackByTime()) + if ((npc.getCurrentHp() == npc.getMaxHp()) && (npc.getCurrentMp() == npc.getMaxMp()) && !npc.getAttackByList().isEmpty() && (Rnd.nextInt(500) == 0)) { npc.clearAggroList(); npc.getAttackByList().clear(); @@ -661,11 +661,15 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable } // Check if target is dead or if timeout is expired to stop this attack - if ((target == null) || target.isAlikeDead() || ((_attackTimeout < GameTimeController.getInstance().getGameTicks()) && npc.canStopAttackByTime())) + if ((target == null) || target.isAlikeDead()) { // Stop hating this target after the attack timeout or if target is dead npc.stopHating(target); - + return; + } + + if (_attackTimeout < GameTimeController.getInstance().getGameTicks()) + { // Set the AI Intention to AI_INTENTION_ACTIVE setIntention(AI_INTENTION_ACTIVE); @@ -673,6 +677,12 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable { npc.setWalking(); } + + // Monster teleport to spawn + if (npc.isMonster() && (npc.getSpawn() != null)) + { + npc.teleToLocation(npc.getSpawn(), false); + } return; } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java index d3a78309c6..7177ba1a8b 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java @@ -93,7 +93,6 @@ public class L2Attackable extends L2Npc private boolean _isReturningToSpawnPoint = false; private boolean _canReturnToSpawnPoint = true; private boolean _seeThroughSilentMove = false; - private boolean _canStopAttackByTime = true; // Manor private boolean _seeded = false; private L2Seed _seed = null; @@ -182,16 +181,6 @@ public class L2Attackable extends L2Npc _seeThroughSilentMove = val; } - public boolean canStopAttackByTime() - { - return _canStopAttackByTime; - } - - public void setCanStopAttackByTime(boolean val) - { - _canStopAttackByTime = val; - } - /** * Use the skill if minimum checks are pass. * @param skill the skill diff --git a/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java b/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java index e39af75c7a..ed49686a8b 100644 --- a/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java +++ b/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/gameserver/ai/L2AttackableAI.java @@ -505,7 +505,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable } // Chance to forget attackers after some time - if ((npc.getCurrentHp() == npc.getMaxHp()) && (npc.getCurrentMp() == npc.getMaxMp()) && !npc.getAttackByList().isEmpty() && (Rnd.nextInt(500) == 0) && npc.canStopAttackByTime()) + if ((npc.getCurrentHp() == npc.getMaxHp()) && (npc.getCurrentMp() == npc.getMaxMp()) && !npc.getAttackByList().isEmpty() && (Rnd.nextInt(500) == 0)) { npc.clearAggroList(); npc.getAttackByList().clear(); @@ -661,11 +661,15 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable } // Check if target is dead or if timeout is expired to stop this attack - if ((target == null) || target.isAlikeDead() || ((_attackTimeout < GameTimeController.getInstance().getGameTicks()) && npc.canStopAttackByTime())) + if ((target == null) || target.isAlikeDead()) { // Stop hating this target after the attack timeout or if target is dead npc.stopHating(target); - + return; + } + + if (_attackTimeout < GameTimeController.getInstance().getGameTicks()) + { // Set the AI Intention to AI_INTENTION_ACTIVE setIntention(AI_INTENTION_ACTIVE); @@ -673,6 +677,12 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable { npc.setWalking(); } + + // Monster teleport to spawn + if (npc.isMonster() && (npc.getSpawn() != null)) + { + npc.teleToLocation(npc.getSpawn(), false); + } return; } diff --git a/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java b/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java index d3a78309c6..7177ba1a8b 100644 --- a/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java +++ b/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/gameserver/model/actor/L2Attackable.java @@ -93,7 +93,6 @@ public class L2Attackable extends L2Npc private boolean _isReturningToSpawnPoint = false; private boolean _canReturnToSpawnPoint = true; private boolean _seeThroughSilentMove = false; - private boolean _canStopAttackByTime = true; // Manor private boolean _seeded = false; private L2Seed _seed = null; @@ -182,16 +181,6 @@ public class L2Attackable extends L2Npc _seeThroughSilentMove = val; } - public boolean canStopAttackByTime() - { - return _canStopAttackByTime; - } - - public void setCanStopAttackByTime(boolean val) - { - _canStopAttackByTime = val; - } - /** * Use the skill if minimum checks are pass. * @param skill the skill