Etis Van Etina solo helper cleanup.

This commit is contained in:
MobiusDevelopment 2021-11-25 03:55:33 +00:00
parent d677831160
commit 6730cb9cb2
18 changed files with 258 additions and 351 deletions

View File

@ -87,6 +87,7 @@ public class EtinaHelperAliber extends AbstractNpcAI
292, // Fall of Etina (Solo)
293, // Fall of Etina (Solo)
};
//@formatter:on
private EtinaHelperAliber()
{
@ -108,7 +109,6 @@ public class EtinaHelperAliber extends AbstractNpcAI
{
final StatSet npcVars = npc.getVariables();
final Player plr = npcVars.getObject("PLAYER_OBJECT", Player.class);
final Monster monster = getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500));
if (plr != null)
{
final double distance = npc.calculateDistance2D(plr);
@ -132,7 +132,7 @@ public class EtinaHelperAliber extends AbstractNpcAI
WorldObject target = npc.getTarget();
if (target == null)
{
npc.setTarget(monster);
npc.setTarget(getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500)));
}
if ((target != null) && !target.isInvul() && target.isTargetable() && GeoEngine.getInstance().canSeeTarget(npc, target) && !CommonUtil.contains(NOT_ATK_NPCS, target.getId()) && !CommonUtil.contains(ETINA_HELPERS, target.getId()))
{
@ -149,18 +149,18 @@ public class EtinaHelperAliber extends AbstractNpcAI
}
case "DESTROY_BARRICADES":
{
final FriendlyNpc _aliber = (FriendlyNpc) instance.getNpc(ETINA_HELPER_ALIBER);
boolean BARRICADE_DESTROYED = instance.getParameters().getBoolean("BARRICADE_DESTROYED", false);
final FriendlyNpc aliber = (FriendlyNpc) instance.getNpc(ETINA_HELPER_ALIBER);
boolean destroyed = instance.getParameters().getBoolean("BARRICADE_DESTROYED", false);
if (!instance.getNpcsOfGroup("BARRICADES_1").isEmpty())
{
_aliber.setRunning();
_aliber.setInvul(true);
_aliber.setCanReturnToSpawnPoint(false);
_aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[0]);
if (_aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[0], 200) && !BARRICADE_DESTROYED)
aliber.setRunning();
aliber.setInvul(true);
aliber.setCanReturnToSpawnPoint(false);
aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[0]);
if (aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[0], 200) && !destroyed)
{
_aliber.broadcastPacket(new MagicSkillUse(_aliber, _aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
_aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
aliber.broadcastPacket(new MagicSkillUse(aliber, aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
instance.getNpcsOfGroup("BARRICADES_1").forEach(barricade ->
{
if (barricade != null)
@ -174,12 +174,12 @@ public class EtinaHelperAliber extends AbstractNpcAI
}
else if (!instance.getNpcsOfGroup("BARRICADES_2").isEmpty() && instance.getAliveNpcs(CORRIDOR_MOBS_1).isEmpty() && instance.getNpcsOfGroup("BARRICADES_1").isEmpty())
{
_aliber.setRunning();
_aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[1]);
if (_aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[1], 200) && !BARRICADE_DESTROYED)
aliber.setRunning();
aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[1]);
if (aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[1], 200) && !destroyed)
{
_aliber.broadcastPacket(new MagicSkillUse(_aliber, _aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
_aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
aliber.broadcastPacket(new MagicSkillUse(aliber, aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
instance.getNpcsOfGroup("BARRICADES_2").forEach(barricade ->
{
if (barricade != null)
@ -193,12 +193,12 @@ public class EtinaHelperAliber extends AbstractNpcAI
}
else if (!instance.getNpcsOfGroup("BARRICADES_3").isEmpty() && instance.getAliveNpcs(CORRIDOR_MOBS_2).isEmpty() && instance.getNpcsOfGroup("BARRICADES_2").isEmpty())
{
_aliber.setRunning();
_aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[2]);
if (_aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[2], 200) && !BARRICADE_DESTROYED)
aliber.setRunning();
aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[2]);
if (aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[2], 200) && !destroyed)
{
_aliber.broadcastPacket(new MagicSkillUse(_aliber, _aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
_aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
aliber.broadcastPacket(new MagicSkillUse(aliber, aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
instance.getNpcsOfGroup("BARRICADES_3").forEach(barricade ->
{
if (barricade != null)
@ -212,12 +212,12 @@ public class EtinaHelperAliber extends AbstractNpcAI
}
else if (!instance.getNpcsOfGroup("BARRICADES_4").isEmpty() && instance.getAliveNpcs(CORRIDOR_MOBS_3).isEmpty() && instance.getNpcsOfGroup("BARRICADES_3").isEmpty())
{
_aliber.setRunning();
_aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[3]);
if (_aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[3], 200) && !BARRICADE_DESTROYED)
aliber.setRunning();
aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[3]);
if (aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[3], 200) && !destroyed)
{
_aliber.broadcastPacket(new MagicSkillUse(_aliber, _aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
_aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
aliber.broadcastPacket(new MagicSkillUse(aliber, aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
instance.getNpcsOfGroup("BARRICADES_4").forEach(barricade ->
{
if (barricade != null)
@ -229,8 +229,8 @@ public class EtinaHelperAliber extends AbstractNpcAI
instance.despawnGroup("BARRICADES_4");
}
}
}
break;
}
}
}
}
@ -238,28 +238,22 @@ public class EtinaHelperAliber extends AbstractNpcAI
public void onCreatureAttacked(OnCreatureAttacked event)
{
final FriendlyNpc npc = (FriendlyNpc) event.getTarget();
if (npc != null)
if ((npc != null) && !npc.isInCombat())
{
final Instance instance = npc.getInstanceWorld();
if ((instance != null) && !event.getAttacker().isPlayable() && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
if ((instance != null) && !event.getAttacker().isPlayable() && (getRandom(50) < 5) && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
{
if (!npc.isInCombat())
{
if (getRandom(50) < 5)
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.RAGE_AGAINST_ALL_THAT_STANDS_IN_OUR_WAY);
}
}
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.RAGE_AGAINST_ALL_THAT_STANDS_IN_OUR_WAY);
}
}
}
public void onInstanceStatusChange(OnInstanceStatusChange event)
{
final Instance instance = event.getWorld();
final int status = event.getStatus();
if ((status == 1) || (status == 2) || (status == 3))
{
final Instance instance = event.getWorld();
instance.getAliveNpcs(ETINA_HELPER_ALIBER).forEach(etinaHelperAliber -> getTimers().addRepeatingTimer("CHECK_ACTION", 3000, etinaHelperAliber, null));
instance.getAliveNpcs(ETINA_HELPER_ALIBER).forEach(etinaHelperAliber -> getTimers().addRepeatingTimer("USE_SKILL", 6000, etinaHelperAliber, null));
instance.getAliveNpcs(ETINA_HELPER_ALIBER).forEach(etinaHelperAliber -> getTimers().addRepeatingTimer("DESTROY_BARRICADES", 5000, etinaHelperAliber, null));

View File

@ -85,7 +85,6 @@ public class EtinaHelperDevianne extends AbstractNpcAI
{
final StatSet npcVars = npc.getVariables();
final Player plr = npcVars.getObject("PLAYER_OBJECT", Player.class);
final Monster monster = getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500));
if (plr != null)
{
final double distance = npc.calculateDistance2D(plr);
@ -109,7 +108,7 @@ public class EtinaHelperDevianne extends AbstractNpcAI
WorldObject target = npc.getTarget();
if (target == null)
{
npc.setTarget(monster);
npc.setTarget(getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500)));
}
if ((target != null) && !target.isInvul() && target.isTargetable() && GeoEngine.getInstance().canSeeTarget(npc, target) && !CommonUtil.contains(NOT_ATK_NPCS, target.getId()) && !CommonUtil.contains(ETINA_HELPERS, target.getId()))
{
@ -127,29 +126,22 @@ public class EtinaHelperDevianne extends AbstractNpcAI
public void onCreatureAttacked(OnCreatureAttacked event)
{
final FriendlyNpc npc = (FriendlyNpc) event.getTarget();
if (npc != null)
if ((npc != null) && !npc.isInCombat())
{
final Instance instance = npc.getInstanceWorld();
if ((instance != null) && !event.getAttacker().isPlayable() && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
if ((instance != null) && !event.getAttacker().isPlayable() && (getRandom(50) < 5) && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
{
if (!npc.isInCombat())
{
if (getRandom(50) < 5)
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.BEHOLD_THE_POWER_OF_THE_IVORY_TOWER_WIZARDS);
}
}
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.BEHOLD_THE_POWER_OF_THE_IVORY_TOWER_WIZARDS);
}
}
}
public void onInstanceStatusChange(OnInstanceStatusChange event)
{
final Instance instance = event.getWorld();
final int status = event.getStatus();
if ((status == 1) || (status == 2) || (status == 3))
{
final Instance instance = event.getWorld();
instance.getAliveNpcs(ETINA_HELPER_DEVIANNE).forEach(etinaHelperDevianne -> getTimers().addRepeatingTimer("CHECK_ACTION", 3000, etinaHelperDevianne, null));
}
}

View File

@ -85,7 +85,6 @@ public class EtinaHelperElikia extends AbstractNpcAI
{
final StatSet npcVars = npc.getVariables();
final Player plr = npcVars.getObject("PLAYER_OBJECT", Player.class);
final Monster monster = getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500));
if (plr != null)
{
final double distance = npc.calculateDistance2D(plr);
@ -109,7 +108,7 @@ public class EtinaHelperElikia extends AbstractNpcAI
WorldObject target = npc.getTarget();
if (target == null)
{
npc.setTarget(monster);
npc.setTarget(getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500)));
}
if ((target != null) && !target.isInvul() && target.isTargetable() && GeoEngine.getInstance().canSeeTarget(npc, target) && !CommonUtil.contains(NOT_ATK_NPCS, target.getId()) && !CommonUtil.contains(ETINA_HELPERS, target.getId()))
{
@ -127,28 +126,22 @@ public class EtinaHelperElikia extends AbstractNpcAI
public void onCreatureAttacked(OnCreatureAttacked event)
{
final FriendlyNpc npc = (FriendlyNpc) event.getTarget();
if (npc != null)
if ((npc != null) && !npc.isInCombat())
{
final Instance instance = npc.getInstanceWorld();
if ((instance != null) && !event.getAttacker().isPlayable() && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
if ((instance != null) && !event.getAttacker().isPlayable() && (getRandom(50) < 5) && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
{
if (!npc.isInCombat())
{
if (getRandom(50) < 5)
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DON_T_GET_IN_MY_WAY);
}
}
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DON_T_GET_IN_MY_WAY);
}
}
}
public void onInstanceStatusChange(OnInstanceStatusChange event)
{
final Instance instance = event.getWorld();
final int status = event.getStatus();
if ((status == 1) || (status == 2) || (status == 3))
{
final Instance instance = event.getWorld();
instance.getAliveNpcs(ETINA_HELPER_ELIKIA).forEach(etinaHelperElikia -> getTimers().addRepeatingTimer("CHECK_ACTION", 3000, etinaHelperElikia, null));
}
}

View File

@ -90,7 +90,6 @@ public class EtinaHelperLeona extends AbstractNpcAI
{
final StatSet npcVars = npc.getVariables();
final Player plr = npcVars.getObject("PLAYER_OBJECT", Player.class);
final Monster monster = getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500));
if (plr != null)
{
final double distance = npc.calculateDistance2D(plr);
@ -114,7 +113,7 @@ public class EtinaHelperLeona extends AbstractNpcAI
WorldObject target = npc.getTarget();
if (target == null)
{
npc.setTarget(monster);
npc.setTarget(getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500)));
}
if ((target != null) && !target.isInvul() && target.isTargetable() && GeoEngine.getInstance().canSeeTarget(npc, target) && !CommonUtil.contains(NOT_ATK_NPCS, target.getId()) && !CommonUtil.contains(ETINA_HELPERS, target.getId()))
{
@ -133,42 +132,39 @@ public class EtinaHelperLeona extends AbstractNpcAI
{
final FriendlyNpc npc = (FriendlyNpc) event.getTarget();
final Npc attacker = (Npc) event.getAttacker();
if (npc != null)
if ((npc != null) && !npc.isInCombat())
{
final Instance instance = npc.getInstanceWorld();
if ((instance != null) && !event.getAttacker().isPlayable() && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
{
if (!npc.isInCombat())
switch (attacker.getId())
{
switch (attacker.getId())
case CAMILLE:
{
default:
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.GISELLE_NO_IS_SHE_CAMILLE_IN_THAT_STATE);
break;
}
case KAIN_VAN_HALTER:
{
break;
}
case ETIS_VAN_ETINA1:
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.EVEN_THE_MIGHTY_ETINA_SEEMS_TO_FEAR_US);
break;
}
case ETIS_VAN_ETINA2:
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.ETIS_VAN_ETINA_WE_FINALLY_MEET);
break;
}
default:
{
if (getRandom(50) < 5)
{
if (getRandom(50) < 5)
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DON_T_GET_IN_MY_WAY);
}
break;
}
case CAMILLE:
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.GISELLE_NO_IS_SHE_CAMILLE_IN_THAT_STATE);
break;
}
case KAIN_VAN_HALTER:
{
break;
}
case ETIS_VAN_ETINA1:
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.EVEN_THE_MIGHTY_ETINA_SEEMS_TO_FEAR_US);
break;
}
case ETIS_VAN_ETINA2:
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.ETIS_VAN_ETINA_WE_FINALLY_MEET);
break;
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DON_T_GET_IN_MY_WAY);
}
break;
}
}
}
@ -177,10 +173,10 @@ public class EtinaHelperLeona extends AbstractNpcAI
public void onInstanceStatusChange(OnInstanceStatusChange event)
{
final Instance instance = event.getWorld();
final int status = event.getStatus();
if ((status == 1) || (status == 2) || (status == 3))
{
final Instance instance = event.getWorld();
instance.getAliveNpcs(ETINA_HELPER_LEONA).forEach(etinaHelperLeona -> getTimers().addRepeatingTimer("CHECK_ACTION", 3000, etinaHelperLeona, null));
// instance.getAliveNpcs(ETINA_HELPER_LEONA).forEach(etinaHelperLeona -> getTimers().addRepeatingTimer("USE_SKILL", 6000, etinaHelperLeona, null));
}

View File

@ -85,7 +85,6 @@ public class EtinaHelperSporcha extends AbstractNpcAI
{
final StatSet npcVars = npc.getVariables();
final Player plr = npcVars.getObject("PLAYER_OBJECT", Player.class);
final Monster monster = getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500));
if (plr != null)
{
final double distance = npc.calculateDistance2D(plr);
@ -109,7 +108,7 @@ public class EtinaHelperSporcha extends AbstractNpcAI
WorldObject target = npc.getTarget();
if (target == null)
{
npc.setTarget(monster);
npc.setTarget(getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500)));
}
if ((target != null) && !target.isInvul() && target.isTargetable() && GeoEngine.getInstance().canSeeTarget(npc, target) && !CommonUtil.contains(NOT_ATK_NPCS, target.getId()) && !CommonUtil.contains(ETINA_HELPERS, target.getId()))
{
@ -127,28 +126,22 @@ public class EtinaHelperSporcha extends AbstractNpcAI
public void onCreatureAttacked(OnCreatureAttacked event)
{
final FriendlyNpc npc = (FriendlyNpc) event.getTarget();
if (npc != null)
if ((npc != null) && !npc.isInCombat())
{
final Instance instance = npc.getInstanceWorld();
if ((instance != null) && !event.getAttacker().isPlayable() && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
if ((instance != null) && !event.getAttacker().isPlayable() && (getRandom(50) < 5) && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
{
if (!npc.isInCombat())
{
if (getRandom(50) < 5)
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DON_T_GET_IN_MY_WAY);
}
}
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DON_T_GET_IN_MY_WAY);
}
}
}
public void onInstanceStatusChange(OnInstanceStatusChange event)
{
final Instance instance = event.getWorld();
final int status = event.getStatus();
if ((status == 1) || (status == 2) || (status == 3))
{
final Instance instance = event.getWorld();
instance.getAliveNpcs(ETINA_HELPER_SPORCHA).forEach(etinaHelperSporcha -> getTimers().addRepeatingTimer("CHECK_ACTION", 3000, etinaHelperSporcha, null));
}
}

