From 4eeac286275b6e00e035694a29197fb106dcc410 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Tue, 2 Jun 2020 21:22:08 +0000 Subject: [PATCH] Addition of ranged attack enable task. --- .../gameserver/model/actor/Creature.java | 19 +++++++++++++++++-- .../gameserver/model/actor/Creature.java | 19 +++++++++++++++++-- .../gameserver/model/actor/Creature.java | 19 +++++++++++++++++-- .../gameserver/model/actor/Creature.java | 19 +++++++++++++++++-- .../gameserver/model/actor/Creature.java | 19 +++++++++++++++++-- .../gameserver/model/actor/Creature.java | 19 +++++++++++++++++-- .../gameserver/model/actor/Creature.java | 19 +++++++++++++++++-- .../gameserver/model/actor/Creature.java | 19 +++++++++++++++++-- .../gameserver/model/actor/Creature.java | 19 +++++++++++++++++-- .../gameserver/model/actor/Creature.java | 19 +++++++++++++++++-- .../gameserver/model/actor/Creature.java | 19 +++++++++++++++++-- .../gameserver/model/actor/Creature.java | 19 +++++++++++++++++-- .../gameserver/model/actor/Creature.java | 19 +++++++++++++++++-- .../gameserver/model/actor/Creature.java | 19 +++++++++++++++++-- .../gameserver/model/actor/Creature.java | 19 +++++++++++++++++-- 15 files changed, 255 insertions(+), 30 deletions(-) diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java index df10e795df..1743d569d5 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -258,6 +258,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // set by the start of attack, in game ticks private volatile long _attackEndTime; private volatile long _disableRangedAttackEndTime; + private volatile ScheduledFuture _enableRangedAttackTask; private CreatureAI _ai = null; @@ -1015,7 +1016,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { if (isPlayer()) { - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 300); + } sendPacket(ActionFailed.STATIC_PACKET); } return; @@ -1054,7 +1062,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (_status.getCurrentMp() < mpConsume) { // If PlayerInstance doesn't have enough MP, stop the attack - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 1000); + } sendPacket(SystemMessageId.NOT_ENOUGH_MP); sendPacket(ActionFailed.STATIC_PACKET); return; diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java index df10e795df..1743d569d5 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -258,6 +258,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // set by the start of attack, in game ticks private volatile long _attackEndTime; private volatile long _disableRangedAttackEndTime; + private volatile ScheduledFuture _enableRangedAttackTask; private CreatureAI _ai = null; @@ -1015,7 +1016,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { if (isPlayer()) { - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 300); + } sendPacket(ActionFailed.STATIC_PACKET); } return; @@ -1054,7 +1062,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (_status.getCurrentMp() < mpConsume) { // If PlayerInstance doesn't have enough MP, stop the attack - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 1000); + } sendPacket(SystemMessageId.NOT_ENOUGH_MP); sendPacket(ActionFailed.STATIC_PACKET); return; diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java index bccd0ee26a..38758d4142 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -258,6 +258,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // set by the start of attack, in game ticks private volatile long _attackEndTime; private volatile long _disableRangedAttackEndTime; + private volatile ScheduledFuture _enableRangedAttackTask; private CreatureAI _ai = null; @@ -1015,7 +1016,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { if (isPlayer()) { - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 300); + } sendPacket(ActionFailed.STATIC_PACKET); } return; @@ -1054,7 +1062,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (_status.getCurrentMp() < mpConsume) { // If PlayerInstance doesn't have enough MP, stop the attack - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 1000); + } sendPacket(SystemMessageId.NOT_ENOUGH_MP); sendPacket(ActionFailed.STATIC_PACKET); return; diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java index bccd0ee26a..38758d4142 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -258,6 +258,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // set by the start of attack, in game ticks private volatile long _attackEndTime; private volatile long _disableRangedAttackEndTime; + private volatile ScheduledFuture _enableRangedAttackTask; private CreatureAI _ai = null; @@ -1015,7 +1016,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { if (isPlayer()) { - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 300); + } sendPacket(ActionFailed.STATIC_PACKET); } return; @@ -1054,7 +1062,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (_status.getCurrentMp() < mpConsume) { // If PlayerInstance doesn't have enough MP, stop the attack - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 1000); + } sendPacket(SystemMessageId.NOT_ENOUGH_MP); sendPacket(ActionFailed.STATIC_PACKET); return; diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java index f3121ae90e..72df32dfc4 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -258,6 +258,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // set by the start of attack, in game ticks private volatile long _attackEndTime; private volatile long _disableRangedAttackEndTime; + private volatile ScheduledFuture _enableRangedAttackTask; private CreatureAI _ai = null; @@ -1015,7 +1016,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { if (isPlayer()) { - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 300); + } sendPacket(ActionFailed.STATIC_PACKET); } return; @@ -1054,7 +1062,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (_status.getCurrentMp() < mpConsume) { // If PlayerInstance doesn't have enough MP, stop the attack - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 1000); + } sendPacket(SystemMessageId.NOT_ENOUGH_MP); sendPacket(ActionFailed.STATIC_PACKET); return; diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java index f3121ae90e..72df32dfc4 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -258,6 +258,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // set by the start of attack, in game ticks private volatile long _attackEndTime; private volatile long _disableRangedAttackEndTime; + private volatile ScheduledFuture _enableRangedAttackTask; private CreatureAI _ai = null; @@ -1015,7 +1016,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { if (isPlayer()) { - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 300); + } sendPacket(ActionFailed.STATIC_PACKET); } return; @@ -1054,7 +1062,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (_status.getCurrentMp() < mpConsume) { // If PlayerInstance doesn't have enough MP, stop the attack - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 1000); + } sendPacket(SystemMessageId.NOT_ENOUGH_MP); sendPacket(ActionFailed.STATIC_PACKET); return; diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java index f3121ae90e..72df32dfc4 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -258,6 +258,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // set by the start of attack, in game ticks private volatile long _attackEndTime; private volatile long _disableRangedAttackEndTime; + private volatile ScheduledFuture _enableRangedAttackTask; private CreatureAI _ai = null; @@ -1015,7 +1016,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { if (isPlayer()) { - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 300); + } sendPacket(ActionFailed.STATIC_PACKET); } return; @@ -1054,7 +1062,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (_status.getCurrentMp() < mpConsume) { // If PlayerInstance doesn't have enough MP, stop the attack - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 1000); + } sendPacket(SystemMessageId.NOT_ENOUGH_MP); sendPacket(ActionFailed.STATIC_PACKET); return; diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java index 27eec3f571..09dbff373e 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -258,6 +258,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // set by the start of attack, in game ticks private volatile long _attackEndTime; private volatile long _disableRangedAttackEndTime; + private volatile ScheduledFuture _enableRangedAttackTask; private CreatureAI _ai = null; @@ -1015,7 +1016,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { if (isPlayer()) { - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 300); + } sendPacket(ActionFailed.STATIC_PACKET); } return; @@ -1054,7 +1062,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (_status.getCurrentMp() < mpConsume) { // If PlayerInstance doesn't have enough MP, stop the attack - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 1000); + } sendPacket(SystemMessageId.NOT_ENOUGH_MP); sendPacket(ActionFailed.STATIC_PACKET); return; diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java index df59cc0e16..f8c758576e 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -258,6 +258,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // set by the start of attack, in game ticks private volatile long _attackEndTime; private volatile long _disableRangedAttackEndTime; + private volatile ScheduledFuture _enableRangedAttackTask; private CreatureAI _ai = null; @@ -1015,7 +1016,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { if (isPlayer()) { - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 300); + } sendPacket(ActionFailed.STATIC_PACKET); } return; @@ -1054,7 +1062,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (_status.getCurrentMp() < mpConsume) { // If PlayerInstance doesn't have enough MP, stop the attack - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 1000); + } sendPacket(SystemMessageId.NOT_ENOUGH_MP); sendPacket(ActionFailed.STATIC_PACKET); return; diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java index df59cc0e16..f8c758576e 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -258,6 +258,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // set by the start of attack, in game ticks private volatile long _attackEndTime; private volatile long _disableRangedAttackEndTime; + private volatile ScheduledFuture _enableRangedAttackTask; private CreatureAI _ai = null; @@ -1015,7 +1016,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { if (isPlayer()) { - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 300); + } sendPacket(ActionFailed.STATIC_PACKET); } return; @@ -1054,7 +1062,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (_status.getCurrentMp() < mpConsume) { // If PlayerInstance doesn't have enough MP, stop the attack - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 1000); + } sendPacket(SystemMessageId.NOT_ENOUGH_MP); sendPacket(ActionFailed.STATIC_PACKET); return; diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java index 5864083392..c6a33a9ed9 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -258,6 +258,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // set by the start of attack, in game ticks private volatile long _attackEndTime; private volatile long _disableRangedAttackEndTime; + private volatile ScheduledFuture _enableRangedAttackTask; private CreatureAI _ai = null; @@ -1015,7 +1016,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { if (isPlayer()) { - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 300); + } sendPacket(ActionFailed.STATIC_PACKET); } return; @@ -1054,7 +1062,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (_status.getCurrentMp() < mpConsume) { // If PlayerInstance doesn't have enough MP, stop the attack - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 1000); + } sendPacket(SystemMessageId.NOT_ENOUGH_MP); sendPacket(ActionFailed.STATIC_PACKET); return; diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java index ead360ec88..7c0bea176d 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -259,6 +259,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // set by the start of attack, in game ticks private volatile long _attackEndTime; private volatile long _disableRangedAttackEndTime; + private volatile ScheduledFuture _enableRangedAttackTask; private CreatureAI _ai = null; @@ -1016,7 +1017,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { if (isPlayer()) { - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 300); + } sendPacket(ActionFailed.STATIC_PACKET); } return; @@ -1055,7 +1063,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (_status.getCurrentMp() < mpConsume) { // If PlayerInstance doesn't have enough MP, stop the attack - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 1000); + } sendPacket(SystemMessageId.NOT_ENOUGH_MP); sendPacket(ActionFailed.STATIC_PACKET); return; diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java index ead360ec88..7c0bea176d 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -259,6 +259,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // set by the start of attack, in game ticks private volatile long _attackEndTime; private volatile long _disableRangedAttackEndTime; + private volatile ScheduledFuture _enableRangedAttackTask; private CreatureAI _ai = null; @@ -1016,7 +1017,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { if (isPlayer()) { - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 300); + } sendPacket(ActionFailed.STATIC_PACKET); } return; @@ -1055,7 +1063,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (_status.getCurrentMp() < mpConsume) { // If PlayerInstance doesn't have enough MP, stop the attack - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 1000); + } sendPacket(SystemMessageId.NOT_ENOUGH_MP); sendPacket(ActionFailed.STATIC_PACKET); return; diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java index 73613c9cbc..1dc6b4507a 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -259,6 +259,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // set by the start of attack, in game ticks private volatile long _attackEndTime; private volatile long _disableRangedAttackEndTime; + private volatile ScheduledFuture _enableRangedAttackTask; private CreatureAI _ai = null; @@ -1016,7 +1017,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { if (isPlayer()) { - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 300); + } sendPacket(ActionFailed.STATIC_PACKET); } return; @@ -1055,7 +1063,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (_status.getCurrentMp() < mpConsume) { // If PlayerInstance doesn't have enough MP, stop the attack - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 1000); + } sendPacket(SystemMessageId.NOT_ENOUGH_MP); sendPacket(ActionFailed.STATIC_PACKET); return; diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java index df59cc0e16..f8c758576e 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -258,6 +258,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // set by the start of attack, in game ticks private volatile long _attackEndTime; private volatile long _disableRangedAttackEndTime; + private volatile ScheduledFuture _enableRangedAttackTask; private CreatureAI _ai = null; @@ -1015,7 +1016,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { if (isPlayer()) { - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 300); + } sendPacket(ActionFailed.STATIC_PACKET); } return; @@ -1054,7 +1062,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (_status.getCurrentMp() < mpConsume) { // If PlayerInstance doesn't have enough MP, stop the attack - ThreadPool.schedule(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), 1000); + if ((_enableRangedAttackTask == null) || _enableRangedAttackTask.isDone() || _enableRangedAttackTask.isCancelled()) + { + _enableRangedAttackTask = ThreadPool.schedule(() -> + { + new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT); + _enableRangedAttackTask = null; + }, 1000); + } sendPacket(SystemMessageId.NOT_ENOUGH_MP); sendPacket(ActionFailed.STATIC_PACKET); return;