Addition of ranged attack enable task.

This commit is contained in:
MobiusDevelopment 2020-06-02 21:22:08 +00:00
parent 109862e5b4
commit 4eeac28627
15 changed files with 255 additions and 30 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;