View File

@ -479,20 +479,20 @@ public class EtisVanEtinaSolo extends AbstractInstance
final Instance world = attacker.getInstanceWorld();
if (isInInstance(world))
{
final boolean CAMILLE_30 = world.getParameters().getBoolean("CAMILLE_30", false);
final boolean CAMILLE_60 = world.getParameters().getBoolean("CAMILLE_60", false);
final boolean KAIN_30 = world.getParameters().getBoolean("KAIN_30", false);
final boolean KAIN_60 = world.getParameters().getBoolean("KAIN_60", false);
final boolean ETINA_80 = world.getParameters().getBoolean("ETINA_80", false);
final boolean ETINA_15 = world.getParameters().getBoolean("ETINA_15", false);
final boolean camille30 = world.getParameters().getBoolean("CAMILLE_30", false);
final boolean camille60 = world.getParameters().getBoolean("CAMILLE_60", false);
final boolean kain30 = world.getParameters().getBoolean("KAIN_30", false);
final boolean kain60 = world.getParameters().getBoolean("KAIN_60", false);
final boolean etina80 = world.getParameters().getBoolean("ETINA_80", false);
final boolean etina15 = world.getParameters().getBoolean("ETINA_15", false);
if (npc.getId() == CAMILLE)
{
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.3)) && !CAMILLE_30)
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.3)) && !camille30)
{
world.getParameters().set("CAMILLE_30", true);
world.spawnGroup("CAMILLE_MINIONS");
}
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.6)) && !CAMILLE_60)
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.6)) && !camille60)
{
world.getParameters().set("CAMILLE_60", true);
world.spawnGroup("CAMILLE_MINIONS");
@ -500,13 +500,13 @@ public class EtisVanEtinaSolo extends AbstractInstance
}
else if (npc.getId() == KAIN_VAN_HALTER)
{
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.3)) && !KAIN_30)
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.3)) && !kain30)
{
world.getParameters().set("KAIN_30", true);
showOnScreenMsg(world, NpcStringId.ETIS_VAN_ETINA_SUMMONS_HIS_APOSTLES_MINIONS, ExShowScreenMessage.TOP_CENTER, 7000, true);
world.spawnGroup("KAIN_MINIONS");
}
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.6)) && !KAIN_60)
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.6)) && !kain60)
{
world.getParameters().set("KAIN_60", true);
showOnScreenMsg(world, NpcStringId.ETIS_VAN_ETINA_SUMMONS_HIS_APOSTLES_MINIONS, ExShowScreenMessage.TOP_CENTER, 7000, true);
@ -515,7 +515,7 @@ public class EtisVanEtinaSolo extends AbstractInstance
}
else if ((npc.getId() == ETIS_VAN_ETINA1))
{
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.8)) && !ETINA_80)
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.8)) && !etina80)
{
final Npc etina1 = world.getNpc(ETIS_VAN_ETINA1);
world.getParameters().set("ETINA_80", true);
@ -532,7 +532,7 @@ public class EtisVanEtinaSolo extends AbstractInstance
startQuestTimer("calamityCastTimer", 120000, npc, attacker, true);
startQuestTimer("destructionCastTimer", 120000, npc, attacker, true);
}
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.15)) && !ETINA_15)
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.15)) && !etina15)
{
world.getParameters().set("ETINA_15", true);
world.spawnGroup("ETINA_MINIONS");
@ -704,6 +704,7 @@ public class EtisVanEtinaSolo extends AbstractInstance
break;
}
}
break;
}
}
}

