Proper summon intention after stun.

This commit is contained in:
MobiusDev
2018-09-04 02:26:48 +00:00
parent 28f671d250
commit 908705a276
10 changed files with 147 additions and 26 deletions

View File

@@ -24,6 +24,7 @@ import com.l2jmobius.gameserver.ai.CtrlEvent;
import com.l2jmobius.gameserver.ai.CtrlIntention;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
@@ -66,13 +67,27 @@ public final class BlockActions extends AbstractEffect
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
_allowedSkills.stream().forEach(effected::removeBlockActionsAllowedSkill);
if (!effected.isPlayer())
if (effected.isPlayable())
{
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
if (effected.isSummon())
{
if ((effector != null) && !effector.isDead())
{
((L2Summon) effected).doAttack(effector);
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, effected.getActingPlayer());
}
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
}
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
}
}
}

View File

@@ -24,6 +24,7 @@ import com.l2jmobius.gameserver.ai.CtrlEvent;
import com.l2jmobius.gameserver.ai.CtrlIntention;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
@@ -66,13 +67,27 @@ public final class BlockActions extends AbstractEffect
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
_allowedSkills.stream().forEach(effected::removeBlockActionsAllowedSkill);
if (!effected.isPlayer())
if (effected.isPlayable())
{
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
if (effected.isSummon())
{
if ((effector != null) && !effector.isDead())
{
((L2Summon) effected).doAttack(effector);
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, effected.getActingPlayer());
}
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
}
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
}
}
}

View File

@@ -24,6 +24,7 @@ import com.l2jmobius.gameserver.ai.CtrlEvent;
import com.l2jmobius.gameserver.ai.CtrlIntention;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
@@ -66,13 +67,27 @@ public final class BlockActions extends AbstractEffect
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
_allowedSkills.stream().forEach(effected::removeBlockActionsAllowedSkill);
if (!effected.isPlayer())
if (effected.isPlayable())
{
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
if (effected.isSummon())
{
if ((effector != null) && !effector.isDead())
{
((L2Summon) effected).doAttack(effector);
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, effected.getActingPlayer());
}
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
}
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
}
}
}

View File

@@ -24,6 +24,7 @@ import com.l2jmobius.gameserver.ai.CtrlEvent;
import com.l2jmobius.gameserver.ai.CtrlIntention;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
@@ -66,13 +67,27 @@ public final class BlockActions extends AbstractEffect
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
_allowedSkills.stream().forEach(effected::removeBlockActionsAllowedSkill);
if (!effected.isPlayer())
if (effected.isPlayable())
{
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
if (effected.isSummon())
{
if ((effector != null) && !effector.isDead())
{
((L2Summon) effected).doAttack(effector);
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, effected.getActingPlayer());
}
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
}
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
}
}
}

View File

@@ -16,7 +16,10 @@
*/
package handlers.effecthandlers;
import com.l2jmobius.gameserver.ai.CtrlIntention;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.conditions.Condition;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
@@ -49,7 +52,20 @@ public final class Stun extends AbstractEffect
@Override
public void onExit(BuffInfo info)
{
info.getEffected().stopStunning(false);
final L2Character effected = info.getEffected();
effected.stopStunning(false);
if (effected.isSummon())
{
final L2Character effector = info.getEffector();
if ((effector != null) && !effector.isDead())
{
((L2Summon) effected).doSummonAttack(effector);
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, effected.getActingPlayer());
}
}
}
@Override

View File

@@ -945,12 +945,12 @@ public abstract class L2Summon extends L2Playable
/**
* Performs an attack to the owner's target.
* @param target the target to attack.
*/
public void doAttack()
public void doSummonAttack(L2Object target)
{
if (_owner != null)
{
final L2Object target = _owner.getTarget();
if (target != null)
{
setTarget(target);

View File

@@ -183,7 +183,7 @@ public final class RequestActionUse implements IClientIncomingPacket
{
if (summon.canAttack(_ctrlPressed))
{
summon.doAttack();
summon.doSummonAttack(target);
}
}
break;
@@ -241,7 +241,7 @@ public final class RequestActionUse implements IClientIncomingPacket
{
if (summon.canAttack(_ctrlPressed))
{
summon.doAttack();
summon.doSummonAttack(target);
}
}
break;

View File

@@ -24,6 +24,7 @@ import com.l2jmobius.gameserver.ai.CtrlEvent;
import com.l2jmobius.gameserver.ai.CtrlIntention;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
@@ -66,13 +67,27 @@ public final class BlockActions extends AbstractEffect
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
_allowedSkills.stream().forEach(effected::removeBlockActionsAllowedSkill);
if (!effected.isPlayer())
if (effected.isPlayable())
{
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
if (effected.isSummon())
{
if ((effector != null) && !effector.isDead())
{
((L2Summon) effected).doAttack(effector);
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, effected.getActingPlayer());
}
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
}
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
}
}
}

View File

@@ -24,6 +24,7 @@ import com.l2jmobius.gameserver.ai.CtrlEvent;
import com.l2jmobius.gameserver.ai.CtrlIntention;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
@@ -66,13 +67,27 @@ public final class BlockActions extends AbstractEffect
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
_allowedSkills.stream().forEach(effected::removeBlockActionsAllowedSkill);
if (!effected.isPlayer())
if (effected.isPlayable())
{
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
if (effected.isSummon())
{
if ((effector != null) && !effector.isDead())
{
((L2Summon) effected).doAttack(effector);
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, effected.getActingPlayer());
}
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
}
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
}
}
}

View File

@@ -24,6 +24,7 @@ import com.l2jmobius.gameserver.ai.CtrlEvent;
import com.l2jmobius.gameserver.ai.CtrlIntention;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
@@ -66,13 +67,27 @@ public final class BlockActions extends AbstractEffect
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
_allowedSkills.stream().forEach(effected::removeBlockActionsAllowedSkill);
if (!effected.isPlayer())
if (effected.isPlayable())
{
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
if (effected.isSummon())
{
if ((effector != null) && !effector.isDead())
{
((L2Summon) effected).doAttack(effector);
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, effected.getActingPlayer());
}
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
}
}
else
{
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
}
}
}