Fixed infinite attack speed exploit.
Contributed by Iris.
This commit is contained in:
@@ -48,13 +48,6 @@ public class PetAttack implements IPlayerActionHandler
|
|||||||
}
|
}
|
||||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (pet.isAttackingNow())
|
|
||||||
{
|
|
||||||
pet.abortAttack();
|
|
||||||
pet.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.doAttack(player.getTarget());
|
pet.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,13 +37,6 @@ public class ServitorAttack implements IPlayerActionHandler
|
|||||||
{
|
{
|
||||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (summon.isAttackingNow())
|
|
||||||
{
|
|
||||||
summon.abortAttack();
|
|
||||||
summon.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
summon.doAttack(player.getTarget());
|
summon.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,20 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
private volatile boolean _isDefending;
|
private volatile boolean _isDefending;
|
||||||
private Future<?> _avoidTask = null;
|
private Future<?> _avoidTask = null;
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
private IntentionCommand _nextIntention = null;
|
||||||
|
|
||||||
|
private void saveNextIntention(CtrlIntention intention, Object arg0, Object arg1)
|
||||||
|
{
|
||||||
|
_nextIntention = new IntentionCommand(intention, arg0, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntentionCommand getNextIntention()
|
||||||
|
{
|
||||||
|
return _nextIntention;
|
||||||
|
}
|
||||||
|
|
||||||
public SummonAI(Summon summon)
|
public SummonAI(Summon summon)
|
||||||
{
|
{
|
||||||
super(summon);
|
super(summon);
|
||||||
@@ -111,6 +125,14 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientStopMoving(null);
|
clientStopMoving(null);
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
if (_actor.isAttackingNow())
|
||||||
|
{
|
||||||
|
saveNextIntention(AI_INTENTION_ATTACK, attackTarget, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_actor.doAutoAttack(attackTarget);
|
_actor.doAutoAttack(attackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,13 +48,6 @@ public class PetAttack implements IPlayerActionHandler
|
|||||||
}
|
}
|
||||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (pet.isAttackingNow())
|
|
||||||
{
|
|
||||||
pet.abortAttack();
|
|
||||||
pet.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.doAttack(player.getTarget());
|
pet.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,13 +37,6 @@ public class ServitorAttack implements IPlayerActionHandler
|
|||||||
{
|
{
|
||||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (summon.isAttackingNow())
|
|
||||||
{
|
|
||||||
summon.abortAttack();
|
|
||||||
summon.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
summon.doAttack(player.getTarget());
|
summon.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,20 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
private volatile boolean _isDefending;
|
private volatile boolean _isDefending;
|
||||||
private Future<?> _avoidTask = null;
|
private Future<?> _avoidTask = null;
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
private IntentionCommand _nextIntention = null;
|
||||||
|
|
||||||
|
private void saveNextIntention(CtrlIntention intention, Object arg0, Object arg1)
|
||||||
|
{
|
||||||
|
_nextIntention = new IntentionCommand(intention, arg0, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntentionCommand getNextIntention()
|
||||||
|
{
|
||||||
|
return _nextIntention;
|
||||||
|
}
|
||||||
|
|
||||||
public SummonAI(Summon summon)
|
public SummonAI(Summon summon)
|
||||||
{
|
{
|
||||||
super(summon);
|
super(summon);
|
||||||
@@ -111,6 +125,14 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientStopMoving(null);
|
clientStopMoving(null);
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
if (_actor.isAttackingNow())
|
||||||
|
{
|
||||||
|
saveNextIntention(AI_INTENTION_ATTACK, attackTarget, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_actor.doAutoAttack(attackTarget);
|
_actor.doAutoAttack(attackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,13 +48,6 @@ public class PetAttack implements IPlayerActionHandler
|
|||||||
}
|
}
|
||||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (pet.isAttackingNow())
|
|
||||||
{
|
|
||||||
pet.abortAttack();
|
|
||||||
pet.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.doAttack(player.getTarget());
|
pet.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,13 +37,6 @@ public class ServitorAttack implements IPlayerActionHandler
|
|||||||
{
|
{
|
||||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (summon.isAttackingNow())
|
|
||||||
{
|
|
||||||
summon.abortAttack();
|
|
||||||
summon.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
summon.doAttack(player.getTarget());
|
summon.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,20 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
private volatile boolean _isDefending;
|
private volatile boolean _isDefending;
|
||||||
private Future<?> _avoidTask = null;
|
private Future<?> _avoidTask = null;
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
private IntentionCommand _nextIntention = null;
|
||||||
|
|
||||||
|
private void saveNextIntention(CtrlIntention intention, Object arg0, Object arg1)
|
||||||
|
{
|
||||||
|
_nextIntention = new IntentionCommand(intention, arg0, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntentionCommand getNextIntention()
|
||||||
|
{
|
||||||
|
return _nextIntention;
|
||||||
|
}
|
||||||
|
|
||||||
public SummonAI(Summon summon)
|
public SummonAI(Summon summon)
|
||||||
{
|
{
|
||||||
super(summon);
|
super(summon);
|
||||||
@@ -111,6 +125,14 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientStopMoving(null);
|
clientStopMoving(null);
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
if (_actor.isAttackingNow())
|
||||||
|
{
|
||||||
|
saveNextIntention(AI_INTENTION_ATTACK, attackTarget, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_actor.doAutoAttack(attackTarget);
|
_actor.doAutoAttack(attackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,13 +48,6 @@ public class PetAttack implements IPlayerActionHandler
|
|||||||
}
|
}
|
||||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (pet.isAttackingNow())
|
|
||||||
{
|
|
||||||
pet.abortAttack();
|
|
||||||
pet.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.doAttack(player.getTarget());
|
pet.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,13 +37,6 @@ public class ServitorAttack implements IPlayerActionHandler
|
|||||||
{
|
{
|
||||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (summon.isAttackingNow())
|
|
||||||
{
|
|
||||||
summon.abortAttack();
|
|
||||||
summon.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
summon.doAttack(player.getTarget());
|
summon.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,20 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
private volatile boolean _isDefending;
|
private volatile boolean _isDefending;
|
||||||
private Future<?> _avoidTask = null;
|
private Future<?> _avoidTask = null;
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
private IntentionCommand _nextIntention = null;
|
||||||
|
|
||||||
|
private void saveNextIntention(CtrlIntention intention, Object arg0, Object arg1)
|
||||||
|
{
|
||||||
|
_nextIntention = new IntentionCommand(intention, arg0, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntentionCommand getNextIntention()
|
||||||
|
{
|
||||||
|
return _nextIntention;
|
||||||
|
}
|
||||||
|
|
||||||
public SummonAI(Summon summon)
|
public SummonAI(Summon summon)
|
||||||
{
|
{
|
||||||
super(summon);
|
super(summon);
|
||||||
@@ -111,6 +125,14 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientStopMoving(null);
|
clientStopMoving(null);
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
if (_actor.isAttackingNow())
|
||||||
|
{
|
||||||
|
saveNextIntention(AI_INTENTION_ATTACK, attackTarget, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_actor.doAutoAttack(attackTarget);
|
_actor.doAutoAttack(attackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,13 +48,6 @@ public class PetAttack implements IPlayerActionHandler
|
|||||||
}
|
}
|
||||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (pet.isAttackingNow())
|
|
||||||
{
|
|
||||||
pet.abortAttack();
|
|
||||||
pet.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.doAttack(player.getTarget());
|
pet.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,13 +37,6 @@ public class ServitorAttack implements IPlayerActionHandler
|
|||||||
{
|
{
|
||||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (summon.isAttackingNow())
|
|
||||||
{
|
|
||||||
summon.abortAttack();
|
|
||||||
summon.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
summon.doAttack(player.getTarget());
|
summon.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,20 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
private volatile boolean _isDefending;
|
private volatile boolean _isDefending;
|
||||||
private Future<?> _avoidTask = null;
|
private Future<?> _avoidTask = null;
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
private IntentionCommand _nextIntention = null;
|
||||||
|
|
||||||
|
private void saveNextIntention(CtrlIntention intention, Object arg0, Object arg1)
|
||||||
|
{
|
||||||
|
_nextIntention = new IntentionCommand(intention, arg0, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntentionCommand getNextIntention()
|
||||||
|
{
|
||||||
|
return _nextIntention;
|
||||||
|
}
|
||||||
|
|
||||||
public SummonAI(Summon summon)
|
public SummonAI(Summon summon)
|
||||||
{
|
{
|
||||||
super(summon);
|
super(summon);
|
||||||
@@ -111,6 +125,14 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientStopMoving(null);
|
clientStopMoving(null);
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
if (_actor.isAttackingNow())
|
||||||
|
{
|
||||||
|
saveNextIntention(AI_INTENTION_ATTACK, attackTarget, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_actor.doAutoAttack(attackTarget);
|
_actor.doAutoAttack(attackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,13 +48,6 @@ public class PetAttack implements IPlayerActionHandler
|
|||||||
}
|
}
|
||||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (pet.isAttackingNow())
|
|
||||||
{
|
|
||||||
pet.abortAttack();
|
|
||||||
pet.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.doAttack(player.getTarget());
|
pet.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,13 +37,6 @@ public class ServitorAttack implements IPlayerActionHandler
|
|||||||
{
|
{
|
||||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (summon.isAttackingNow())
|
|
||||||
{
|
|
||||||
summon.abortAttack();
|
|
||||||
summon.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
summon.doAttack(player.getTarget());
|
summon.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,20 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
private volatile boolean _isDefending;
|
private volatile boolean _isDefending;
|
||||||
private Future<?> _avoidTask = null;
|
private Future<?> _avoidTask = null;
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
private IntentionCommand _nextIntention = null;
|
||||||
|
|
||||||
|
private void saveNextIntention(CtrlIntention intention, Object arg0, Object arg1)
|
||||||
|
{
|
||||||
|
_nextIntention = new IntentionCommand(intention, arg0, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntentionCommand getNextIntention()
|
||||||
|
{
|
||||||
|
return _nextIntention;
|
||||||
|
}
|
||||||
|
|
||||||
public SummonAI(Summon summon)
|
public SummonAI(Summon summon)
|
||||||
{
|
{
|
||||||
super(summon);
|
super(summon);
|
||||||
@@ -111,6 +125,14 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientStopMoving(null);
|
clientStopMoving(null);
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
if (_actor.isAttackingNow())
|
||||||
|
{
|
||||||
|
saveNextIntention(AI_INTENTION_ATTACK, attackTarget, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_actor.doAutoAttack(attackTarget);
|
_actor.doAutoAttack(attackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,13 +48,6 @@ public class PetAttack implements IPlayerActionHandler
|
|||||||
}
|
}
|
||||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (pet.isAttackingNow())
|
|
||||||
{
|
|
||||||
pet.abortAttack();
|
|
||||||
pet.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.doAttack(player.getTarget());
|
pet.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,13 +37,6 @@ public class ServitorAttack implements IPlayerActionHandler
|
|||||||
{
|
{
|
||||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (summon.isAttackingNow())
|
|
||||||
{
|
|
||||||
summon.abortAttack();
|
|
||||||
summon.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
summon.doAttack(player.getTarget());
|
summon.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,20 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
private volatile boolean _isDefending;
|
private volatile boolean _isDefending;
|
||||||
private Future<?> _avoidTask = null;
|
private Future<?> _avoidTask = null;
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
private IntentionCommand _nextIntention = null;
|
||||||
|
|
||||||
|
private void saveNextIntention(CtrlIntention intention, Object arg0, Object arg1)
|
||||||
|
{
|
||||||
|
_nextIntention = new IntentionCommand(intention, arg0, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntentionCommand getNextIntention()
|
||||||
|
{
|
||||||
|
return _nextIntention;
|
||||||
|
}
|
||||||
|
|
||||||
public SummonAI(Summon summon)
|
public SummonAI(Summon summon)
|
||||||
{
|
{
|
||||||
super(summon);
|
super(summon);
|
||||||
@@ -111,6 +125,14 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientStopMoving(null);
|
clientStopMoving(null);
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
if (_actor.isAttackingNow())
|
||||||
|
{
|
||||||
|
saveNextIntention(AI_INTENTION_ATTACK, attackTarget, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_actor.doAutoAttack(attackTarget);
|
_actor.doAutoAttack(attackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,13 +48,6 @@ public class PetAttack implements IPlayerActionHandler
|
|||||||
}
|
}
|
||||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (pet.isAttackingNow())
|
|
||||||
{
|
|
||||||
pet.abortAttack();
|
|
||||||
pet.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.doAttack(player.getTarget());
|
pet.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,13 +37,6 @@ public class ServitorAttack implements IPlayerActionHandler
|
|||||||
{
|
{
|
||||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (summon.isAttackingNow())
|
|
||||||
{
|
|
||||||
summon.abortAttack();
|
|
||||||
summon.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
summon.doAttack(player.getTarget());
|
summon.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,20 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
private volatile boolean _isDefending;
|
private volatile boolean _isDefending;
|
||||||
private Future<?> _avoidTask = null;
|
private Future<?> _avoidTask = null;
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
private IntentionCommand _nextIntention = null;
|
||||||
|
|
||||||
|
private void saveNextIntention(CtrlIntention intention, Object arg0, Object arg1)
|
||||||
|
{
|
||||||
|
_nextIntention = new IntentionCommand(intention, arg0, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntentionCommand getNextIntention()
|
||||||
|
{
|
||||||
|
return _nextIntention;
|
||||||
|
}
|
||||||
|
|
||||||
public SummonAI(Summon summon)
|
public SummonAI(Summon summon)
|
||||||
{
|
{
|
||||||
super(summon);
|
super(summon);
|
||||||
@@ -111,6 +125,14 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientStopMoving(null);
|
clientStopMoving(null);
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
if (_actor.isAttackingNow())
|
||||||
|
{
|
||||||
|
saveNextIntention(AI_INTENTION_ATTACK, attackTarget, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_actor.doAutoAttack(attackTarget);
|
_actor.doAutoAttack(attackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,13 +48,6 @@ public class PetAttack implements IPlayerActionHandler
|
|||||||
}
|
}
|
||||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (pet.isAttackingNow())
|
|
||||||
{
|
|
||||||
pet.abortAttack();
|
|
||||||
pet.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.doAttack(player.getTarget());
|
pet.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,13 +37,6 @@ public class ServitorAttack implements IPlayerActionHandler
|
|||||||
{
|
{
|
||||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (summon.isAttackingNow())
|
|
||||||
{
|
|
||||||
summon.abortAttack();
|
|
||||||
summon.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
summon.doAttack(player.getTarget());
|
summon.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,20 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
private volatile boolean _isDefending;
|
private volatile boolean _isDefending;
|
||||||
private Future<?> _avoidTask = null;
|
private Future<?> _avoidTask = null;
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
private IntentionCommand _nextIntention = null;
|
||||||
|
|
||||||
|
private void saveNextIntention(CtrlIntention intention, Object arg0, Object arg1)
|
||||||
|
{
|
||||||
|
_nextIntention = new IntentionCommand(intention, arg0, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntentionCommand getNextIntention()
|
||||||
|
{
|
||||||
|
return _nextIntention;
|
||||||
|
}
|
||||||
|
|
||||||
public SummonAI(Summon summon)
|
public SummonAI(Summon summon)
|
||||||
{
|
{
|
||||||
super(summon);
|
super(summon);
|
||||||
@@ -111,6 +125,14 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientStopMoving(null);
|
clientStopMoving(null);
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
if (_actor.isAttackingNow())
|
||||||
|
{
|
||||||
|
saveNextIntention(AI_INTENTION_ATTACK, attackTarget, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_actor.doAutoAttack(attackTarget);
|
_actor.doAutoAttack(attackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,13 +48,6 @@ public class PetAttack implements IPlayerActionHandler
|
|||||||
}
|
}
|
||||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (pet.isAttackingNow())
|
|
||||||
{
|
|
||||||
pet.abortAttack();
|
|
||||||
pet.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.doAttack(player.getTarget());
|
pet.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,13 +37,6 @@ public class ServitorAttack implements IPlayerActionHandler
|
|||||||
{
|
{
|
||||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (summon.isAttackingNow())
|
|
||||||
{
|
|
||||||
summon.abortAttack();
|
|
||||||
summon.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
summon.doAttack(player.getTarget());
|
summon.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,20 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
private volatile boolean _isDefending;
|
private volatile boolean _isDefending;
|
||||||
private Future<?> _avoidTask = null;
|
private Future<?> _avoidTask = null;
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
private IntentionCommand _nextIntention = null;
|
||||||
|
|
||||||
|
private void saveNextIntention(CtrlIntention intention, Object arg0, Object arg1)
|
||||||
|
{
|
||||||
|
_nextIntention = new IntentionCommand(intention, arg0, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntentionCommand getNextIntention()
|
||||||
|
{
|
||||||
|
return _nextIntention;
|
||||||
|
}
|
||||||
|
|
||||||
public SummonAI(Summon summon)
|
public SummonAI(Summon summon)
|
||||||
{
|
{
|
||||||
super(summon);
|
super(summon);
|
||||||
@@ -111,6 +125,14 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientStopMoving(null);
|
clientStopMoving(null);
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
if (_actor.isAttackingNow())
|
||||||
|
{
|
||||||
|
saveNextIntention(AI_INTENTION_ATTACK, attackTarget, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_actor.doAutoAttack(attackTarget);
|
_actor.doAutoAttack(attackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,13 +48,6 @@ public class PetAttack implements IPlayerActionHandler
|
|||||||
}
|
}
|
||||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (pet.isAttackingNow())
|
|
||||||
{
|
|
||||||
pet.abortAttack();
|
|
||||||
pet.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.doAttack(player.getTarget());
|
pet.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,13 +37,6 @@ public class ServitorAttack implements IPlayerActionHandler
|
|||||||
{
|
{
|
||||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (summon.isAttackingNow())
|
|
||||||
{
|
|
||||||
summon.abortAttack();
|
|
||||||
summon.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
summon.doAttack(player.getTarget());
|
summon.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,20 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
private volatile boolean _isDefending;
|
private volatile boolean _isDefending;
|
||||||
private Future<?> _avoidTask = null;
|
private Future<?> _avoidTask = null;
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
private IntentionCommand _nextIntention = null;
|
||||||
|
|
||||||
|
private void saveNextIntention(CtrlIntention intention, Object arg0, Object arg1)
|
||||||
|
{
|
||||||
|
_nextIntention = new IntentionCommand(intention, arg0, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntentionCommand getNextIntention()
|
||||||
|
{
|
||||||
|
return _nextIntention;
|
||||||
|
}
|
||||||
|
|
||||||
public SummonAI(Summon summon)
|
public SummonAI(Summon summon)
|
||||||
{
|
{
|
||||||
super(summon);
|
super(summon);
|
||||||
@@ -111,6 +125,14 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientStopMoving(null);
|
clientStopMoving(null);
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
if (_actor.isAttackingNow())
|
||||||
|
{
|
||||||
|
saveNextIntention(AI_INTENTION_ATTACK, attackTarget, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_actor.doAutoAttack(attackTarget);
|
_actor.doAutoAttack(attackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,13 +48,6 @@ public class PetAttack implements IPlayerActionHandler
|
|||||||
}
|
}
|
||||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (pet.isAttackingNow())
|
|
||||||
{
|
|
||||||
pet.abortAttack();
|
|
||||||
pet.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.doAttack(player.getTarget());
|
pet.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,13 +37,6 @@ public class ServitorAttack implements IPlayerActionHandler
|
|||||||
{
|
{
|
||||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (summon.isAttackingNow())
|
|
||||||
{
|
|
||||||
summon.abortAttack();
|
|
||||||
summon.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
summon.doAttack(player.getTarget());
|
summon.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,20 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
private volatile boolean _isDefending;
|
private volatile boolean _isDefending;
|
||||||
private Future<?> _avoidTask = null;
|
private Future<?> _avoidTask = null;
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
private IntentionCommand _nextIntention = null;
|
||||||
|
|
||||||
|
private void saveNextIntention(CtrlIntention intention, Object arg0, Object arg1)
|
||||||
|
{
|
||||||
|
_nextIntention = new IntentionCommand(intention, arg0, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntentionCommand getNextIntention()
|
||||||
|
{
|
||||||
|
return _nextIntention;
|
||||||
|
}
|
||||||
|
|
||||||
public SummonAI(Summon summon)
|
public SummonAI(Summon summon)
|
||||||
{
|
{
|
||||||
super(summon);
|
super(summon);
|
||||||
@@ -111,6 +125,14 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientStopMoving(null);
|
clientStopMoving(null);
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
if (_actor.isAttackingNow())
|
||||||
|
{
|
||||||
|
saveNextIntention(AI_INTENTION_ATTACK, attackTarget, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_actor.doAutoAttack(attackTarget);
|
_actor.doAutoAttack(attackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,13 +48,6 @@ public class PetAttack implements IPlayerActionHandler
|
|||||||
}
|
}
|
||||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (pet.isAttackingNow())
|
|
||||||
{
|
|
||||||
pet.abortAttack();
|
|
||||||
pet.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.doAttack(player.getTarget());
|
pet.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,13 +37,6 @@ public class ServitorAttack implements IPlayerActionHandler
|
|||||||
{
|
{
|
||||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (summon.isAttackingNow())
|
|
||||||
{
|
|
||||||
summon.abortAttack();
|
|
||||||
summon.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
summon.doAttack(player.getTarget());
|
summon.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,20 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
private volatile boolean _isDefending;
|
private volatile boolean _isDefending;
|
||||||
private Future<?> _avoidTask = null;
|
private Future<?> _avoidTask = null;
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
private IntentionCommand _nextIntention = null;
|
||||||
|
|
||||||
|
private void saveNextIntention(CtrlIntention intention, Object arg0, Object arg1)
|
||||||
|
{
|
||||||
|
_nextIntention = new IntentionCommand(intention, arg0, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntentionCommand getNextIntention()
|
||||||
|
{
|
||||||
|
return _nextIntention;
|
||||||
|
}
|
||||||
|
|
||||||
public SummonAI(Summon summon)
|
public SummonAI(Summon summon)
|
||||||
{
|
{
|
||||||
super(summon);
|
super(summon);
|
||||||
@@ -111,6 +125,14 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientStopMoving(null);
|
clientStopMoving(null);
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
if (_actor.isAttackingNow())
|
||||||
|
{
|
||||||
|
saveNextIntention(AI_INTENTION_ATTACK, attackTarget, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_actor.doAutoAttack(attackTarget);
|
_actor.doAutoAttack(attackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,13 +48,6 @@ public class PetAttack implements IPlayerActionHandler
|
|||||||
}
|
}
|
||||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (pet.isAttackingNow())
|
|
||||||
{
|
|
||||||
pet.abortAttack();
|
|
||||||
pet.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.doAttack(player.getTarget());
|
pet.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,13 +37,6 @@ public class ServitorAttack implements IPlayerActionHandler
|
|||||||
{
|
{
|
||||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (summon.isAttackingNow())
|
|
||||||
{
|
|
||||||
summon.abortAttack();
|
|
||||||
summon.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
summon.doAttack(player.getTarget());
|
summon.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,20 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
private volatile boolean _isDefending;
|
private volatile boolean _isDefending;
|
||||||
private Future<?> _avoidTask = null;
|
private Future<?> _avoidTask = null;
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
private IntentionCommand _nextIntention = null;
|
||||||
|
|
||||||
|
private void saveNextIntention(CtrlIntention intention, Object arg0, Object arg1)
|
||||||
|
{
|
||||||
|
_nextIntention = new IntentionCommand(intention, arg0, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntentionCommand getNextIntention()
|
||||||
|
{
|
||||||
|
return _nextIntention;
|
||||||
|
}
|
||||||
|
|
||||||
public SummonAI(Summon summon)
|
public SummonAI(Summon summon)
|
||||||
{
|
{
|
||||||
super(summon);
|
super(summon);
|
||||||
@@ -111,6 +125,14 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientStopMoving(null);
|
clientStopMoving(null);
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
if (_actor.isAttackingNow())
|
||||||
|
{
|
||||||
|
saveNextIntention(AI_INTENTION_ATTACK, attackTarget, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_actor.doAutoAttack(attackTarget);
|
_actor.doAutoAttack(attackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,13 +48,6 @@ public class PetAttack implements IPlayerActionHandler
|
|||||||
}
|
}
|
||||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (pet.isAttackingNow())
|
|
||||||
{
|
|
||||||
pet.abortAttack();
|
|
||||||
pet.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.doAttack(player.getTarget());
|
pet.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,13 +37,6 @@ public class ServitorAttack implements IPlayerActionHandler
|
|||||||
{
|
{
|
||||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (summon.isAttackingNow())
|
|
||||||
{
|
|
||||||
summon.abortAttack();
|
|
||||||
summon.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
summon.doAttack(player.getTarget());
|
summon.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,20 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
private volatile boolean _isDefending;
|
private volatile boolean _isDefending;
|
||||||
private Future<?> _avoidTask = null;
|
private Future<?> _avoidTask = null;
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
private IntentionCommand _nextIntention = null;
|
||||||
|
|
||||||
|
private void saveNextIntention(CtrlIntention intention, Object arg0, Object arg1)
|
||||||
|
{
|
||||||
|
_nextIntention = new IntentionCommand(intention, arg0, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntentionCommand getNextIntention()
|
||||||
|
{
|
||||||
|
return _nextIntention;
|
||||||
|
}
|
||||||
|
|
||||||
public SummonAI(Summon summon)
|
public SummonAI(Summon summon)
|
||||||
{
|
{
|
||||||
super(summon);
|
super(summon);
|
||||||
@@ -111,6 +125,14 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientStopMoving(null);
|
clientStopMoving(null);
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
if (_actor.isAttackingNow())
|
||||||
|
{
|
||||||
|
saveNextIntention(AI_INTENTION_ATTACK, attackTarget, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_actor.doAutoAttack(attackTarget);
|
_actor.doAutoAttack(attackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,13 +48,6 @@ public class PetAttack implements IPlayerActionHandler
|
|||||||
}
|
}
|
||||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (pet.isAttackingNow())
|
|
||||||
{
|
|
||||||
pet.abortAttack();
|
|
||||||
pet.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.doAttack(player.getTarget());
|
pet.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,13 +37,6 @@ public class ServitorAttack implements IPlayerActionHandler
|
|||||||
{
|
{
|
||||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (summon.isAttackingNow())
|
|
||||||
{
|
|
||||||
summon.abortAttack();
|
|
||||||
summon.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
summon.doAttack(player.getTarget());
|
summon.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,20 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
private volatile boolean _isDefending;
|
private volatile boolean _isDefending;
|
||||||
private Future<?> _avoidTask = null;
|
private Future<?> _avoidTask = null;
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
private IntentionCommand _nextIntention = null;
|
||||||
|
|
||||||
|
private void saveNextIntention(CtrlIntention intention, Object arg0, Object arg1)
|
||||||
|
{
|
||||||
|
_nextIntention = new IntentionCommand(intention, arg0, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntentionCommand getNextIntention()
|
||||||
|
{
|
||||||
|
return _nextIntention;
|
||||||
|
}
|
||||||
|
|
||||||
public SummonAI(Summon summon)
|
public SummonAI(Summon summon)
|
||||||
{
|
{
|
||||||
super(summon);
|
super(summon);
|
||||||
@@ -111,6 +125,14 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientStopMoving(null);
|
clientStopMoving(null);
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
if (_actor.isAttackingNow())
|
||||||
|
{
|
||||||
|
saveNextIntention(AI_INTENTION_ATTACK, attackTarget, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_actor.doAutoAttack(attackTarget);
|
_actor.doAutoAttack(attackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,13 +48,6 @@ public class PetAttack implements IPlayerActionHandler
|
|||||||
}
|
}
|
||||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (pet.isAttackingNow())
|
|
||||||
{
|
|
||||||
pet.abortAttack();
|
|
||||||
pet.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.doAttack(player.getTarget());
|
pet.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,13 +37,6 @@ public class ServitorAttack implements IPlayerActionHandler
|
|||||||
{
|
{
|
||||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (summon.isAttackingNow())
|
|
||||||
{
|
|
||||||
summon.abortAttack();
|
|
||||||
summon.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
summon.doAttack(player.getTarget());
|
summon.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,20 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
private volatile boolean _isDefending;
|
private volatile boolean _isDefending;
|
||||||
private Future<?> _avoidTask = null;
|
private Future<?> _avoidTask = null;
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
private IntentionCommand _nextIntention = null;
|
||||||
|
|
||||||
|
private void saveNextIntention(CtrlIntention intention, Object arg0, Object arg1)
|
||||||
|
{
|
||||||
|
_nextIntention = new IntentionCommand(intention, arg0, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntentionCommand getNextIntention()
|
||||||
|
{
|
||||||
|
return _nextIntention;
|
||||||
|
}
|
||||||
|
|
||||||
public SummonAI(Summon summon)
|
public SummonAI(Summon summon)
|
||||||
{
|
{
|
||||||
super(summon);
|
super(summon);
|
||||||
@@ -111,6 +125,14 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientStopMoving(null);
|
clientStopMoving(null);
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
if (_actor.isAttackingNow())
|
||||||
|
{
|
||||||
|
saveNextIntention(AI_INTENTION_ATTACK, attackTarget, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_actor.doAutoAttack(attackTarget);
|
_actor.doAutoAttack(attackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,13 +48,6 @@ public class PetAttack implements IPlayerActionHandler
|
|||||||
}
|
}
|
||||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (pet.isAttackingNow())
|
|
||||||
{
|
|
||||||
pet.abortAttack();
|
|
||||||
pet.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.doAttack(player.getTarget());
|
pet.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,13 +37,6 @@ public class ServitorAttack implements IPlayerActionHandler
|
|||||||
{
|
{
|
||||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (summon.isAttackingNow())
|
|
||||||
{
|
|
||||||
summon.abortAttack();
|
|
||||||
summon.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
summon.doAttack(player.getTarget());
|
summon.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,20 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
private volatile boolean _isDefending;
|
private volatile boolean _isDefending;
|
||||||
private Future<?> _avoidTask = null;
|
private Future<?> _avoidTask = null;
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
private IntentionCommand _nextIntention = null;
|
||||||
|
|
||||||
|
private void saveNextIntention(CtrlIntention intention, Object arg0, Object arg1)
|
||||||
|
{
|
||||||
|
_nextIntention = new IntentionCommand(intention, arg0, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntentionCommand getNextIntention()
|
||||||
|
{
|
||||||
|
return _nextIntention;
|
||||||
|
}
|
||||||
|
|
||||||
public SummonAI(Summon summon)
|
public SummonAI(Summon summon)
|
||||||
{
|
{
|
||||||
super(summon);
|
super(summon);
|
||||||
@@ -111,6 +125,14 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientStopMoving(null);
|
clientStopMoving(null);
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
if (_actor.isAttackingNow())
|
||||||
|
{
|
||||||
|
saveNextIntention(AI_INTENTION_ATTACK, attackTarget, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_actor.doAutoAttack(attackTarget);
|
_actor.doAutoAttack(attackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,13 +48,6 @@ public class PetAttack implements IPlayerActionHandler
|
|||||||
}
|
}
|
||||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (pet.isAttackingNow())
|
|
||||||
{
|
|
||||||
pet.abortAttack();
|
|
||||||
pet.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.doAttack(player.getTarget());
|
pet.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,13 +37,6 @@ public class ServitorAttack implements IPlayerActionHandler
|
|||||||
{
|
{
|
||||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||||
{
|
{
|
||||||
// Prevent spamming next target and attack to increase attack speed.
|
|
||||||
if (summon.isAttackingNow())
|
|
||||||
{
|
|
||||||
summon.abortAttack();
|
|
||||||
summon.abortCast();
|
|
||||||
}
|
|
||||||
|
|
||||||
summon.doAttack(player.getTarget());
|
summon.doAttack(player.getTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,20 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
private volatile boolean _isDefending;
|
private volatile boolean _isDefending;
|
||||||
private Future<?> _avoidTask = null;
|
private Future<?> _avoidTask = null;
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
private IntentionCommand _nextIntention = null;
|
||||||
|
|
||||||
|
private void saveNextIntention(CtrlIntention intention, Object arg0, Object arg1)
|
||||||
|
{
|
||||||
|
_nextIntention = new IntentionCommand(intention, arg0, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntentionCommand getNextIntention()
|
||||||
|
{
|
||||||
|
return _nextIntention;
|
||||||
|
}
|
||||||
|
|
||||||
public SummonAI(Summon summon)
|
public SummonAI(Summon summon)
|
||||||
{
|
{
|
||||||
super(summon);
|
super(summon);
|
||||||
@@ -111,6 +125,14 @@ public class SummonAI extends PlayableAI implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientStopMoving(null);
|
clientStopMoving(null);
|
||||||
|
|
||||||
|
// Fix: Infinite Atk. Spd. exploit
|
||||||
|
if (_actor.isAttackingNow())
|
||||||
|
{
|
||||||
|
saveNextIntention(AI_INTENTION_ATTACK, attackTarget, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_actor.doAutoAttack(attackTarget);
|
_actor.doAutoAttack(attackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user