View File

@ -87,6 +87,7 @@ public class EtinaHelperAliber extends AbstractNpcAI
292, // Fall of Etina (Solo)
293, // Fall of Etina (Solo)
};
//@formatter:on
private EtinaHelperAliber()
{
@ -108,7 +109,6 @@ public class EtinaHelperAliber extends AbstractNpcAI
{
final StatSet npcVars = npc.getVariables();
final Player plr = npcVars.getObject("PLAYER_OBJECT", Player.class);
final Monster monster = getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500));
if (plr != null)
{
final double distance = npc.calculateDistance2D(plr);
@ -132,7 +132,7 @@ public class EtinaHelperAliber extends AbstractNpcAI
WorldObject target = npc.getTarget();
if (target == null)
{
npc.setTarget(monster);
npc.setTarget(getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500)));
}
if ((target != null) && !target.isInvul() && target.isTargetable() && GeoEngine.getInstance().canSeeTarget(npc, target) && !CommonUtil.contains(NOT_ATK_NPCS, target.getId()) && !CommonUtil.contains(ETINA_HELPERS, target.getId()))
{
@ -149,18 +149,18 @@ public class EtinaHelperAliber extends AbstractNpcAI
}
case "DESTROY_BARRICADES":
{
final FriendlyNpc _aliber = (FriendlyNpc) instance.getNpc(ETINA_HELPER_ALIBER);
boolean BARRICADE_DESTROYED = instance.getParameters().getBoolean("BARRICADE_DESTROYED", false);
final FriendlyNpc aliber = (FriendlyNpc) instance.getNpc(ETINA_HELPER_ALIBER);
boolean destroyed = instance.getParameters().getBoolean("BARRICADE_DESTROYED", false);
if (!instance.getNpcsOfGroup("BARRICADES_1").isEmpty())
{
_aliber.setRunning();
_aliber.setInvul(true);
_aliber.setCanReturnToSpawnPoint(false);
_aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[0]);
if (_aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[0], 200) && !BARRICADE_DESTROYED)
aliber.setRunning();
aliber.setInvul(true);
aliber.setCanReturnToSpawnPoint(false);
aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[0]);
if (aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[0], 200) && !destroyed)
{
_aliber.broadcastPacket(new MagicSkillUse(_aliber, _aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
_aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
aliber.broadcastPacket(new MagicSkillUse(aliber, aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
instance.getNpcsOfGroup("BARRICADES_1").forEach(barricade ->
{
if (barricade != null)
@ -174,12 +174,12 @@ public class EtinaHelperAliber extends AbstractNpcAI
}
else if (!instance.getNpcsOfGroup("BARRICADES_2").isEmpty() && instance.getAliveNpcs(CORRIDOR_MOBS_1).isEmpty() && instance.getNpcsOfGroup("BARRICADES_1").isEmpty())
{
_aliber.setRunning();
_aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[1]);
if (_aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[1], 200) && !BARRICADE_DESTROYED)
aliber.setRunning();
aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[1]);
if (aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[1], 200) && !destroyed)
{
_aliber.broadcastPacket(new MagicSkillUse(_aliber, _aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
_aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
aliber.broadcastPacket(new MagicSkillUse(aliber, aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
instance.getNpcsOfGroup("BARRICADES_2").forEach(barricade ->
{
if (barricade != null)
@ -193,12 +193,12 @@ public class EtinaHelperAliber extends AbstractNpcAI
}
else if (!instance.getNpcsOfGroup("BARRICADES_3").isEmpty() && instance.getAliveNpcs(CORRIDOR_MOBS_2).isEmpty() && instance.getNpcsOfGroup("BARRICADES_2").isEmpty())
{
_aliber.setRunning();
_aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[2]);
if (_aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[2], 200) && !BARRICADE_DESTROYED)
aliber.setRunning();
aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[2]);
if (aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[2], 200) && !destroyed)
{
_aliber.broadcastPacket(new MagicSkillUse(_aliber, _aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
_aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
aliber.broadcastPacket(new MagicSkillUse(aliber, aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
instance.getNpcsOfGroup("BARRICADES_3").forEach(barricade ->
{
if (barricade != null)
@ -212,12 +212,12 @@ public class EtinaHelperAliber extends AbstractNpcAI
}
else if (!instance.getNpcsOfGroup("BARRICADES_4").isEmpty() && instance.getAliveNpcs(CORRIDOR_MOBS_3).isEmpty() && instance.getNpcsOfGroup("BARRICADES_3").isEmpty())
{
_aliber.setRunning();
_aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[3]);
if (_aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[3], 200) && !BARRICADE_DESTROYED)
aliber.setRunning();
aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[3]);
if (aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[3], 200) && !destroyed)
{
_aliber.broadcastPacket(new MagicSkillUse(_aliber, _aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
_aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
aliber.broadcastPacket(new MagicSkillUse(aliber, aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
instance.getNpcsOfGroup("BARRICADES_4").forEach(barricade ->
{
if (barricade != null)
@ -229,8 +229,8 @@ public class EtinaHelperAliber extends AbstractNpcAI
instance.despawnGroup("BARRICADES_4");
}
}
}
break;
}
}
}
}
@ -238,28 +238,22 @@ public class EtinaHelperAliber extends AbstractNpcAI
public void onCreatureAttacked(OnCreatureAttacked event)
{
final FriendlyNpc npc = (FriendlyNpc) event.getTarget();
if (npc != null)
if ((npc != null) && !npc.isInCombat())
{
final Instance instance = npc.getInstanceWorld();
if ((instance != null) && !event.getAttacker().isPlayable() && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
if ((instance != null) && !event.getAttacker().isPlayable() && (getRandom(50) < 5) && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
{
if (!npc.isInCombat())
{
if (getRandom(50) < 5)
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.RAGE_AGAINST_ALL_THAT_STANDS_IN_OUR_WAY);
}
}
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.RAGE_AGAINST_ALL_THAT_STANDS_IN_OUR_WAY);
}
}
}
public void onInstanceStatusChange(OnInstanceStatusChange event)
{
final Instance instance = event.getWorld();
final int status = event.getStatus();
if ((status == 1) || (status == 2) || (status == 3))
{
final Instance instance = event.getWorld();
instance.getAliveNpcs(ETINA_HELPER_ALIBER).forEach(etinaHelperAliber -> getTimers().addRepeatingTimer("CHECK_ACTION", 3000, etinaHelperAliber, null));
instance.getAliveNpcs(ETINA_HELPER_ALIBER).forEach(etinaHelperAliber -> getTimers().addRepeatingTimer("USE_SKILL", 6000, etinaHelperAliber, null));
instance.getAliveNpcs(ETINA_HELPER_ALIBER).forEach(etinaHelperAliber -> getTimers().addRepeatingTimer("DESTROY_BARRICADES", 5000, etinaHelperAliber, null));

View File

@ -85,7 +85,6 @@ public class EtinaHelperDevianne extends AbstractNpcAI
{
final StatSet npcVars = npc.getVariables();
final Player plr = npcVars.getObject("PLAYER_OBJECT", Player.class);
final Monster monster = getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500));
if (plr != null)
{
final double distance = npc.calculateDistance2D(plr);
@ -109,7 +108,7 @@ public class EtinaHelperDevianne extends AbstractNpcAI
WorldObject target = npc.getTarget();
if (target == null)
{
npc.setTarget(monster);
npc.setTarget(getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500)));
}
if ((target != null) && !target.isInvul() && target.isTargetable() && GeoEngine.getInstance().canSeeTarget(npc, target) && !CommonUtil.contains(NOT_ATK_NPCS, target.getId()) && !CommonUtil.contains(ETINA_HELPERS, target.getId()))
{
@ -127,29 +126,22 @@ public class EtinaHelperDevianne extends AbstractNpcAI
public void onCreatureAttacked(OnCreatureAttacked event)
{
final FriendlyNpc npc = (FriendlyNpc) event.getTarget();
if (npc != null)
if ((npc != null) && !npc.isInCombat())
{
final Instance instance = npc.getInstanceWorld();
if ((instance != null) && !event.getAttacker().isPlayable() && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
if ((instance != null) && !event.getAttacker().isPlayable() && (getRandom(50) < 5) && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
{
if (!npc.isInCombat())
{
if (getRandom(50) < 5)
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.BEHOLD_THE_POWER_OF_THE_IVORY_TOWER_WIZARDS);
}
}
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.BEHOLD_THE_POWER_OF_THE_IVORY_TOWER_WIZARDS);
}
}
}
public void onInstanceStatusChange(OnInstanceStatusChange event)
{
final Instance instance = event.getWorld();
final int status = event.getStatus();
if ((status == 1) || (status == 2) || (status == 3))
{
final Instance instance = event.getWorld();
instance.getAliveNpcs(ETINA_HELPER_DEVIANNE).forEach(etinaHelperDevianne -> getTimers().addRepeatingTimer("CHECK_ACTION", 3000, etinaHelperDevianne, null));
}
}

View File

@ -85,7 +85,6 @@ public class EtinaHelperElikia extends AbstractNpcAI
{
final StatSet npcVars = npc.getVariables();
final Player plr = npcVars.getObject("PLAYER_OBJECT", Player.class);
final Monster monster = getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500));
if (plr != null)
{
final double distance = npc.calculateDistance2D(plr);
@ -109,7 +108,7 @@ public class EtinaHelperElikia extends AbstractNpcAI
WorldObject target = npc.getTarget();
if (target == null)
{
npc.setTarget(monster);
npc.setTarget(getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500)));
}
if ((target != null) && !target.isInvul() && target.isTargetable() && GeoEngine.getInstance().canSeeTarget(npc, target) && !CommonUtil.contains(NOT_ATK_NPCS, target.getId()) && !CommonUtil.contains(ETINA_HELPERS, target.getId()))
{
@ -127,28 +126,22 @@ public class EtinaHelperElikia extends AbstractNpcAI
public void onCreatureAttacked(OnCreatureAttacked event)
{
final FriendlyNpc npc = (FriendlyNpc) event.getTarget();
if (npc != null)
if ((npc != null) && !npc.isInCombat())
{
final Instance instance = npc.getInstanceWorld();
if ((instance != null) && !event.getAttacker().isPlayable() && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
if ((instance != null) && !event.getAttacker().isPlayable() && (getRandom(50) < 5) && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
{
if (!npc.isInCombat())
{
if (getRandom(50) < 5)
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DON_T_GET_IN_MY_WAY);
}
}
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DON_T_GET_IN_MY_WAY);
}
}
}
public void onInstanceStatusChange(OnInstanceStatusChange event)
{
final Instance instance = event.getWorld();
final int status = event.getStatus();
if ((status == 1) || (status == 2) || (status == 3))
{
final Instance instance = event.getWorld();
instance.getAliveNpcs(ETINA_HELPER_ELIKIA).forEach(etinaHelperElikia -> getTimers().addRepeatingTimer("CHECK_ACTION", 3000, etinaHelperElikia, null));
}
}

View File

@ -90,7 +90,6 @@ public class EtinaHelperLeona extends AbstractNpcAI
{
final StatSet npcVars = npc.getVariables();
final Player plr = npcVars.getObject("PLAYER_OBJECT", Player.class);
final Monster monster = getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500));
if (plr != null)
{
final double distance = npc.calculateDistance2D(plr);
@ -114,7 +113,7 @@ public class EtinaHelperLeona extends AbstractNpcAI
WorldObject target = npc.getTarget();
if (target == null)
{
npc.setTarget(monster);
npc.setTarget(getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500)));
}
if ((target != null) && !target.isInvul() && target.isTargetable() && GeoEngine.getInstance().canSeeTarget(npc, target) && !CommonUtil.contains(NOT_ATK_NPCS, target.getId()) && !CommonUtil.contains(ETINA_HELPERS, target.getId()))
{
@ -133,42 +132,39 @@ public class EtinaHelperLeona extends AbstractNpcAI
{
final FriendlyNpc npc = (FriendlyNpc) event.getTarget();
final Npc attacker = (Npc) event.getAttacker();
if (npc != null)
if ((npc != null) && !npc.isInCombat())
{
final Instance instance = npc.getInstanceWorld();
if ((instance != null) && !event.getAttacker().isPlayable() && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
{
if (!npc.isInCombat())
switch (attacker.getId())
{
switch (attacker.getId())
case CAMILLE:
{
default:
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.GISELLE_NO_IS_SHE_CAMILLE_IN_THAT_STATE);
break;
}
case KAIN_VAN_HALTER:
{
break;
}
case ETIS_VAN_ETINA1:
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.EVEN_THE_MIGHTY_ETINA_SEEMS_TO_FEAR_US);
break;
}
case ETIS_VAN_ETINA2:
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.ETIS_VAN_ETINA_WE_FINALLY_MEET);
break;
}
default:
{
if (getRandom(50) < 5)
{
if (getRandom(50) < 5)
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DON_T_GET_IN_MY_WAY);
}
break;
}
case CAMILLE:
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.GISELLE_NO_IS_SHE_CAMILLE_IN_THAT_STATE);
break;
}
case KAIN_VAN_HALTER:
{
break;
}
case ETIS_VAN_ETINA1:
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.EVEN_THE_MIGHTY_ETINA_SEEMS_TO_FEAR_US);
break;
}
case ETIS_VAN_ETINA2:
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.ETIS_VAN_ETINA_WE_FINALLY_MEET);
break;
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DON_T_GET_IN_MY_WAY);
}
break;
}
}
}
@ -177,10 +173,10 @@ public class EtinaHelperLeona extends AbstractNpcAI
public void onInstanceStatusChange(OnInstanceStatusChange event)
{
final Instance instance = event.getWorld();
final int status = event.getStatus();
if ((status == 1) || (status == 2) || (status == 3))
{
final Instance instance = event.getWorld();
instance.getAliveNpcs(ETINA_HELPER_LEONA).forEach(etinaHelperLeona -> getTimers().addRepeatingTimer("CHECK_ACTION", 3000, etinaHelperLeona, null));
// instance.getAliveNpcs(ETINA_HELPER_LEONA).forEach(etinaHelperLeona -> getTimers().addRepeatingTimer("USE_SKILL", 6000, etinaHelperLeona, null));
}

View File

@ -85,7 +85,6 @@ public class EtinaHelperSporcha extends AbstractNpcAI
{
final StatSet npcVars = npc.getVariables();
final Player plr = npcVars.getObject("PLAYER_OBJECT", Player.class);
final Monster monster = getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500));
if (plr != null)
{
final double distance = npc.calculateDistance2D(plr);
@ -109,7 +108,7 @@ public class EtinaHelperSporcha extends AbstractNpcAI
WorldObject target = npc.getTarget();
if (target == null)
{
npc.setTarget(monster);
npc.setTarget(getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500)));
}
if ((target != null) && !target.isInvul() && target.isTargetable() && GeoEngine.getInstance().canSeeTarget(npc, target) && !CommonUtil.contains(NOT_ATK_NPCS, target.getId()) && !CommonUtil.contains(ETINA_HELPERS, target.getId()))
{
@ -127,28 +126,22 @@ public class EtinaHelperSporcha extends AbstractNpcAI
public void onCreatureAttacked(OnCreatureAttacked event)
{
final FriendlyNpc npc = (FriendlyNpc) event.getTarget();
if (npc != null)
if ((npc != null) && !npc.isInCombat())
{
final Instance instance = npc.getInstanceWorld();
if ((instance != null) && !event.getAttacker().isPlayable() && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
if ((instance != null) && !event.getAttacker().isPlayable() && (getRandom(50) < 5) && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
{
if (!npc.isInCombat())
{
if (getRandom(50) < 5)
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DON_T_GET_IN_MY_WAY);
}
}
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DON_T_GET_IN_MY_WAY);
}
}
}
public void onInstanceStatusChange(OnInstanceStatusChange event)
{
final Instance instance = event.getWorld();
final int status = event.getStatus();
if ((status == 1) || (status == 2) || (status == 3))
{
final Instance instance = event.getWorld();
instance.getAliveNpcs(ETINA_HELPER_SPORCHA).forEach(etinaHelperSporcha -> getTimers().addRepeatingTimer("CHECK_ACTION", 3000, etinaHelperSporcha, null));
}
}

