Siege guards AI improvement.

This commit is contained in:
MobiusDev
2017-12-04 11:06:31 +00:00
parent 49c0634086
commit f208218b7c
5 changed files with 65 additions and 80 deletions

View File

@@ -100,32 +100,29 @@ public class SiegeGuards extends AbstractNpcAI
@Override @Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{ {
if (event.equals("AGGRO_CHECK")) if ((npc != null) && !npc.isDead())
{ {
if ((npc != null) && !npc.isDead()) final L2Object target = npc.getTarget();
if (!npc.isInCombat() || (target == null) || (npc.calculateDistance(target, false, false) > npc.getAggroRange()) || target.isInvul())
{ {
final L2Object target = npc.getTarget(); for (L2Character nearby : L2World.getInstance().getVisibleObjects(npc, L2Character.class, npc.getAggroRange()))
if (!npc.isInCombat() || (target == null) || (npc.calculateDistance(target, false, false) > npc.getAggroRange()) || target.isInvul())
{ {
for (L2Character nearby : L2World.getInstance().getVisibleObjects(npc, L2Character.class, npc.getAggroRange())) if (nearby.isPlayable() && GeoEngine.getInstance().canSeeTarget(npc, nearby))
{ {
if (nearby.isPlayable() && GeoEngine.getInstance().canSeeTarget(npc, nearby)) final L2Summon summon = nearby.isSummon() ? (L2Summon) nearby : null;
final L2PcInstance pl = summon == null ? (L2PcInstance) nearby : summon.getOwner();
if (((pl.getSiegeState() != 2) || pl.isRegisteredOnThisSiegeField(npc.getScriptValue())) && ((pl.getSiegeState() != 0) || (npc.getAI().getIntention() != CtrlIntention.AI_INTENTION_IDLE)))
{ {
final L2Summon summon = nearby.isSummon() ? (L2Summon) nearby : null; if (!pl.isInvisible() && !pl.isInvul()) // skip invisible players
final L2PcInstance pl = summon == null ? (L2PcInstance) nearby : summon.getOwner();
if (((pl.getSiegeState() != 2) || pl.isRegisteredOnThisSiegeField(npc.getScriptValue())) && ((pl.getSiegeState() != 0) || (npc.getAI().getIntention() != CtrlIntention.AI_INTENTION_IDLE)))
{ {
if (!pl.isInvisible() && !pl.isInvul()) // skip invisible players addAttackPlayerDesire(npc, pl);
{ break; // no need to search more
addAttackPlayerDesire(npc, pl);
break; // no need to search more
}
} }
} }
} }
} }
startQuestTimer("AGGRO_CHECK", 2000, npc, null);
} }
startQuestTimer("AGGRO_CHECK" + npc.getId(), 3000, npc, null);
} }
return super.onAdvEvent(event, npc, player); return super.onAdvEvent(event, npc, player);
} }
@@ -152,7 +149,7 @@ public class SiegeGuards extends AbstractNpcAI
final Castle castle = npc.getCastle(); final Castle castle = npc.getCastle();
final Fort fortress = npc.getFort(); final Fort fortress = npc.getFort();
npc.setScriptValue(fortress != null ? fortress.getResidenceId() : (castle != null ? castle.getResidenceId() : 0)); npc.setScriptValue(fortress != null ? fortress.getResidenceId() : (castle != null ? castle.getResidenceId() : 0));
startQuestTimer("AGGRO_CHECK", 2000, npc, null); startQuestTimer("AGGRO_CHECK" + npc.getId(), getRandom(1000, 10000), npc, null);
return super.onSpawn(npc); return super.onSpawn(npc);
} }

View File

