Fixed skill abort casting.

This commit is contained in:
MobiusDev 2018-02-19 07:42:18 +00:00
parent 9bac3a6a40
commit 24dbe34180
10 changed files with 115 additions and 135 deletions

View File

@ -723,8 +723,29 @@ public class SkillCaster implements Runnable
caster.sendPacket(ActionFailed.get(_castingType)); // send an "action failed" packet to the caster caster.sendPacket(ActionFailed.get(_castingType)); // send an "action failed" packet to the caster
} }
// Attack target after skill use
// TODO: This shouldnt be here. If skill condition fail, you still go autoattack. This doesn't happen if skill is in cooldown though.
if ((_skill.getNextAction() != NextActionType.NONE) && (caster.getAI().getNextIntention() == null))
{
if ((_skill.getNextAction() == NextActionType.ATTACK) && (target != null) && (target != caster) && target.isAutoAttackable(caster))
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
}
else if ((_skill.getNextAction() == NextActionType.CAST) && (target != null) && (target != caster) && target.isAutoAttackable(caster))
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_CAST, _skill, target, _item, false, false);
}
else
{
caster.getAI().notifyEvent(CtrlEvent.EVT_FINISH_CASTING);
}
}
else
{
caster.getAI().notifyEvent(CtrlEvent.EVT_FINISH_CASTING);
}
// Notify the AI of the L2Character with EVT_FINISH_CASTING // Notify the AI of the L2Character with EVT_FINISH_CASTING
caster.getAI().notifyEvent(CtrlEvent.EVT_FINISH_CASTING);
// If there is a queued skill, launch it and wipe the queue. // If there is a queued skill, launch it and wipe the queue.
if (caster.isPlayer()) if (caster.isPlayer())
@ -743,23 +764,6 @@ public class SkillCaster implements Runnable
return; return;
} }
} }
// Attack target after skill use
// TODO: This shouldnt be here. If skill condition fail, you still go autoattack. This doesn't happen if skill is in cooldown though.
if ((_skill.getNextAction() != NextActionType.NONE) && (target != null) && (target != caster) && target.canBeAttacked())
{
if ((caster.getAI().getIntention() == null) || (caster.getAI().getIntention() != CtrlIntention.AI_INTENTION_MOVE_TO))
{
if (_skill.getNextAction() == NextActionType.ATTACK)
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
}
else if (_skill.getNextAction() == NextActionType.CAST)
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_CAST, _skill, target, _item, false, false);
}
}
}
} }
private void calcSkillTiming(L2Character creature, Skill skill) private void calcSkillTiming(L2Character creature, Skill skill)
@ -868,7 +872,7 @@ public class SkillCaster implements Runnable
*/ */
public boolean canAbortCast() public boolean canAbortCast()
{ {
return _targets == null; // When targets are allocated, that means skill is already launched, therefore cannot be aborted. return getCaster().getTarget() == null; // When targets are allocated, that means skill is already launched, therefore cannot be aborted.
} }
/** /**

View File

@ -151,14 +151,6 @@ public class SkillChannelizer implements Runnable
// Apply channeling skills on the targets. // Apply channeling skills on the targets.
if (skill.getChannelingSkillId() > 0) if (skill.getChannelingSkillId() > 0)
{ {
final Skill baseSkill = SkillData.getInstance().getSkill(skill.getChannelingSkillId(), 1);
if (baseSkill == null)
{
_log.warning(getClass().getSimpleName() + ": skill " + skill + " couldn't find effect id skill: " + skill.getChannelingSkillId() + " !");
_channelizer.abortCast();
return;
}
final List<L2Character> targetList = new ArrayList<>(); final List<L2Character> targetList = new ArrayList<>();
final L2Object target = skill.getTarget(_channelizer, false, false, false); final L2Object target = skill.getTarget(_channelizer, false, false, false);
if (target != null) if (target != null)

View File

@ -723,8 +723,29 @@ public class SkillCaster implements Runnable
caster.sendPacket(ActionFailed.get(_castingType)); // send an "action failed" packet to the caster caster.sendPacket(ActionFailed.get(_castingType)); // send an "action failed" packet to the caster
} }
// Attack target after skill use
// TODO: This shouldnt be here. If skill condition fail, you still go autoattack. This doesn't happen if skill is in cooldown though.
if ((_skill.getNextAction() != NextActionType.NONE) && (caster.getAI().getNextIntention() == null))
{
if ((_skill.getNextAction() == NextActionType.ATTACK) && (target != null) && (target != caster) && target.isAutoAttackable(caster))
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
}
else if ((_skill.getNextAction() == NextActionType.CAST) && (target != null) && (target != caster) && target.isAutoAttackable(caster))
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_CAST, _skill, target, _item, false, false);
}
else
{
caster.getAI().notifyEvent(CtrlEvent.EVT_FINISH_CASTING);
}
}
else
{
caster.getAI().notifyEvent(CtrlEvent.EVT_FINISH_CASTING);
}
// Notify the AI of the L2Character with EVT_FINISH_CASTING // Notify the AI of the L2Character with EVT_FINISH_CASTING
caster.getAI().notifyEvent(CtrlEvent.EVT_FINISH_CASTING);
// If there is a queued skill, launch it and wipe the queue. // If there is a queued skill, launch it and wipe the queue.
if (caster.isPlayer()) if (caster.isPlayer())
@ -743,23 +764,6 @@ public class SkillCaster implements Runnable
return; return;
} }
} }
// Attack target after skill use
// TODO: This shouldnt be here. If skill condition fail, you still go autoattack. This doesn't happen if skill is in cooldown though.
if ((_skill.getNextAction() != NextActionType.NONE) && (target != null) && (target != caster) && target.canBeAttacked())
{
if ((caster.getAI().getIntention() == null) || (caster.getAI().getIntention() != CtrlIntention.AI_INTENTION_MOVE_TO))
{
if (_skill.getNextAction() == NextActionType.ATTACK)
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
}
else if (_skill.getNextAction() == NextActionType.CAST)
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_CAST, _skill, target, _item, false, false);
}
}
}
} }
private void calcSkillTiming(L2Character creature, Skill skill) private void calcSkillTiming(L2Character creature, Skill skill)
@ -868,7 +872,7 @@ public class SkillCaster implements Runnable
*/ */
public boolean canAbortCast() public boolean canAbortCast()
{ {
return _targets == null; // When targets are allocated, that means skill is already launched, therefore cannot be aborted. return getCaster().getTarget() == null; // When targets are allocated, that means skill is already launched, therefore cannot be aborted.
} }
/** /**

View File

@ -151,14 +151,6 @@ public class SkillChannelizer implements Runnable
// Apply channeling skills on the targets. // Apply channeling skills on the targets.
if (skill.getChannelingSkillId() > 0) if (skill.getChannelingSkillId() > 0)
{ {
final Skill baseSkill = SkillData.getInstance().getSkill(skill.getChannelingSkillId(), 1);
if (baseSkill == null)
{
_log.warning(getClass().getSimpleName() + ": skill " + skill + " couldn't find effect id skill: " + skill.getChannelingSkillId() + " !");
_channelizer.abortCast();
return;
}
final List<L2Character> targetList = new ArrayList<>(); final List<L2Character> targetList = new ArrayList<>();
final L2Object target = skill.getTarget(_channelizer, false, false, false); final L2Object target = skill.getTarget(_channelizer, false, false, false);
if (target != null) if (target != null)

View File

@ -723,8 +723,29 @@ public class SkillCaster implements Runnable
caster.sendPacket(ActionFailed.get(_castingType)); // send an "action failed" packet to the caster caster.sendPacket(ActionFailed.get(_castingType)); // send an "action failed" packet to the caster
} }
// Attack target after skill use
// TODO: This shouldnt be here. If skill condition fail, you still go autoattack. This doesn't happen if skill is in cooldown though.
if ((_skill.getNextAction() != NextActionType.NONE) && (caster.getAI().getNextIntention() == null))
{
if ((_skill.getNextAction() == NextActionType.ATTACK) && (target != null) && (target != caster) && target.isAutoAttackable(caster))
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
}
else if ((_skill.getNextAction() == NextActionType.CAST) && (target != null) && (target != caster) && target.isAutoAttackable(caster))
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_CAST, _skill, target, _item, false, false);
}
else
{
caster.getAI().notifyEvent(CtrlEvent.EVT_FINISH_CASTING);
}
}
else
{
caster.getAI().notifyEvent(CtrlEvent.EVT_FINISH_CASTING);
}
// Notify the AI of the L2Character with EVT_FINISH_CASTING // Notify the AI of the L2Character with EVT_FINISH_CASTING
caster.getAI().notifyEvent(CtrlEvent.EVT_FINISH_CASTING);
// If there is a queued skill, launch it and wipe the queue. // If there is a queued skill, launch it and wipe the queue.
if (caster.isPlayer()) if (caster.isPlayer())
@ -743,23 +764,6 @@ public class SkillCaster implements Runnable
return; return;
} }
} }
// Attack target after skill use
// TODO: This shouldnt be here. If skill condition fail, you still go autoattack. This doesn't happen if skill is in cooldown though.
if ((_skill.getNextAction() != NextActionType.NONE) && (target != null) && (target != caster) && target.canBeAttacked())
{
if ((caster.getAI().getIntention() == null) || (caster.getAI().getIntention() != CtrlIntention.AI_INTENTION_MOVE_TO))
{
if (_skill.getNextAction() == NextActionType.ATTACK)
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
}
else if (_skill.getNextAction() == NextActionType.CAST)
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_CAST, _skill, target, _item, false, false);
}
}
}
} }
private void calcSkillTiming(L2Character creature, Skill skill) private void calcSkillTiming(L2Character creature, Skill skill)
@ -868,7 +872,7 @@ public class SkillCaster implements Runnable
*/ */
public boolean canAbortCast() public boolean canAbortCast()
{ {
return _targets == null; // When targets are allocated, that means skill is already launched, therefore cannot be aborted. return getCaster().getTarget() == null; // When targets are allocated, that means skill is already launched, therefore cannot be aborted.
} }
/** /**

View File

@ -151,14 +151,6 @@ public class SkillChannelizer implements Runnable
// Apply channeling skills on the targets. // Apply channeling skills on the targets.
if (skill.getChannelingSkillId() > 0) if (skill.getChannelingSkillId() > 0)
{ {
final Skill baseSkill = SkillData.getInstance().getSkill(skill.getChannelingSkillId(), 1);
if (baseSkill == null)
{
_log.warning(getClass().getSimpleName() + ": skill " + skill + " couldn't find effect id skill: " + skill.getChannelingSkillId() + " !");
_channelizer.abortCast();
return;
}
final List<L2Character> targetList = new ArrayList<>(); final List<L2Character> targetList = new ArrayList<>();
final L2Object target = skill.getTarget(_channelizer, false, false, false); final L2Object target = skill.getTarget(_channelizer, false, false, false);
if (target != null) if (target != null)

View File

@ -723,8 +723,29 @@ public class SkillCaster implements Runnable
caster.sendPacket(ActionFailed.get(_castingType)); // send an "action failed" packet to the caster caster.sendPacket(ActionFailed.get(_castingType)); // send an "action failed" packet to the caster
} }
// Attack target after skill use
// TODO: This shouldnt be here. If skill condition fail, you still go autoattack. This doesn't happen if skill is in cooldown though.
if ((_skill.getNextAction() != NextActionType.NONE) && (caster.getAI().getNextIntention() == null))
{
if ((_skill.getNextAction() == NextActionType.ATTACK) && (target != null) && (target != caster) && target.isAutoAttackable(caster))
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
}
else if ((_skill.getNextAction() == NextActionType.CAST) && (target != null) && (target != caster) && target.isAutoAttackable(caster))
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_CAST, _skill, target, _item, false, false);
}
else
{
caster.getAI().notifyEvent(CtrlEvent.EVT_FINISH_CASTING);
}
}
else
{
caster.getAI().notifyEvent(CtrlEvent.EVT_FINISH_CASTING);
}
// Notify the AI of the L2Character with EVT_FINISH_CASTING // Notify the AI of the L2Character with EVT_FINISH_CASTING
caster.getAI().notifyEvent(CtrlEvent.EVT_FINISH_CASTING);
// If there is a queued skill, launch it and wipe the queue. // If there is a queued skill, launch it and wipe the queue.
if (caster.isPlayer()) if (caster.isPlayer())
@ -743,23 +764,6 @@ public class SkillCaster implements Runnable
return; return;
} }
} }
// Attack target after skill use
// TODO: This shouldnt be here. If skill condition fail, you still go autoattack. This doesn't happen if skill is in cooldown though.
if ((_skill.getNextAction() != NextActionType.NONE) && (target != null) && (target != caster) && target.canBeAttacked())
{
if ((caster.getAI().getIntention() == null) || (caster.getAI().getIntention() != CtrlIntention.AI_INTENTION_MOVE_TO))
{
if (_skill.getNextAction() == NextActionType.ATTACK)
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
}
else if (_skill.getNextAction() == NextActionType.CAST)
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_CAST, _skill, target, _item, false, false);
}
}
}
} }
private void calcSkillTiming(L2Character creature, Skill skill) private void calcSkillTiming(L2Character creature, Skill skill)
@ -868,7 +872,7 @@ public class SkillCaster implements Runnable
*/ */
public boolean canAbortCast() public boolean canAbortCast()
{ {
return _targets == null; // When targets are allocated, that means skill is already launched, therefore cannot be aborted. return getCaster().getTarget() == null; // When targets are allocated, that means skill is already launched, therefore cannot be aborted.
} }
/** /**

View File

@ -151,14 +151,6 @@ public class SkillChannelizer implements Runnable
// Apply channeling skills on the targets. // Apply channeling skills on the targets.
if (skill.getChannelingSkillId() > 0) if (skill.getChannelingSkillId() > 0)
{ {
final Skill baseSkill = SkillData.getInstance().getSkill(skill.getChannelingSkillId(), 1);
if (baseSkill == null)
{
_log.warning(getClass().getSimpleName() + ": skill " + skill + " couldn't find effect id skill: " + skill.getChannelingSkillId() + " !");
_channelizer.abortCast();
return;
}
final List<L2Character> targetList = new ArrayList<>(); final List<L2Character> targetList = new ArrayList<>();
final L2Object target = skill.getTarget(_channelizer, false, false, false); final L2Object target = skill.getTarget(_channelizer, false, false, false);
if (target != null) if (target != null)

View File

@ -723,8 +723,29 @@ public class SkillCaster implements Runnable
caster.sendPacket(ActionFailed.get(_castingType)); // send an "action failed" packet to the caster caster.sendPacket(ActionFailed.get(_castingType)); // send an "action failed" packet to the caster
} }
// Attack target after skill use
// TODO: This shouldnt be here. If skill condition fail, you still go autoattack. This doesn't happen if skill is in cooldown though.
if ((_skill.getNextAction() != NextActionType.NONE) && (caster.getAI().getNextIntention() == null))
{
if ((_skill.getNextAction() == NextActionType.ATTACK) && (target != null) && (target != caster) && target.isAutoAttackable(caster))
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
}
else if ((_skill.getNextAction() == NextActionType.CAST) && (target != null) && (target != caster) && target.isAutoAttackable(caster))
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_CAST, _skill, target, _item, false, false);
}
else
{
caster.getAI().notifyEvent(CtrlEvent.EVT_FINISH_CASTING);
}
}
else
{
caster.getAI().notifyEvent(CtrlEvent.EVT_FINISH_CASTING);
}
// Notify the AI of the L2Character with EVT_FINISH_CASTING // Notify the AI of the L2Character with EVT_FINISH_CASTING
caster.getAI().notifyEvent(CtrlEvent.EVT_FINISH_CASTING);
// If there is a queued skill, launch it and wipe the queue. // If there is a queued skill, launch it and wipe the queue.
if (caster.isPlayer()) if (caster.isPlayer())
@ -743,23 +764,6 @@ public class SkillCaster implements Runnable
return; return;
} }
} }
// Attack target after skill use
// TODO: This shouldnt be here. If skill condition fail, you still go autoattack. This doesn't happen if skill is in cooldown though.
if ((_skill.getNextAction() != NextActionType.NONE) && (target != null) && (target != caster) && target.canBeAttacked())
{
if ((caster.getAI().getIntention() == null) || (caster.getAI().getIntention() != CtrlIntention.AI_INTENTION_MOVE_TO))
{
if (_skill.getNextAction() == NextActionType.ATTACK)
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
}
else if (_skill.getNextAction() == NextActionType.CAST)
{
caster.getAI().setIntention(CtrlIntention.AI_INTENTION_CAST, _skill, target, _item, false, false);
}
}
}
} }
private void calcSkillTiming(L2Character creature, Skill skill) private void calcSkillTiming(L2Character creature, Skill skill)
@ -868,7 +872,7 @@ public class SkillCaster implements Runnable
*/ */
public boolean canAbortCast() public boolean canAbortCast()
{ {
return _targets == null; // When targets are allocated, that means skill is already launched, therefore cannot be aborted. return getCaster().getTarget() == null; // When targets are allocated, that means skill is already launched, therefore cannot be aborted.
} }
/** /**

View File

@ -151,14 +151,6 @@ public class SkillChannelizer implements Runnable
// Apply channeling skills on the targets. // Apply channeling skills on the targets.
if (skill.getChannelingSkillId() > 0) if (skill.getChannelingSkillId() > 0)
{ {
final Skill baseSkill = SkillData.getInstance().getSkill(skill.getChannelingSkillId(), 1);
if (baseSkill == null)
{
_log.warning(getClass().getSimpleName() + ": skill " + skill + " couldn't find effect id skill: " + skill.getChannelingSkillId() + " !");
_channelizer.abortCast();
return;
}
final List<L2Character> targetList = new ArrayList<>(); final List<L2Character> targetList = new ArrayList<>();
final L2Object target = skill.getTarget(_channelizer, false, false, false); final L2Object target = skill.getTarget(_channelizer, false, false, false);
if (target != null) if (target != null)