View File

@ -479,20 +479,20 @@ public class EtisVanEtinaSolo extends AbstractInstance
final Instance world = attacker.getInstanceWorld();
if (isInInstance(world))
{
final boolean CAMILLE_30 = world.getParameters().getBoolean("CAMILLE_30", false);
final boolean CAMILLE_60 = world.getParameters().getBoolean("CAMILLE_60", false);
final boolean KAIN_30 = world.getParameters().getBoolean("KAIN_30", false);
final boolean KAIN_60 = world.getParameters().getBoolean("KAIN_60", false);
final boolean ETINA_80 = world.getParameters().getBoolean("ETINA_80", false);
final boolean ETINA_15 = world.getParameters().getBoolean("ETINA_15", false);
final boolean camille30 = world.getParameters().getBoolean("CAMILLE_30", false);
final boolean camille60 = world.getParameters().getBoolean("CAMILLE_60", false);
final boolean kain30 = world.getParameters().getBoolean("KAIN_30", false);
final boolean kain60 = world.getParameters().getBoolean("KAIN_60", false);
final boolean etina80 = world.getParameters().getBoolean("ETINA_80", false);
final boolean etina15 = world.getParameters().getBoolean("ETINA_15", false);
if (npc.getId() == CAMILLE)
{
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.3)) && !CAMILLE_30)
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.3)) && !camille30)
{
world.getParameters().set("CAMILLE_30", true);
world.spawnGroup("CAMILLE_MINIONS");
}
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.6)) && !CAMILLE_60)
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.6)) && !camille60)
{
world.getParameters().set("CAMILLE_60", true);
world.spawnGroup("CAMILLE_MINIONS");
@ -500,13 +500,13 @@ public class EtisVanEtinaSolo extends AbstractInstance
}
else if (npc.getId() == KAIN_VAN_HALTER)
{
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.3)) && !KAIN_30)
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.3)) && !kain30)
{
world.getParameters().set("KAIN_30", true);
showOnScreenMsg(world, NpcStringId.ETIS_VAN_ETINA_SUMMONS_HIS_APOSTLES_MINIONS, ExShowScreenMessage.TOP_CENTER, 7000, true);
world.spawnGroup("KAIN_MINIONS");
}
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.6)) && !KAIN_60)
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.6)) && !kain60)
{
world.getParameters().set("KAIN_60", true);
showOnScreenMsg(world, NpcStringId.ETIS_VAN_ETINA_SUMMONS_HIS_APOSTLES_MINIONS, ExShowScreenMessage.TOP_CENTER, 7000, true);
@ -515,7 +515,7 @@ public class EtisVanEtinaSolo extends AbstractInstance
}
else if ((npc.getId() == ETIS_VAN_ETINA1))
{
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.8)) && !ETINA_80)
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.8)) && !etina80)
{
final Npc etina1 = world.getNpc(ETIS_VAN_ETINA1);
world.getParameters().set("ETINA_80", true);
@ -532,7 +532,7 @@ public class EtisVanEtinaSolo extends AbstractInstance
startQuestTimer("calamityCastTimer", 120000, npc, attacker, true);
startQuestTimer("destructionCastTimer", 120000, npc, attacker, true);
}
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.15)) && !ETINA_15)
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.15)) && !etina15)
{
world.getParameters().set("ETINA_15", true);
world.spawnGroup("ETINA_MINIONS");
@ -704,6 +704,7 @@ public class EtisVanEtinaSolo extends AbstractInstance
break;
}
}
break;
}
}
}