@@ -100,32 +100,29 @@ public class SiegeGuards extends AbstractNpcAI
@Override @Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{ {
if (event.equals("AGGRO_CHECK")) if ((npc != null) && !npc.isDead())
{ {
if ((npc != null) && !npc.isDead()) final L2Object target = npc.getTarget();
if (!npc.isInCombat() || (target == null) || (npc.calculateDistance(target, false, false) > npc.getAggroRange()) || target.isInvul())
{ {
final L2Object target = npc.getTarget(); for (L2Character nearby : L2World.getInstance().getVisibleObjects(npc, L2Character.class, npc.getAggroRange()))
if (!npc.isInCombat() || (target == null) || (npc.calculateDistance(target, false, false) > npc.getAggroRange()) || target.isInvul())
{ {
for (L2Character nearby : L2World.getInstance().getVisibleObjects(npc, L2Character.class, npc.getAggroRange())) if (nearby.isPlayable() && GeoEngine.getInstance().canSeeTarget(npc, nearby))
{ {
if (nearby.isPlayable() && GeoEngine.getInstance().canSeeTarget(npc, nearby)) final L2Summon summon = nearby.isSummon() ? (L2Summon) nearby : null;
final L2PcInstance pl = summon == null ? (L2PcInstance) nearby : summon.getOwner();
if (((pl.getSiegeState() != 2) || pl.isRegisteredOnThisSiegeField(npc.getScriptValue())) && ((pl.getSiegeState() != 0) || (npc.getAI().getIntention() != CtrlIntention.AI_INTENTION_IDLE)))
{ {
final L2Summon summon = nearby.isSummon() ? (L2Summon) nearby : null; if (!pl.isInvisible() && !pl.isInvul()) // skip invisible players
final L2PcInstance pl = summon == null ? (L2PcInstance) nearby : summon.getOwner();
if (((pl.getSiegeState() != 2) || pl.isRegisteredOnThisSiegeField(npc.getScriptValue())) && ((pl.getSiegeState() != 0) || (npc.getAI().getIntention() != CtrlIntention.AI_INTENTION_IDLE)))
{ {
if (!pl.isInvisible() && !pl.isInvul()) // skip invisible players addAttackPlayerDesire(npc, pl);
{ break; // no need to search more
addAttackPlayerDesire(npc, pl);
break; // no need to search more
}
} }
} }
} }
} }
startQuestTimer("AGGRO_CHECK", 2000, npc, null);
} }
startQuestTimer("AGGRO_CHECK" + npc.getId(), 3000, npc, null);
} }
return super.onAdvEvent(event, npc, player); return super.onAdvEvent(event, npc, player);
} }
@@ -152,7 +149,7 @@ public class SiegeGuards extends AbstractNpcAI
final Castle castle = npc.getCastle(); final Castle castle = npc.getCastle();
final Fort fortress = npc.getFort(); final Fort fortress = npc.getFort();
npc.setScriptValue(fortress != null ? fortress.getResidenceId() : (castle != null ? castle.getResidenceId() : 0)); npc.setScriptValue(fortress != null ? fortress.getResidenceId() : (castle != null ? castle.getResidenceId() : 0));
startQuestTimer("AGGRO_CHECK", 2000, npc, null); startQuestTimer("AGGRO_CHECK" + npc.getId(), getRandom(1000, 10000), npc, null);
return super.onSpawn(npc); return super.onSpawn(npc);
} }

View File

