|
@@ -20,6 +20,7 @@ package com.l2jserver.gameserver.model.actor.instance;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
+import java.util.concurrent.ScheduledFuture;
|
|
|
|
|
|
import com.l2jserver.gameserver.ThreadPoolManager;
|
|
import com.l2jserver.gameserver.ThreadPoolManager;
|
|
import com.l2jserver.gameserver.enums.InstanceType;
|
|
import com.l2jserver.gameserver.enums.InstanceType;
|
|
@@ -60,6 +61,8 @@ public final class L2TrapInstance extends L2Npc
|
|
private final List<Integer> _playersWhoDetectedMe = new ArrayList<>();
|
|
private final List<Integer> _playersWhoDetectedMe = new ArrayList<>();
|
|
private final SkillHolder _skill;
|
|
private final SkillHolder _skill;
|
|
private int _remainingTime;
|
|
private int _remainingTime;
|
|
|
|
+ // Tasks
|
|
|
|
+ private ScheduledFuture<?> _trapTask = null;
|
|
|
|
|
|
public L2TrapInstance(int objectId, L2NpcTemplate template, int instanceId, int lifeTime)
|
|
public L2TrapInstance(int objectId, L2NpcTemplate template, int instanceId, int lifeTime)
|
|
{
|
|
{
|
|
@@ -77,7 +80,7 @@ public final class L2TrapInstance extends L2Npc
|
|
_remainingTime = _lifeTime;
|
|
_remainingTime = _lifeTime;
|
|
if (_skill != null)
|
|
if (_skill != null)
|
|
{
|
|
{
|
|
- ThreadPoolManager.getInstance().scheduleGeneral(new TrapTask(this), TICK);
|
|
|
|
|
|
+ _trapTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new TrapTask(this), TICK, TICK);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -166,6 +169,11 @@ public final class L2TrapInstance extends L2Npc
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (!target.isInsideRadius(this, _skill.getSkill().getEffectRange(), false, false))
|
|
|
|
+ {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
// observers
|
|
// observers
|
|
if ((target instanceof L2PcInstance) && ((L2PcInstance) target).inObserverMode())
|
|
if ((target instanceof L2PcInstance) && ((L2PcInstance) target).inObserverMode())
|
|
{
|
|
{
|
|
@@ -382,6 +390,12 @@ public final class L2TrapInstance extends L2Npc
|
|
*/
|
|
*/
|
|
public void triggerTrap(L2Character target)
|
|
public void triggerTrap(L2Character target)
|
|
{
|
|
{
|
|
|
|
+ if (_trapTask != null)
|
|
|
|
+ {
|
|
|
|
+ _trapTask.cancel(true);
|
|
|
|
+ _trapTask = null;
|
|
|
|
+ }
|
|
|
|
+
|
|
_isTriggered = true;
|
|
_isTriggered = true;
|
|
broadcastPacket(new TrapInfo(this, null));
|
|
broadcastPacket(new TrapInfo(this, null));
|
|
setTarget(target);
|
|
setTarget(target);
|
|
@@ -399,6 +413,12 @@ public final class L2TrapInstance extends L2Npc
|
|
|
|
|
|
public void unSummon()
|
|
public void unSummon()
|
|
{
|
|
{
|
|
|
|
+ if (_trapTask != null)
|
|
|
|
+ {
|
|
|
|
+ _trapTask.cancel(true);
|
|
|
|
+ _trapTask = null;
|
|
|
|
+ }
|
|
|
|
+
|
|
if (_owner != null)
|
|
if (_owner != null)
|
|
{
|
|
{
|
|
_owner.setTrap(null);
|
|
_owner.setTrap(null);
|