View File

@ -87,6 +87,7 @@ public class EtinaHelperAliber extends AbstractNpcAI
292, // Fall of Etina (Solo)
293, // Fall of Etina (Solo)
};
//@formatter:on
private EtinaHelperAliber()
{
@ -108,7 +109,6 @@ public class EtinaHelperAliber extends AbstractNpcAI
{
final StatSet npcVars = npc.getVariables();
final Player plr = npcVars.getObject("PLAYER_OBJECT", Player.class);
final Monster monster = getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500));
if (plr != null)
{
final double distance = npc.calculateDistance2D(plr);
@ -132,7 +132,7 @@ public class EtinaHelperAliber extends AbstractNpcAI
WorldObject target = npc.getTarget();
if (target == null)
{
npc.setTarget(monster);
npc.setTarget(getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500)));
}
if ((target != null) && !target.isInvul() && target.isTargetable() && GeoEngine.getInstance().canSeeTarget(npc, target) && !CommonUtil.contains(NOT_ATK_NPCS, target.getId()) && !CommonUtil.contains(ETINA_HELPERS, target.getId()))
{
@ -149,18 +149,18 @@ public class EtinaHelperAliber extends AbstractNpcAI
}
case "DESTROY_BARRICADES":
{
final FriendlyNpc _aliber = (FriendlyNpc) instance.getNpc(ETINA_HELPER_ALIBER);
boolean BARRICADE_DESTROYED = instance.getParameters().getBoolean("BARRICADE_DESTROYED", false);
final FriendlyNpc aliber = (FriendlyNpc) instance.getNpc(ETINA_HELPER_ALIBER);
boolean destroyed = instance.getParameters().getBoolean("BARRICADE_DESTROYED", false);
if (!instance.getNpcsOfGroup("BARRICADES_1").isEmpty())
{
_aliber.setRunning();
_aliber.setInvul(true);
_aliber.setCanReturnToSpawnPoint(false);
_aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[0]);
if (_aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[0], 200) && !BARRICADE_DESTROYED)
aliber.setRunning();
aliber.setInvul(true);
aliber.setCanReturnToSpawnPoint(false);
aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[0]);
if (aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[0], 200) && !destroyed)
{
_aliber.broadcastPacket(new MagicSkillUse(_aliber, _aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
_aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
aliber.broadcastPacket(new MagicSkillUse(aliber, aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
instance.getNpcsOfGroup("BARRICADES_1").forEach(barricade ->
{
if (barricade != null)
@ -174,12 +174,12 @@ public class EtinaHelperAliber extends AbstractNpcAI
}
else if (!instance.getNpcsOfGroup("BARRICADES_2").isEmpty() && instance.getAliveNpcs(CORRIDOR_MOBS_1).isEmpty() && instance.getNpcsOfGroup("BARRICADES_1").isEmpty())
{
_aliber.setRunning();
_aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[1]);
if (_aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[1], 200) && !BARRICADE_DESTROYED)
aliber.setRunning();
aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[1]);
if (aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[1], 200) && !destroyed)
{
_aliber.broadcastPacket(new MagicSkillUse(_aliber, _aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
_aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
aliber.broadcastPacket(new MagicSkillUse(aliber, aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
instance.getNpcsOfGroup("BARRICADES_2").forEach(barricade ->
{
if (barricade != null)
@ -193,12 +193,12 @@ public class EtinaHelperAliber extends AbstractNpcAI
}
else if (!instance.getNpcsOfGroup("BARRICADES_3").isEmpty() && instance.getAliveNpcs(CORRIDOR_MOBS_2).isEmpty() && instance.getNpcsOfGroup("BARRICADES_2").isEmpty())
{
_aliber.setRunning();
_aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[2]);
if (_aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[2], 200) && !BARRICADE_DESTROYED)
aliber.setRunning();
aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[2]);
if (aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[2], 200) && !destroyed)
{
_aliber.broadcastPacket(new MagicSkillUse(_aliber, _aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
_aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
aliber.broadcastPacket(new MagicSkillUse(aliber, aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
instance.getNpcsOfGroup("BARRICADES_3").forEach(barricade ->
{
if (barricade != null)
@ -212,12 +212,12 @@ public class EtinaHelperAliber extends AbstractNpcAI
}
else if (!instance.getNpcsOfGroup("BARRICADES_4").isEmpty() && instance.getAliveNpcs(CORRIDOR_MOBS_3).isEmpty() && instance.getNpcsOfGroup("BARRICADES_3").isEmpty())
{
_aliber.setRunning();
_aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[3]);
if (_aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[3], 200) && !BARRICADE_DESTROYED)
aliber.setRunning();
aliber.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, SKILL_CAST_LOCATIONS[3]);
if (aliber.getLocation().isIn2DRadius(SKILL_CAST_LOCATIONS[3], 200) && !destroyed)
{
_aliber.broadcastPacket(new MagicSkillUse(_aliber, _aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
_aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
aliber.broadcastPacket(new MagicSkillUse(aliber, aliber, BARRICADE_DESTRUCTION.getSkillId(), 1, 500, 0));
aliber.broadcastPacket(new ExShowScreenMessage(NpcStringId.ALIBER_IS_CASTING_A_SPELL_TO_DESTROY_THE_BARRICADE, ExShowScreenMessage.TOP_CENTER, 7000, true));
instance.getNpcsOfGroup("BARRICADES_4").forEach(barricade ->
{
if (barricade != null)
@ -229,8 +229,8 @@ public class EtinaHelperAliber extends AbstractNpcAI
instance.despawnGroup("BARRICADES_4");
}
}
}
break;
}
}
}
}
@ -238,28 +238,22 @@ public class EtinaHelperAliber extends AbstractNpcAI
public void onCreatureAttacked(OnCreatureAttacked event)
{
final FriendlyNpc npc = (FriendlyNpc) event.getTarget();
if (npc != null)
if ((npc != null) && !npc.isInCombat())
{
final Instance instance = npc.getInstanceWorld();
if ((instance != null) && !event.getAttacker().isPlayable() && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
if ((instance != null) && !event.getAttacker().isPlayable() && (getRandom(50) < 5) && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
{
if (!npc.isInCombat())
{
if (getRandom(50) < 5)
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.RAGE_AGAINST_ALL_THAT_STANDS_IN_OUR_WAY);
}
}
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.RAGE_AGAINST_ALL_THAT_STANDS_IN_OUR_WAY);
}
}
}
public void onInstanceStatusChange(OnInstanceStatusChange event)
{
final Instance instance = event.getWorld();
final int status = event.getStatus();
if ((status == 1) || (status == 2) || (status == 3))
{
final Instance instance = event.getWorld();
instance.getAliveNpcs(ETINA_HELPER_ALIBER).forEach(etinaHelperAliber -> getTimers().addRepeatingTimer("CHECK_ACTION", 3000, etinaHelperAliber, null));
instance.getAliveNpcs(ETINA_HELPER_ALIBER).forEach(etinaHelperAliber -> getTimers().addRepeatingTimer("USE_SKILL", 6000, etinaHelperAliber, null));
instance.getAliveNpcs(ETINA_HELPER_ALIBER).forEach(etinaHelperAliber -> getTimers().addRepeatingTimer("DESTROY_BARRICADES", 5000, etinaHelperAliber, null));

View File

@ -85,7 +85,6 @@ public class EtinaHelperDevianne extends AbstractNpcAI
{
final StatSet npcVars = npc.getVariables();
final Player plr = npcVars.getObject("PLAYER_OBJECT", Player.class);
final Monster monster = getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500));
if (plr != null)
{
final double distance = npc.calculateDistance2D(plr);
@ -109,7 +108,7 @@ public class EtinaHelperDevianne extends AbstractNpcAI
WorldObject target = npc.getTarget();
if (target == null)
{
npc.setTarget(monster);
npc.setTarget(getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500)));
}
if ((target != null) && !target.isInvul() && target.isTargetable() && GeoEngine.getInstance().canSeeTarget(npc, target) && !CommonUtil.contains(NOT_ATK_NPCS, target.getId()) && !CommonUtil.contains(ETINA_HELPERS, target.getId()))
{
@ -127,29 +126,22 @@ public class EtinaHelperDevianne extends AbstractNpcAI
public void onCreatureAttacked(OnCreatureAttacked event)
{
final FriendlyNpc npc = (FriendlyNpc) event.getTarget();
if (npc != null)
if ((npc != null) && !npc.isInCombat())
{
final Instance instance = npc.getInstanceWorld();
if ((instance != null) && !event.getAttacker().isPlayable() && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
if ((instance != null) && !event.getAttacker().isPlayable() && (getRandom(50) < 5) && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
{
if (!npc.isInCombat())
{
if (getRandom(50) < 5)
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.BEHOLD_THE_POWER_OF_THE_IVORY_TOWER_WIZARDS);
}
}
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.BEHOLD_THE_POWER_OF_THE_IVORY_TOWER_WIZARDS);
}
}
}
public void onInstanceStatusChange(OnInstanceStatusChange event)
{
final Instance instance = event.getWorld();
final int status = event.getStatus();
if ((status == 1) || (status == 2) || (status == 3))
{
final Instance instance = event.getWorld();
instance.getAliveNpcs(ETINA_HELPER_DEVIANNE).forEach(etinaHelperDevianne -> getTimers().addRepeatingTimer("CHECK_ACTION", 3000, etinaHelperDevianne, null));
}
}

View File

@ -85,7 +85,6 @@ public class EtinaHelperElikia extends AbstractNpcAI
{
final StatSet npcVars = npc.getVariables();
final Player plr = npcVars.getObject("PLAYER_OBJECT", Player.class);
final Monster monster = getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500));
if (plr != null)
{
final double distance = npc.calculateDistance2D(plr);
@ -109,7 +108,7 @@ public class EtinaHelperElikia extends AbstractNpcAI
WorldObject target = npc.getTarget();
if (target == null)
{
npc.setTarget(monster);
npc.setTarget(getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500)));
}
if ((target != null) && !target.isInvul() && target.isTargetable() && GeoEngine.getInstance().canSeeTarget(npc, target) && !CommonUtil.contains(NOT_ATK_NPCS, target.getId()) && !CommonUtil.contains(ETINA_HELPERS, target.getId()))
{
@ -127,28 +126,22 @@ public class EtinaHelperElikia extends AbstractNpcAI
public void onCreatureAttacked(OnCreatureAttacked event)
{
final FriendlyNpc npc = (FriendlyNpc) event.getTarget();
if (npc != null)
if ((npc != null) && !npc.isInCombat())
{
final Instance instance = npc.getInstanceWorld();
if ((instance != null) && !event.getAttacker().isPlayable() && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
if ((instance != null) && !event.getAttacker().isPlayable() && (getRandom(50) < 5) && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
{
if (!npc.isInCombat())
{
if (getRandom(50) < 5)
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DON_T_GET_IN_MY_WAY);
}
}
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DON_T_GET_IN_MY_WAY);
}
}
}
public void onInstanceStatusChange(OnInstanceStatusChange event)
{
final Instance instance = event.getWorld();
final int status = event.getStatus();
if ((status == 1) || (status == 2) || (status == 3))
{
final Instance instance = event.getWorld();
instance.getAliveNpcs(ETINA_HELPER_ELIKIA).forEach(etinaHelperElikia -> getTimers().addRepeatingTimer("CHECK_ACTION", 3000, etinaHelperElikia, null));
}
}

View File

@ -90,7 +90,6 @@ public class EtinaHelperLeona extends AbstractNpcAI
{
final StatSet npcVars = npc.getVariables();
final Player plr = npcVars.getObject("PLAYER_OBJECT", Player.class);
final Monster monster = getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500));
if (plr != null)
{
final double distance = npc.calculateDistance2D(plr);
@ -114,7 +113,7 @@ public class EtinaHelperLeona extends AbstractNpcAI
WorldObject target = npc.getTarget();
if (target == null)
{
npc.setTarget(monster);
npc.setTarget(getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500)));
}
if ((target != null) && !target.isInvul() && target.isTargetable() && GeoEngine.getInstance().canSeeTarget(npc, target) && !CommonUtil.contains(NOT_ATK_NPCS, target.getId()) && !CommonUtil.contains(ETINA_HELPERS, target.getId()))
{
@ -133,42 +132,39 @@ public class EtinaHelperLeona extends AbstractNpcAI
{
final FriendlyNpc npc = (FriendlyNpc) event.getTarget();
final Npc attacker = (Npc) event.getAttacker();
if (npc != null)
if ((npc != null) && !npc.isInCombat())
{
final Instance instance = npc.getInstanceWorld();
if ((instance != null) && !event.getAttacker().isPlayable() && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
{
if (!npc.isInCombat())
switch (attacker.getId())
{
switch (attacker.getId())
case CAMILLE:
{
default:
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.GISELLE_NO_IS_SHE_CAMILLE_IN_THAT_STATE);
break;
}
case KAIN_VAN_HALTER:
{
break;
}
case ETIS_VAN_ETINA1:
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.EVEN_THE_MIGHTY_ETINA_SEEMS_TO_FEAR_US);
break;
}
case ETIS_VAN_ETINA2:
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.ETIS_VAN_ETINA_WE_FINALLY_MEET);
break;
}
default:
{
if (getRandom(50) < 5)
{
if (getRandom(50) < 5)
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DON_T_GET_IN_MY_WAY);
}
break;
}
case CAMILLE:
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.GISELLE_NO_IS_SHE_CAMILLE_IN_THAT_STATE);
break;
}
case KAIN_VAN_HALTER:
{
break;
}
case ETIS_VAN_ETINA1:
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.EVEN_THE_MIGHTY_ETINA_SEEMS_TO_FEAR_US);
break;
}
case ETIS_VAN_ETINA2:
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.ETIS_VAN_ETINA_WE_FINALLY_MEET);
break;
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DON_T_GET_IN_MY_WAY);
}
break;
}
}
}
@ -177,10 +173,10 @@ public class EtinaHelperLeona extends AbstractNpcAI
public void onInstanceStatusChange(OnInstanceStatusChange event)
{
final Instance instance = event.getWorld();
final int status = event.getStatus();
if ((status == 1) || (status == 2) || (status == 3))
{
final Instance instance = event.getWorld();
instance.getAliveNpcs(ETINA_HELPER_LEONA).forEach(etinaHelperLeona -> getTimers().addRepeatingTimer("CHECK_ACTION", 3000, etinaHelperLeona, null));
// instance.getAliveNpcs(ETINA_HELPER_LEONA).forEach(etinaHelperLeona -> getTimers().addRepeatingTimer("USE_SKILL", 6000, etinaHelperLeona, null));
}

View File

@ -85,7 +85,6 @@ public class EtinaHelperSporcha extends AbstractNpcAI
{
final StatSet npcVars = npc.getVariables();
final Player plr = npcVars.getObject("PLAYER_OBJECT", Player.class);
final Monster monster = getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500));
if (plr != null)
{
final double distance = npc.calculateDistance2D(plr);
@ -109,7 +108,7 @@ public class EtinaHelperSporcha extends AbstractNpcAI
WorldObject target = npc.getTarget();
if (target == null)
{
npc.setTarget(monster);
npc.setTarget(getRandomEntry(World.getInstance().getVisibleObjectsInRange(npc, Monster.class, 2500)));
}
if ((target != null) && !target.isInvul() && target.isTargetable() && GeoEngine.getInstance().canSeeTarget(npc, target) && !CommonUtil.contains(NOT_ATK_NPCS, target.getId()) && !CommonUtil.contains(ETINA_HELPERS, target.getId()))
{
@ -127,28 +126,22 @@ public class EtinaHelperSporcha extends AbstractNpcAI
public void onCreatureAttacked(OnCreatureAttacked event)
{
final FriendlyNpc npc = (FriendlyNpc) event.getTarget();
if (npc != null)
if ((npc != null) && !npc.isInCombat())
{
final Instance instance = npc.getInstanceWorld();
if ((instance != null) && !event.getAttacker().isPlayable() && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
if ((instance != null) && !event.getAttacker().isPlayable() && (getRandom(50) < 5) && !CommonUtil.contains(ETINA_HELPERS, event.getAttacker().getId()))
{
if (!npc.isInCombat())
{
if (getRandom(50) < 5)
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DON_T_GET_IN_MY_WAY);
}
}
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DON_T_GET_IN_MY_WAY);
}
}
}
public void onInstanceStatusChange(OnInstanceStatusChange event)
{
final Instance instance = event.getWorld();
final int status = event.getStatus();
if ((status == 1) || (status == 2) || (status == 3))
{
final Instance instance = event.getWorld();
instance.getAliveNpcs(ETINA_HELPER_SPORCHA).forEach(etinaHelperSporcha -> getTimers().addRepeatingTimer("CHECK_ACTION", 3000, etinaHelperSporcha, null));
}
}