@@ -100,32 +100,29 @@ public class SiegeGuards extends AbstractNpcAI
@Override @Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{ {
if (event.equals("AGGRO_CHECK")) if ((npc != null) && !npc.isDead())
{ {
if ((npc != null) && !npc.isDead()) final L2Object target = npc.getTarget();
if (!npc.isInCombat() || (target == null) || (npc.calculateDistance(target, false, false) > npc.getAggroRange()) || target.isInvul())
{ {
final L2Object target = npc.getTarget(); for (L2Character nearby : L2World.getInstance().getVisibleObjects(npc, L2Character.class, npc.getAggroRange()))
if (!npc.isInCombat() || (target == null) || (npc.calculateDistance(target, false, false) > npc.getAggroRange()) || target.isInvul())
{ {
for (L2Character nearby : L2World.getInstance().getVisibleObjects(npc, L2Character.class, npc.getAggroRange())) if (nearby.isPlayable() && GeoEngine.getInstance().canSeeTarget(npc, nearby))
{ {
if (nearby.isPlayable() && GeoEngine.getInstance().canSeeTarget(npc, nearby)) final L2Summon summon = nearby.isSummon() ? (L2Summon) nearby : null;
final L2PcInstance pl = summon == null ? (L2PcInstance) nearby : summon.getOwner();
if (((pl.getSiegeState() != 2) || pl.isRegisteredOnThisSiegeField(npc.getScriptValue())) && ((pl.getSiegeState() != 0) || (npc.getAI().getIntention() != CtrlIntention.AI_INTENTION_IDLE)))
{ {
final L2Summon summon = nearby.isSummon() ? (L2Summon) nearby : null; if (!pl.isInvisible() && !pl.isInvul()) // skip invisible players
final L2PcInstance pl = summon == null ? (L2PcInstance) nearby : summon.getOwner();
if (((pl.getSiegeState() != 2) || pl.isRegisteredOnThisSiegeField(npc.getScriptValue())) && ((pl.getSiegeState() != 0) || (npc.getAI().getIntention() != CtrlIntention.AI_INTENTION_IDLE)))
{ {
if (!pl.isInvisible() && !pl.isInvul()) // skip invisible players addAttackPlayerDesire(npc, pl);
{ break; // no need to search more
addAttackPlayerDesire(npc, pl);
break; // no need to search more
}
} }
} }
} }
} }
startQuestTimer("AGGRO_CHECK", 2000, npc, null);
} }
startQuestTimer("AGGRO_CHECK" + npc.getId(), 3000, npc, null);
} }
return super.onAdvEvent(event, npc, player); return super.onAdvEvent(event, npc, player);
} }
@@ -152,7 +149,7 @@ public class SiegeGuards extends AbstractNpcAI
final Castle castle = npc.getCastle(); final Castle castle = npc.getCastle();
final Fort fortress = npc.getFort(); final Fort fortress = npc.getFort();
npc.setScriptValue(fortress != null ? fortress.getResidenceId() : (castle != null ? castle.getResidenceId() : 0)); npc.setScriptValue(fortress != null ? fortress.getResidenceId() : (castle != null ? castle.getResidenceId() : 0));
startQuestTimer("AGGRO_CHECK", 2000, npc, null); startQuestTimer("AGGRO_CHECK" + npc.getId(), getRandom(1000, 10000), npc, null);
return super.onSpawn(npc); return super.onSpawn(npc);
} }

View File

@@ -100,32 +100,29 @@ public class SiegeGuards extends AbstractNpcAI
@Override @Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{ {
if (event.equals("AGGRO_CHECK")) if ((npc != null) && !npc.isDead())
{ {
if ((npc != null) && !npc.isDead()) final L2Object target = npc.getTarget();
if (!npc.isInCombat() || (target == null) || (npc.calculateDistance(target, false, false) > npc.getAggroRange()) || target.isInvul())
{ {
final L2Object target = npc.getTarget(); for (L2Character nearby : L2World.getInstance().getVisibleObjects(npc, L2Character.class, npc.getAggroRange()))
if (!npc.isInCombat() || (target == null) || (npc.calculateDistance(target, false, false) > npc.getAggroRange()) || target.isInvul())
{ {
for (L2Character nearby : L2World.getInstance().getVisibleObjects(npc, L2Character.class, npc.getAggroRange())) if (nearby.isPlayable() && GeoEngine.getInstance().canSeeTarget(npc, nearby))
{ {
if (nearby.isPlayable() && GeoEngine.getInstance().canSeeTarget(npc, nearby)) final L2Summon summon = nearby.isSummon() ? (L2Summon) nearby : null;
final L2PcInstance pl = summon == null ? (L2PcInstance) nearby : summon.getOwner();
if (((pl.getSiegeState() != 2) || pl.isRegisteredOnThisSiegeField(npc.getScriptValue())) && ((pl.getSiegeState() != 0) || (npc.getAI().getIntention() != CtrlIntention.AI_INTENTION_IDLE)))
{ {
final L2Summon summon = nearby.isSummon() ? (L2Summon) nearby : null; if (!pl.isInvisible() && !pl.isInvul()) // skip invisible players
final L2PcInstance pl = summon == null ? (L2PcInstance) nearby : summon.getOwner();
if (((pl.getSiegeState() != 2) || pl.isRegisteredOnThisSiegeField(npc.getScriptValue())) && ((pl.getSiegeState() != 0) || (npc.getAI().getIntention() != CtrlIntention.AI_INTENTION_IDLE)))
{ {
if (!pl.isInvisible() && !pl.isInvul()) // skip invisible players addAttackPlayerDesire(npc, pl);
{ break; // no need to search more
addAttackPlayerDesire(npc, pl);
break; // no need to search more
}
} }
} }
} }
} }
startQuestTimer("AGGRO_CHECK", 2000, npc, null);
} }
startQuestTimer("AGGRO_CHECK" + npc.getId(), 3000, npc, null);
} }
return super.onAdvEvent(event, npc, player); return super.onAdvEvent(event, npc, player);
} }
@@ -152,7 +149,7 @@ public class SiegeGuards extends AbstractNpcAI
final Castle castle = npc.getCastle(); final Castle castle = npc.getCastle();
final Fort fortress = npc.getFort(); final Fort fortress = npc.getFort();
npc.setScriptValue(fortress != null ? fortress.getResidenceId() : (castle != null ? castle.getResidenceId() : 0)); npc.setScriptValue(fortress != null ? fortress.getResidenceId() : (castle != null ? castle.getResidenceId() : 0));
startQuestTimer("AGGRO_CHECK", 2000, npc, null); startQuestTimer("AGGRO_CHECK" + npc.getId(), getRandom(1000, 10000), npc, null);
return super.onSpawn(npc); return super.onSpawn(npc);
} }

