Index: D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/ai/L2SiegeGuardAI.java =================================================================== --- D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/ai/L2SiegeGuardAI.java (revision 218) +++ D:/workspace/GameServer_tmp/java/net/sf/l2j/gameserver/ai/L2SiegeGuardAI.java (working copy) @@ -21,6 +21,7 @@ import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE; import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK; import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE; +import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_FOLLOW; import java.util.concurrent.Future; import java.util.logging.Logger; @@ -40,6 +41,7 @@ import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.actor.instance.L2SiegeGuardInstance; +import net.sf.l2j.gameserver.model.actor.instance.L2SummonInstance; /** @@ -133,6 +135,10 @@ // Check if the target isn't dead if (target.isAlikeDead()) return false; + // Get the owner if the target is a summon + if (target instanceof L2SummonInstance) + target = ((L2SummonInstance)target).getOwner(); + return ( target instanceof L2PcInstance && !((L2PcInstance)target).isInvul() && // Not invul and @@ -163,6 +169,12 @@ { L2Attackable npc = (L2Attackable)_actor; + // remove from knownlist all dead or alikedead players + for(L2PcInstance in:npc.getKnownList().getKnownPlayers()) + { + if(in.isAlikeDead()) npc.getKnownList().removeKnownObject(in); + } + // If its _knownPlayer isn't empty set the Intention to AI_INTENTION_ACTIVE if(npc.getKnownList().getKnownPlayers().size() > 0) intention = AI_INTENTION_ACTIVE; @@ -564,7 +576,16 @@ // Check if the actor can't use skills and if a thinking action isn't already in progress if (thinking || _actor.isAllSkillsDisabled()) return; - + + if((!_actor.isVisible()) || (!_actor.hasAI())) + setIntention(AI_INTENTION_IDLE); + + if((getIntention() == AI_INTENTION_FOLLOW) && (_actor.getKnownList().getKnownPlayers().isEmpty())) + setIntention(AI_INTENTION_IDLE); + + if(getIntention() == AI_INTENTION_IDLE) + return; + // Start thinking action thinking = true; @@ -597,7 +618,14 @@ */ protected void onEvtAttacked(L2Character attacker) { - // Calculate the attack timeout + if(attacker == null) + { + _log.warning("L2SiegeGuardAI.java: onEvtAttacked(L2Character attacker) -> attacker=null, RETURNING with setting attacktimeout"); + _attack_timeout = GameTimeController.getGameTicks(); + return; + } + + // Calculate the attack timeout _attack_timeout = MAX_ATTACK_TIMEOUT + GameTimeController.getGameTicks(); // Set the _globalAggro to 0 to permit attack even just after spawn