View File

@ -479,20 +479,20 @@ public class EtisVanEtinaSolo extends AbstractInstance
final Instance world = attacker.getInstanceWorld();
if (isInInstance(world))
{
final boolean CAMILLE_30 = world.getParameters().getBoolean("CAMILLE_30", false);
final boolean CAMILLE_60 = world.getParameters().getBoolean("CAMILLE_60", false);
final boolean KAIN_30 = world.getParameters().getBoolean("KAIN_30", false);
final boolean KAIN_60 = world.getParameters().getBoolean("KAIN_60", false);
final boolean ETINA_80 = world.getParameters().getBoolean("ETINA_80", false);
final boolean ETINA_15 = world.getParameters().getBoolean("ETINA_15", false);
final boolean camille30 = world.getParameters().getBoolean("CAMILLE_30", false);
final boolean camille60 = world.getParameters().getBoolean("CAMILLE_60", false);
final boolean kain30 = world.getParameters().getBoolean("KAIN_30", false);
final boolean kain60 = world.getParameters().getBoolean("KAIN_60", false);
final boolean etina80 = world.getParameters().getBoolean("ETINA_80", false);
final boolean etina15 = world.getParameters().getBoolean("ETINA_15", false);
if (npc.getId() == CAMILLE)
{
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.3)) && !CAMILLE_30)
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.3)) && !camille30)
{
world.getParameters().set("CAMILLE_30", true);
world.spawnGroup("CAMILLE_MINIONS");
}
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.6)) && !CAMILLE_60)
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.6)) && !camille60)
{
world.getParameters().set("CAMILLE_60", true);
world.spawnGroup("CAMILLE_MINIONS");
@ -500,13 +500,13 @@ public class EtisVanEtinaSolo extends AbstractInstance
}
else if (npc.getId() == KAIN_VAN_HALTER)
{
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.3)) && !KAIN_30)
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.3)) && !kain30)
{
world.getParameters().set("KAIN_30", true);
showOnScreenMsg(world, NpcStringId.ETIS_VAN_ETINA_SUMMONS_HIS_APOSTLES_MINIONS, ExShowScreenMessage.TOP_CENTER, 7000, true);
world.spawnGroup("KAIN_MINIONS");
}
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.6)) && !KAIN_60)
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.6)) && !kain60)
{
world.getParameters().set("KAIN_60", true);
showOnScreenMsg(world, NpcStringId.ETIS_VAN_ETINA_SUMMONS_HIS_APOSTLES_MINIONS, ExShowScreenMessage.TOP_CENTER, 7000, true);
@ -515,7 +515,7 @@ public class EtisVanEtinaSolo extends AbstractInstance
}
else if ((npc.getId() == ETIS_VAN_ETINA1))
{
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.8)) && !ETINA_80)
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.8)) && !etina80)
{
final Npc etina1 = world.getNpc(ETIS_VAN_ETINA1);
world.getParameters().set("ETINA_80", true);
@ -532,7 +532,7 @@ public class EtisVanEtinaSolo extends AbstractInstance
startQuestTimer("calamityCastTimer", 120000, npc, attacker, true);
startQuestTimer("destructionCastTimer", 120000, npc, attacker, true);
}
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.15)) && !ETINA_15)
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.15)) && !etina15)
{
world.getParameters().set("ETINA_15", true);
world.spawnGroup("ETINA_MINIONS");
@ -704,6 +704,7 @@ public class EtisVanEtinaSolo extends AbstractInstance
break;
}
}
break;
}
}
}