View File

@@ -74,32 +74,29 @@ public class SiegeGuards extends AbstractNpcAI
@Override @Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{ {
if (event.equals("AGGRO_CHECK")) if ((npc != null) && !npc.isDead())
{ {
if ((npc != null) && !npc.isDead()) final L2Object target = npc.getTarget();
if (!npc.isInCombat() || (target == null) || (npc.calculateDistance(target, false, false) > npc.getAggroRange()) || target.isInvul())
{ {
final L2Object target = npc.getTarget(); for (L2Character nearby : L2World.getInstance().getVisibleObjects(npc, L2Character.class, npc.getAggroRange()))
if (!npc.isInCombat() || (target == null) || (npc.calculateDistance(target, false, false) > npc.getAggroRange()) || target.isInvul())
{ {
for (L2Character nearby : L2World.getInstance().getVisibleObjects(npc, L2Character.class, npc.getAggroRange())) if (nearby.isPlayable() && GeoEngine.getInstance().canSeeTarget(npc, nearby))
{ {
if (nearby.isPlayable() && GeoEngine.getInstance().canSeeTarget(npc, nearby)) final L2Summon summon = nearby.isSummon() ? (L2Summon) nearby : null;
final L2PcInstance pl = summon == null ? (L2PcInstance) nearby : summon.getOwner();
if (((pl.getSiegeState() != 2) || pl.isRegisteredOnThisSiegeField(npc.getScriptValue())) && ((pl.getSiegeState() != 0) || (npc.getAI().getIntention() != CtrlIntention.AI_INTENTION_IDLE)))
{ {
final L2Summon summon = nearby.isSummon() ? (L2Summon) nearby : null; if (!pl.isInvisible() && !pl.isInvul()) // skip invisible players
final L2PcInstance pl = summon == null ? (L2PcInstance) nearby : summon.getOwner();
if (((pl.getSiegeState() != 2) || pl.isRegisteredOnThisSiegeField(npc.getScriptValue())) && ((pl.getSiegeState() != 0) || (npc.getAI().getIntention() != CtrlIntention.AI_INTENTION_IDLE)))
{ {
if (!pl.isInvisible() && !pl.isInvul()) // skip invisible players addAttackPlayerDesire(npc, pl);
{ break; // no need to search more
addAttackPlayerDesire(npc, pl);
break; // no need to search more
}
} }
} }
} }
} }
startQuestTimer("AGGRO_CHECK", 2000, npc, null);
} }
startQuestTimer("AGGRO_CHECK" + npc.getId(), 3000, npc, null);
} }
return super.onAdvEvent(event, npc, player); return super.onAdvEvent(event, npc, player);
} }
@@ -126,7 +123,7 @@ public class SiegeGuards extends AbstractNpcAI
final Castle castle = npc.getCastle(); final Castle castle = npc.getCastle();
final Fort fortress = npc.getFort(); final Fort fortress = npc.getFort();
npc.setScriptValue(fortress != null ? fortress.getResidenceId() : (castle != null ? castle.getResidenceId() : 0)); npc.setScriptValue(fortress != null ? fortress.getResidenceId() : (castle != null ? castle.getResidenceId() : 0));
startQuestTimer("AGGRO_CHECK", 2000, npc, null); startQuestTimer("AGGRO_CHECK" + npc.getId(), getRandom(1000, 10000), npc, null);
return super.onSpawn(npc); return super.onSpawn(npc);
} }