Fixed Wastelands guard AI.

Contributed by gigilo1968.
This commit is contained in:
MobiusDev
2018-04-22 16:53:41 +00:00
parent 939fd4c2c6
commit c901550188
4 changed files with 64 additions and 20 deletions

View File

@@ -54,6 +54,12 @@ public final class Wastelands extends AbstractNpcAI
private static final int SAKUM = 27453; private static final int SAKUM = 27453;
private static final int COMMANDO = 19126; private static final int COMMANDO = 19126;
private static final int COMMANDO_CAPTAIN = 19127; private static final int COMMANDO_CAPTAIN = 19127;
// Misc
private static final NpcStringId[] GUARD_SHOUT =
{
NpcStringId.ATTACK_2,
NpcStringId.FOLLOW_ME_3
};
// Locations // Locations
private static final Location GUARD_POSLOF_LOC = new Location(-29474, 187083, -3912); private static final Location GUARD_POSLOF_LOC = new Location(-29474, 187083, -3912);
private static final Location[] COMMANDO_SAKUM_LOC = private static final Location[] COMMANDO_SAKUM_LOC =
@@ -84,6 +90,7 @@ public final class Wastelands extends AbstractNpcAI
case "SOCIAL_SHOW": case "SOCIAL_SHOW":
{ {
npc.broadcastSocialAction(4); npc.broadcastSocialAction(4);
npc.broadcastSay(ChatType.NPC_GENERAL, GUARD_SHOUT[getRandom(2)], 1000);
L2World.getInstance().getVisibleObjects(npc, L2Npc.class, 500).stream().filter(n -> n.getId() == GUARD).forEach(guard -> L2World.getInstance().getVisibleObjects(npc, L2Npc.class, 500).stream().filter(n -> n.getId() == GUARD).forEach(guard ->
{ {
@@ -136,10 +143,16 @@ public final class Wastelands extends AbstractNpcAI
.orElse(null); .orElse(null);
//@formatter:on //@formatter:on
if ((monster != null) && !guard.isInCombat()) if (monster != null)
{ {
guard.reduceCurrentHp(1, monster, null); // TODO: Find better way for attack L2World.getInstance().forEachVisibleObjectInRange(guard, L2Npc.class, 1000, chars ->
monster.reduceCurrentHp(1, guard, null); {
if (chars.getId() == attackId)
{
addAttackDesire(guard, chars);
return;
}
});
if ((guard.getId() != COMMANDO) && (guard.getId() != COMMANDO_CAPTAIN)) if ((guard.getId() != COMMANDO) && (guard.getId() != COMMANDO_CAPTAIN))
{ {
@@ -158,8 +171,6 @@ public final class Wastelands extends AbstractNpcAI
if (decoGuard != null) if (decoGuard != null)
{ {
decoGuard.reduceCurrentHp(1, monster, null); // TODO: Find better way for attack
monster.reduceCurrentHp(1, decoGuard, null);
decoGuard.setIsInvul(true); decoGuard.setIsInvul(true);
} }
} }

View File

@@ -54,6 +54,12 @@ public final class Wastelands extends AbstractNpcAI
private static final int SAKUM = 27453; private static final int SAKUM = 27453;
private static final int COMMANDO = 19126; private static final int COMMANDO = 19126;
private static final int COMMANDO_CAPTAIN = 19127; private static final int COMMANDO_CAPTAIN = 19127;
// Misc
private static final NpcStringId[] GUARD_SHOUT =
{
NpcStringId.ATTACK_2,
NpcStringId.FOLLOW_ME_3
};
// Locations // Locations
private static final Location GUARD_POSLOF_LOC = new Location(-29474, 187083, -3912); private static final Location GUARD_POSLOF_LOC = new Location(-29474, 187083, -3912);
private static final Location[] COMMANDO_SAKUM_LOC = private static final Location[] COMMANDO_SAKUM_LOC =
@@ -84,6 +90,7 @@ public final class Wastelands extends AbstractNpcAI
case "SOCIAL_SHOW": case "SOCIAL_SHOW":
{ {
npc.broadcastSocialAction(4); npc.broadcastSocialAction(4);
npc.broadcastSay(ChatType.NPC_GENERAL, GUARD_SHOUT[getRandom(2)], 1000);
L2World.getInstance().getVisibleObjects(npc, L2Npc.class, 500).stream().filter(n -> n.getId() == GUARD).forEach(guard -> L2World.getInstance().getVisibleObjects(npc, L2Npc.class, 500).stream().filter(n -> n.getId() == GUARD).forEach(guard ->
{ {
@@ -136,10 +143,16 @@ public final class Wastelands extends AbstractNpcAI
.orElse(null); .orElse(null);
//@formatter:on //@formatter:on
if ((monster != null) && !guard.isInCombat()) if (monster != null)
{ {
guard.reduceCurrentHp(1, monster, null); // TODO: Find better way for attack L2World.getInstance().forEachVisibleObjectInRange(guard, L2Npc.class, 1000, chars ->
monster.reduceCurrentHp(1, guard, null); {
if (chars.getId() == attackId)
{
addAttackDesire(guard, chars);
return;
}
});
if ((guard.getId() != COMMANDO) && (guard.getId() != COMMANDO_CAPTAIN)) if ((guard.getId() != COMMANDO) && (guard.getId() != COMMANDO_CAPTAIN))
{ {
@@ -158,8 +171,6 @@ public final class Wastelands extends AbstractNpcAI
if (decoGuard != null) if (decoGuard != null)
{ {
decoGuard.reduceCurrentHp(1, monster, null); // TODO: Find better way for attack
monster.reduceCurrentHp(1, decoGuard, null);
decoGuard.setIsInvul(true); decoGuard.setIsInvul(true);
} }
} }

View File

@@ -54,6 +54,12 @@ public final class Wastelands extends AbstractNpcAI
private static final int SAKUM = 27453; private static final int SAKUM = 27453;
private static final int COMMANDO = 19126; private static final int COMMANDO = 19126;
private static final int COMMANDO_CAPTAIN = 19127; private static final int COMMANDO_CAPTAIN = 19127;
// Misc
private static final NpcStringId[] GUARD_SHOUT =
{
NpcStringId.ATTACK_2,
NpcStringId.FOLLOW_ME_3
};
// Locations // Locations
private static final Location GUARD_POSLOF_LOC = new Location(-29474, 187083, -3912); private static final Location GUARD_POSLOF_LOC = new Location(-29474, 187083, -3912);
private static final Location[] COMMANDO_SAKUM_LOC = private static final Location[] COMMANDO_SAKUM_LOC =
@@ -84,6 +90,7 @@ public final class Wastelands extends AbstractNpcAI
case "SOCIAL_SHOW": case "SOCIAL_SHOW":
{ {
npc.broadcastSocialAction(4); npc.broadcastSocialAction(4);
npc.broadcastSay(ChatType.NPC_GENERAL, GUARD_SHOUT[getRandom(2)], 1000);
L2World.getInstance().getVisibleObjects(npc, L2Npc.class, 500).stream().filter(n -> n.getId() == GUARD).forEach(guard -> L2World.getInstance().getVisibleObjects(npc, L2Npc.class, 500).stream().filter(n -> n.getId() == GUARD).forEach(guard ->
{ {
@@ -136,10 +143,16 @@ public final class Wastelands extends AbstractNpcAI
.orElse(null); .orElse(null);
//@formatter:on //@formatter:on
if ((monster != null) && !guard.isInCombat()) if (monster != null)
{ {
guard.reduceCurrentHp(1, monster, null); // TODO: Find better way for attack L2World.getInstance().forEachVisibleObjectInRange(guard, L2Npc.class, 1000, chars ->
monster.reduceCurrentHp(1, guard, null); {
if (chars.getId() == attackId)
{
addAttackDesire(guard, chars);
return;
}
});
if ((guard.getId() != COMMANDO) && (guard.getId() != COMMANDO_CAPTAIN)) if ((guard.getId() != COMMANDO) && (guard.getId() != COMMANDO_CAPTAIN))
{ {
@@ -158,8 +171,6 @@ public final class Wastelands extends AbstractNpcAI
if (decoGuard != null) if (decoGuard != null)
{ {
decoGuard.reduceCurrentHp(1, monster, null); // TODO: Find better way for attack
monster.reduceCurrentHp(1, decoGuard, null);
decoGuard.setIsInvul(true); decoGuard.setIsInvul(true);
} }
} }

View File

@@ -54,6 +54,12 @@ public final class Wastelands extends AbstractNpcAI
private static final int SAKUM = 27453; private static final int SAKUM = 27453;
private static final int COMMANDO = 19126; private static final int COMMANDO = 19126;
private static final int COMMANDO_CAPTAIN = 19127; private static final int COMMANDO_CAPTAIN = 19127;
// Misc
private static final NpcStringId[] GUARD_SHOUT =
{
NpcStringId.ATTACK_2,
NpcStringId.FOLLOW_ME_3
};
// Locations // Locations
private static final Location GUARD_POSLOF_LOC = new Location(-29474, 187083, -3912); private static final Location GUARD_POSLOF_LOC = new Location(-29474, 187083, -3912);
private static final Location[] COMMANDO_SAKUM_LOC = private static final Location[] COMMANDO_SAKUM_LOC =
@@ -84,6 +90,7 @@ public final class Wastelands extends AbstractNpcAI
case "SOCIAL_SHOW": case "SOCIAL_SHOW":
{ {
npc.broadcastSocialAction(4); npc.broadcastSocialAction(4);
npc.broadcastSay(ChatType.NPC_GENERAL, GUARD_SHOUT[getRandom(2)], 1000);
L2World.getInstance().getVisibleObjects(npc, L2Npc.class, 500).stream().filter(n -> n.getId() == GUARD).forEach(guard -> L2World.getInstance().getVisibleObjects(npc, L2Npc.class, 500).stream().filter(n -> n.getId() == GUARD).forEach(guard ->
{ {
@@ -136,10 +143,16 @@ public final class Wastelands extends AbstractNpcAI
.orElse(null); .orElse(null);
//@formatter:on //@formatter:on
if ((monster != null) && !guard.isInCombat()) if (monster != null)
{ {
guard.reduceCurrentHp(1, monster, null); // TODO: Find better way for attack L2World.getInstance().forEachVisibleObjectInRange(guard, L2Npc.class, 1000, chars ->
monster.reduceCurrentHp(1, guard, null); {
if (chars.getId() == attackId)
{
addAttackDesire(guard, chars);
return;
}
});
if ((guard.getId() != COMMANDO) && (guard.getId() != COMMANDO_CAPTAIN)) if ((guard.getId() != COMMANDO) && (guard.getId() != COMMANDO_CAPTAIN))
{ {
@@ -158,8 +171,6 @@ public final class Wastelands extends AbstractNpcAI
if (decoGuard != null) if (decoGuard != null)
{ {
decoGuard.reduceCurrentHp(1, monster, null); // TODO: Find better way for attack
monster.reduceCurrentHp(1, decoGuard, null);
decoGuard.setIsInvul(true); decoGuard.setIsInvul(true);
} }
} }