Boss related script cleanups.

This commit is contained in:
MobiusDevelopment
2022-01-31 05:43:13 +00:00
parent 3bf00c88bf
commit f43491f64f
179 changed files with 3171 additions and 3794 deletions

View File

@@ -40,9 +40,9 @@ public class Anais extends AbstractNpcAI
private static final int DIVINE_BURNER = 18915;
private static final int GRAIL_WARD = 18929;
// Skill
private static SkillHolder DIVINE_NOVA = new SkillHolder(6326, 1);
private static final SkillHolder DIVINE_NOVA = new SkillHolder(6326, 1);
// Instances
ArrayList<Npc> _divineBurners = new ArrayList<>(4);
private final ArrayList<Npc> _divineBurners = new ArrayList<>(4);
private Player _nextTarget = null;
private Npc _current = null;
private int _pot = 0;

View File

@@ -76,10 +76,8 @@ public class Core extends AbstractNpcAI
// Misc
private static final byte ALIVE = 0;
private static final byte DEAD = 1;
private static boolean _firstAttacked;
private static final Collection<Attackable> _minions = ConcurrentHashMap.newKeySet();
private static boolean _firstAttacked;
private Core()
{

View File

@@ -50,7 +50,7 @@ public class IceQueensCastle extends AbstractInstance
// Locations
private static final Location FREYA_LOC = new Location(114730, -114805, -11200, 50);
// Skill
private static SkillHolder ETHERNAL_BLIZZARD = new SkillHolder(6276, 1);
private static final SkillHolder ETHERNAL_BLIZZARD = new SkillHolder(6276, 1);
// Misc
private static final int TEMPLATE_ID = 137;

View File

@@ -1112,12 +1112,12 @@ public class IceQueensCastleBattle extends AbstractInstance
case KNIGHT_HARD:
{
final Npc spawnedBy = npc.getVariables().getObject("SPAWNED_NPC", Npc.class);
final NpcVariables var = controller.getVariables();
int knightCount = var.getInt("KNIGHT_COUNT");
final NpcVariables vars = controller.getVariables();
int knightCount = vars.getInt("KNIGHT_COUNT");
if ((var.getInt("FREYA_MOVE") == 0) && world.isStatus(1))
if ((vars.getInt("FREYA_MOVE") == 0) && world.isStatus(1))
{
var.set("FREYA_MOVE", 1);
vars.set("FREYA_MOVE", 1);
final Npc freya = params.getObject("freya", Npc.class);
if (!freya.isInCombat())
{
@@ -1130,7 +1130,7 @@ public class IceQueensCastleBattle extends AbstractInstance
if ((knightCount < 10) && (world.isStatus(2)))
{
knightCount++;
var.set("KNIGHT_COUNT", knightCount);
vars.set("KNIGHT_COUNT", knightCount);
if (knightCount == 10)
{

View File

@@ -825,12 +825,13 @@ public class LastImperialTomb extends AbstractInstance
private void playRandomSong(Instance world)
{
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
final boolean isPlayingSong = world.getParameters().getBoolean("isPlayingSong");
if (isPlayingSong)
{
return;
}
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
world.setParameter("isPlayingSong", true);
final int random = getRandom(1, 5);
final SkillHolder skill = new SkillHolder(5007, random);

View File

@@ -67,7 +67,7 @@ public class ScarletVanHalisha extends AbstractNpcAI
{
switch (event)
{
case "attack":
case "ATTACK":
{
if (npc != null)
{
@@ -75,7 +75,7 @@ public class ScarletVanHalisha extends AbstractNpcAI
}
break;
}
case "random_target":
case "RANDOM_TARGET":
{
_target = getRandomTarget(npc, null);
break;
@@ -94,16 +94,16 @@ public class ScarletVanHalisha extends AbstractNpcAI
@Override
public String onAttack(Npc npc, Player attacker, int damage, boolean isSummon)
{
startQuestTimer("random_Target", 5000, npc, null, true);
startQuestTimer("attack", 500, npc, null, true);
startQuestTimer("RANDOM_TARGET", 5000, npc, null, true);
startQuestTimer("ATTACK", 500, npc, null, true);
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(Npc npc, Player killer, boolean isSummon)
{
cancelQuestTimer("attack", npc, null);
cancelQuestTimer("random_Target", npc, null);
cancelQuestTimers("ATTACK");
cancelQuestTimers("RANDOM_TARGET");
return super.onKill(npc, killer, isSummon);
}
@@ -171,12 +171,12 @@ public class ScarletVanHalisha extends AbstractNpcAI
{
return;
}
if ((getRandom(100) < 30) || (_target == null) || _target.isDead())
{
_skill = getRndSkills(npc);
_target = getRandomTarget(npc, _skill);
}
final Creature target = _target;
Skill skill = _skill;
if (skill == null)
{
@@ -188,6 +188,7 @@ public class ScarletVanHalisha extends AbstractNpcAI
return;
}
final Creature target = _target;
if ((target == null) || target.isDead())
{
// npc.setCastingNow(false);
@@ -213,52 +214,50 @@ public class ScarletVanHalisha extends AbstractNpcAI
private Creature getRandomTarget(Npc npc, Skill skill)
{
final List<Creature> result = new ArrayList<>();
for (Player obj : npc.getInstanceWorld().getPlayers())
{
for (Player obj : npc.getInstanceWorld().getPlayers())
if (obj.isPlayer() && obj.getActingPlayer().isInvisible())
{
if (obj.isPlayer() && obj.getActingPlayer().isInvisible())
continue;
}
if (((obj.getZ() < (npc.getZ() - 100)) && (obj.getZ() > (npc.getZ() + 100))) || !GeoEngine.getInstance().canSeeTarget(obj, npc))
{
continue;
}
int skillRange = 150;
if (skill != null)
{
switch (skill.getId())
{
continue;
case FRINTEZZA_DAEMON_ATTACK:
{
skillRange = 150;
break;
}
case FRINTEZZA_DAEMON_CHARGE:
{
skillRange = 400;
break;
}
case YOKE_OF_SCARLET:
{
skillRange = 200;
break;
}
case FRINTEZZA_DAEMON_MORPH:
case FRINTEZZA_DAEMON_FIELD:
{
_lastRangedSkillTime = Chronos.currentTimeMillis();
skillRange = 550;
break;
}
}
if (((obj.getZ() < (npc.getZ() - 100)) && (obj.getZ() > (npc.getZ() + 100))) || !GeoEngine.getInstance().canSeeTarget(obj, npc))
if (Util.checkIfInRange(skillRange, npc, obj, true) && !((Creature) obj).isDead())
{
continue;
}
int skillRange = 150;
if (skill != null)
{
switch (skill.getId())
{
case FRINTEZZA_DAEMON_ATTACK:
{
skillRange = 150;
break;
}
case FRINTEZZA_DAEMON_CHARGE:
{
skillRange = 400;
break;
}
case YOKE_OF_SCARLET:
{
skillRange = 200;
break;
}
case FRINTEZZA_DAEMON_MORPH:
case FRINTEZZA_DAEMON_FIELD:
{
_lastRangedSkillTime = Chronos.currentTimeMillis();
skillRange = 550;
break;
}
}
if (Util.checkIfInRange(skillRange, npc, obj, true) && !((Creature) obj).isDead())
{
result.add(obj);
}
result.add(obj);
}
}
}

View File

@@ -122,18 +122,18 @@ public class Helios extends AbstractNpcAI
}
// Misc
private static final int HELIOS_RAID_DURATION = 5; // hours
private static Npc bossInstance;
private final NoSummonFriendZone bossZone;
private static Npc _bossInstance;
private final NoSummonFriendZone _bossZone;
private GrandBoss _tempHelios;
private static List<Npc> _minionSpawns = new ArrayList<>();
private static Npc blueLightning;
private static Npc redLightning;
private static Npc leopold;
private boolean activated = false;
private boolean stage1_50 = false;
private boolean stage2_50 = false;
private boolean helios80 = false;
private boolean helios50 = false;
private static Npc _blueLightning;
private static Npc _redLightning;
private static Npc _leopold;
private boolean _activated = false;
private boolean _stage1 = false;
private boolean _stage2 = false;
private boolean _helios80 = false;
private boolean _helios50 = false;
private boolean _announce = false;
protected ScheduledFuture<?> _blueSpearTask;
protected ScheduledFuture<?> _redSpearTask;
@@ -145,7 +145,7 @@ public class Helios extends AbstractNpcAI
addAttackId(HELIOS1, HELIOS2, HELIOS3);
addKillId(HELIOS1, HELIOS2, HELIOS3, MIMILLION, MIMILLUS);
// Zone
bossZone = ZoneManager.getInstance().getZoneById(ZONE_ID, NoSummonFriendZone.class);
_bossZone = ZoneManager.getInstance().getZoneById(ZONE_ID, NoSummonFriendZone.class);
// Unlock
final StatSet info = GrandBossManager.getInstance().getStatSet(HELIOS3);
final int status = GrandBossManager.getInstance().getBossStatus(HELIOS3);
@@ -177,151 +177,145 @@ public class Helios extends AbstractNpcAI
if ((npc.getId() == HELIOS1) && !_announce)
{
_announce = true;
_debuffTask = ThreadPool.scheduleAtFixedRate(() ->
{
bossZone.getPlayersInside().forEach(player ->
{
AUDIENCE_DEBUFF.getSkill().applyEffects(player, player);
});
}, 5000, 20000);
_debuffTask = ThreadPool.scheduleAtFixedRate(() -> _bossZone.getPlayersInside().forEach(player -> AUDIENCE_DEBUFF.getSkill().applyEffects(player, player)), 5000, 20000);
Broadcast.toAllOnlinePlayers(new ExShowScreenMessage(NpcStringId.THE_ADEN_WARRIORS_BEGIN_BATTLE_WITH_THE_GIANT_EMPEROR_HELIOS, ExShowScreenMessage.TOP_CENTER, 10000, true));
}
if ((npc.getId() == HELIOS1) && !stage1_50 && (npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)))
if ((npc.getId() == HELIOS1) && !_stage1 && (npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)))
{
stage1_50 = true;
HELIOS_RAGE1.getSkill().applyEffects(bossInstance, bossInstance);
_stage1 = true;
HELIOS_RAGE1.getSkill().applyEffects(_bossInstance, _bossInstance);
}
if ((npc.getId() == HELIOS2) && !activated)
if ((npc.getId() == HELIOS2) && !_activated)
{
activated = true;
HELIOS_RAGE1.getSkill().applyEffects(bossInstance, bossInstance);
_activated = true;
HELIOS_RAGE1.getSkill().applyEffects(_bossInstance, _bossInstance);
_blueSpearTask = ThreadPool.scheduleAtFixedRate(() ->
{
int count = bossZone.getPlayersInside().size();
int count = _bossZone.getPlayersInside().size();
if (count > 0)
{
Player randomPlayer = bossZone.getPlayersInside().get(getRandom(count));
if (blueLightning != null)
Player randomPlayer = _bossZone.getPlayersInside().get(getRandom(count));
if (_blueLightning != null)
{
blueLightning.setTarget(randomPlayer);
blueLightning.doCast(BLUE_LIGHTNING_SPEAR.getSkill());
_blueLightning.setTarget(randomPlayer);
_blueLightning.doCast(BLUE_LIGHTNING_SPEAR.getSkill());
}
}
bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.HELIOS_PICKS_UP_THE_BLUE_LIGHTNING_SPEAR_AND_BEGINS_GATHERING_HIS_POWER, ExShowScreenMessage.TOP_CENTER, 10000, true));
_bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.HELIOS_PICKS_UP_THE_BLUE_LIGHTNING_SPEAR_AND_BEGINS_GATHERING_HIS_POWER, ExShowScreenMessage.TOP_CENTER, 10000, true));
}, 10000, 120000);
_redSpearTask = ThreadPool.scheduleAtFixedRate(() ->
{
int count = bossZone.getPlayersInside().size();
int count = _bossZone.getPlayersInside().size();
if (count > 0)
{
Player randomPlayer = bossZone.getPlayersInside().get(getRandom(count));
if (redLightning != null)
Player randomPlayer = _bossZone.getPlayersInside().get(getRandom(count));
if (_redLightning != null)
{
redLightning.setTarget(randomPlayer);
redLightning.doCast(RED_LIGHTNING_SPEAR.getSkill());
_redLightning.setTarget(randomPlayer);
_redLightning.doCast(RED_LIGHTNING_SPEAR.getSkill());
}
}
bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.HELIOS_PICKS_UP_THE_RED_LIGHTNING_SPEAR_AND_BEGINS_GATHERING_HIS_POWER, ExShowScreenMessage.TOP_CENTER, 10000, true));
_bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.HELIOS_PICKS_UP_THE_RED_LIGHTNING_SPEAR_AND_BEGINS_GATHERING_HIS_POWER, ExShowScreenMessage.TOP_CENTER, 10000, true));
}, 30000, 120000);
_leopoldTask = ThreadPool.scheduleAtFixedRate(() ->
{
int count = bossZone.getPlayersInside().size();
int count = _bossZone.getPlayersInside().size();
if (count > 0)
{
Player randomPlayer = bossZone.getPlayersInside().get(getRandom(count));
if (leopold != null)
Player randomPlayer = _bossZone.getPlayersInside().get(getRandom(count));
if (_leopold != null)
{
leopold.setTarget(randomPlayer);
_leopold.setTarget(randomPlayer);
int rnd = getRandom(100);
if (rnd < 16)
{
leopold.doCast(LEOPOLD_BOMB.getSkill());
_leopold.doCast(LEOPOLD_BOMB.getSkill());
}
else if (rnd < 32)
{
leopold.doCast(LEOPOLD_PLASMA_BOMB.getSkill());
_leopold.doCast(LEOPOLD_PLASMA_BOMB.getSkill());
}
else if (rnd < 48)
{
leopold.doCast(LEOPOLD_ENERGY_BOMB.getSkill());
_leopold.doCast(LEOPOLD_ENERGY_BOMB.getSkill());
}
else if (rnd < 64)
{
leopold.doCast(LEOPOLD_MINI_GUN.getSkill());
_leopold.doCast(LEOPOLD_MINI_GUN.getSkill());
}
else if (rnd < 80)
{
leopold.doCast(LEOPOLD_SPRAY_SHOT.getSkill());
_leopold.doCast(LEOPOLD_SPRAY_SHOT.getSkill());
}
else
{
leopold.doCast(LEOPOLD_HARPOON.getSkill());
_leopold.doCast(LEOPOLD_HARPOON.getSkill());
}
}
}
}, 5000, 10000);
}
if ((npc.getId() == HELIOS2) && !stage2_50 && (npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)))
if ((npc.getId() == HELIOS2) && !_stage2 && (npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)))
{
stage2_50 = true;
HELIOS_RAGE2.getSkill().applyEffects(bossInstance, bossInstance);
_stage2 = true;
HELIOS_RAGE2.getSkill().applyEffects(_bossInstance, _bossInstance);
}
if ((npc.getId() == HELIOS3) && !activated)
if ((npc.getId() == HELIOS3) && !_activated)
{
activated = true;
HELIOS_RAGE3.getSkill().applyEffects(bossInstance, bossInstance);
_activated = true;
HELIOS_RAGE3.getSkill().applyEffects(_bossInstance, _bossInstance);
_leopoldTask = ThreadPool.scheduleAtFixedRate(() ->
{
int count = bossZone.getPlayersInside().size();
int count = _bossZone.getPlayersInside().size();
if (count > 0)
{
Player randomPlayer = bossZone.getPlayersInside().get(getRandom(count));
if (leopold != null)
Player randomPlayer = _bossZone.getPlayersInside().get(getRandom(count));
if (_leopold != null)
{
leopold.setTarget(randomPlayer);
_leopold.setTarget(randomPlayer);
int rnd = getRandom(100);
if (rnd < 16)
{
leopold.doCast(LEOPOLD_BOMB.getSkill());
_leopold.doCast(LEOPOLD_BOMB.getSkill());
}
else if (rnd < 32)
{
leopold.doCast(LEOPOLD_PLASMA_BOMB.getSkill());
_leopold.doCast(LEOPOLD_PLASMA_BOMB.getSkill());
}
else if (rnd < 48)
{
leopold.doCast(LEOPOLD_ENERGY_BOMB.getSkill());
_leopold.doCast(LEOPOLD_ENERGY_BOMB.getSkill());
}
else if (rnd < 64)
{
leopold.doCast(LEOPOLD_MINI_GUN.getSkill());
_leopold.doCast(LEOPOLD_MINI_GUN.getSkill());
}
else if (rnd < 80)
{
leopold.doCast(LEOPOLD_SPRAY_SHOT.getSkill());
_leopold.doCast(LEOPOLD_SPRAY_SHOT.getSkill());
}
else
{
leopold.doCast(LEOPOLD_HARPOON.getSkill());
_leopold.doCast(LEOPOLD_HARPOON.getSkill());
}
}
}
}, 5000, 10000);
}
if ((npc.getId() == HELIOS3) && !helios80 && (npc.getCurrentHp() <= (npc.getMaxHp() * 0.8)))
if ((npc.getId() == HELIOS3) && !_helios80 && (npc.getCurrentHp() <= (npc.getMaxHp() * 0.8)))
{
helios80 = true;
_helios80 = true;
addSpawn(LEOPOLD_ORIGIN, LEOPOLD_ORIGIN_LOC, false, 0);
addSpawn(ENUMA_ELISH_ORIGIN, ENUMA_ELISH_ORIGIN_LOC, false, 0);
bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.THE_KAMAEL_ORIGINS_ABOVE_THE_THRONE_OF_HELIOS_BEGIN_TO_SOAR, ExShowScreenMessage.TOP_CENTER, 10000, true));
_bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.THE_KAMAEL_ORIGINS_ABOVE_THE_THRONE_OF_HELIOS_BEGIN_TO_SOAR, ExShowScreenMessage.TOP_CENTER, 10000, true));
}
else if ((npc.getId() == HELIOS3) && !helios50 && (npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)))
else if ((npc.getId() == HELIOS3) && !_helios50 && (npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)))
{
helios50 = true;
HELIOS_RAGE4.getSkill().applyEffects(bossInstance, bossInstance);
bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.HELIOS_USES_THE_PRANARACH_SHIELD_OF_LIGHT_TO_MINIMIZE_DAMAGE, ExShowScreenMessage.TOP_CENTER, 10000, true));
bossInstance.abortCast();
bossInstance.doCast(PRANARACH.getSkill());
_helios50 = true;
HELIOS_RAGE4.getSkill().applyEffects(_bossInstance, _bossInstance);
_bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.HELIOS_USES_THE_PRANARACH_SHIELD_OF_LIGHT_TO_MINIMIZE_DAMAGE, ExShowScreenMessage.TOP_CENTER, 10000, true));
_bossInstance.abortCast();
_bossInstance.doCast(PRANARACH.getSkill());
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@@ -344,12 +338,12 @@ public class Helios extends AbstractNpcAI
if (GrandBossManager.getInstance().getBossStatus(HELIOS3) == WAITING)
{
GrandBossManager.getInstance().setBossStatus(HELIOS3, FIGHTING);
bossInstance = addSpawn(HELIOS1, HELIOS_SPAWN_LOC.getX(), HELIOS_SPAWN_LOC.getY(), HELIOS_SPAWN_LOC.getZ(), HELIOS_SPAWN_LOC.getHeading(), false, 0, false);
_bossInstance = addSpawn(HELIOS1, HELIOS_SPAWN_LOC.getX(), HELIOS_SPAWN_LOC.getY(), HELIOS_SPAWN_LOC.getZ(), HELIOS_SPAWN_LOC.getHeading(), false, 0, false);
for (SpawnHolder spawn : SPAWNS_MINIONS)
{
_minionSpawns.add(addSpawn(spawn.getNpcId(), spawn.getLocation()));
}
startQuestTimer("resetRaid", HELIOS_RAID_DURATION * 60 * 60 * 1000, bossInstance, null);
startQuestTimer("resetRaid", HELIOS_RAID_DURATION * 60 * 60 * 1000, _bossInstance, null);
}
break;
}
@@ -358,17 +352,17 @@ public class Helios extends AbstractNpcAI
final int status = GrandBossManager.getInstance().getBossStatus(HELIOS3);
if ((status > ALIVE) && (status < DEAD))
{
bossZone.oustAllPlayers();
_bossZone.oustAllPlayers();
Broadcast.toAllOnlinePlayers(new ExShowScreenMessage(NpcStringId.THE_HEROES_DRAINED_OF_THEIR_POWERS_HAVE_BEEN_BANISHED_FROM_THE_THRONE_OF_HELIOS_BY_HELIOS_POWERS, ExShowScreenMessage.TOP_CENTER, 10000, true));
GrandBossManager.getInstance().setBossStatus(HELIOS3, ALIVE);
Clean();
clean();
}
break;
}
case "stage2":
{
bossInstance = addSpawn(HELIOS2, HELIOS_SPAWN_LOC.getX(), HELIOS_SPAWN_LOC.getY(), HELIOS_SPAWN_LOC.getZ(), HELIOS_SPAWN_LOC.getHeading(), false, 0, false);
bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.HELIOS_APPEARANCE_CHANGES_AND_HE_BEGINS_TO_GROW_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000, true));
_bossInstance = addSpawn(HELIOS2, HELIOS_SPAWN_LOC.getX(), HELIOS_SPAWN_LOC.getY(), HELIOS_SPAWN_LOC.getZ(), HELIOS_SPAWN_LOC.getHeading(), false, 0, false);
_bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.HELIOS_APPEARANCE_CHANGES_AND_HE_BEGINS_TO_GROW_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000, true));
for (SpawnHolder spawn : SPAWNS_MINIONS)
{
_minionSpawns.add(addSpawn(spawn.getNpcId(), spawn.getLocation()));
@@ -378,25 +372,25 @@ public class Helios extends AbstractNpcAI
}
case "stage3":
{
activated = false;
bossInstance = addSpawn(HELIOS3, HELIOS_SPAWN_LOC.getX(), HELIOS_SPAWN_LOC.getY(), HELIOS_SPAWN_LOC.getZ(), HELIOS_SPAWN_LOC.getHeading(), false, 0, false);
bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.HELIOS_APPEARANCE_CHANGES_AND_HE_BEGINS_TO_GROW_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000, true));
_activated = false;
_bossInstance = addSpawn(HELIOS3, HELIOS_SPAWN_LOC.getX(), HELIOS_SPAWN_LOC.getY(), HELIOS_SPAWN_LOC.getZ(), HELIOS_SPAWN_LOC.getHeading(), false, 0, false);
_bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.HELIOS_APPEARANCE_CHANGES_AND_HE_BEGINS_TO_GROW_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000, true));
startQuestTimer("leopoldSpawn", 10000, null, null);
break;
}
case "spheresSpawn":
{
blueLightning = addSpawn(HELIOS_BLUE_LIGHTNING, BLUE_LIGHTNING_SPEAR_LOC, false, 0);
redLightning = addSpawn(HELIOS_RED_LIGHTNING, RED_LIGHTNING_SPEAR_LOC, false, 0);
blueLightning.setInvul(true);
redLightning.setInvul(true);
bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.THE_ENUMA_ELISH_SPEAR_ON_THE_THRONE_OF_HELIOS_IS_PREPARED_AND_PLACED_IN_POSITION, ExShowScreenMessage.TOP_CENTER, 10000, true));
_blueLightning = addSpawn(HELIOS_BLUE_LIGHTNING, BLUE_LIGHTNING_SPEAR_LOC, false, 0);
_redLightning = addSpawn(HELIOS_RED_LIGHTNING, RED_LIGHTNING_SPEAR_LOC, false, 0);
_blueLightning.setInvul(true);
_redLightning.setInvul(true);
_bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.THE_ENUMA_ELISH_SPEAR_ON_THE_THRONE_OF_HELIOS_IS_PREPARED_AND_PLACED_IN_POSITION, ExShowScreenMessage.TOP_CENTER, 10000, true));
startQuestTimer("protectorsSpawn", 10000, null, null);
break;
}
case "protectorsSpawn":
{
bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.MIMILLION_AND_MIMILLUS_APPEAR_IN_ORDER_TO_PROTECT_THE_ENUMA_ELISH_OF_RED_LIGHTNING_AND_THE_ENUMA_ELISH_OF_BLUE_LIGHTNING, ExShowScreenMessage.TOP_CENTER, 10000, true));
_bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.MIMILLION_AND_MIMILLUS_APPEAR_IN_ORDER_TO_PROTECT_THE_ENUMA_ELISH_OF_RED_LIGHTNING_AND_THE_ENUMA_ELISH_OF_BLUE_LIGHTNING, ExShowScreenMessage.TOP_CENTER, 10000, true));
addSpawn(MIMILLION, MIMILLION_LOC, false, 0);
addSpawn(MIMILLUS, MIMILLUS_LOC, false, 0);
startQuestTimer("leopoldSpawn", 10000, null, null);
@@ -404,17 +398,17 @@ public class Helios extends AbstractNpcAI
}
case "leopoldSpawn":
{
leopold = addSpawn(LEOPOLD, LEOPOLD_LOC, false, 0);
bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.THE_SIEGE_CANNON_LEOPOLD_ON_THE_THRONE_OF_HELIOS_BEGINS_TO_PREPARE_TO_FIRE, ExShowScreenMessage.TOP_CENTER, 10000, true));
_leopold = addSpawn(LEOPOLD, LEOPOLD_LOC, false, 0);
_bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.THE_SIEGE_CANNON_LEOPOLD_ON_THE_THRONE_OF_HELIOS_BEGINS_TO_PREPARE_TO_FIRE, ExShowScreenMessage.TOP_CENTER, 10000, true));
break;
}
}
return htmltext;
}
private void Clean()
private void clean()
{
bossZone.getCharactersInside().forEach(mob ->
_bossZone.getCharactersInside().forEach(mob ->
{
if (mob.isNpc())
{
@@ -450,50 +444,44 @@ public class Helios extends AbstractNpcAI
{
case MIMILLION:
{
if (redLightning != null)
if (_redLightning != null)
{
redLightning.deleteMe();
bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.MIMILLION_FALLS_AND_THE_RED_LIGHTNING_SPEAR_VANISHES, ExShowScreenMessage.TOP_CENTER, 10000, true));
_redLightning.deleteMe();
_bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.MIMILLION_FALLS_AND_THE_RED_LIGHTNING_SPEAR_VANISHES, ExShowScreenMessage.TOP_CENTER, 10000, true));
}
break;
}
case MIMILLUS:
{
if (blueLightning != null)
if (_blueLightning != null)
{
blueLightning.deleteMe();
bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.MIMILLUS_FALLS_AND_THE_BLUE_LIGHTNING_SPEAR_VANISHES, ExShowScreenMessage.TOP_CENTER, 10000, true));
_blueLightning.deleteMe();
_bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.MIMILLUS_FALLS_AND_THE_BLUE_LIGHTNING_SPEAR_VANISHES, ExShowScreenMessage.TOP_CENTER, 10000, true));
}
break;
}
case HELIOS1:
{
bossInstance.deleteMe();
bossZone.getPlayersInside().forEach(player ->
{
playMovie(player, Movie.SC_HELIOS_TRANS_A);
});
_bossInstance.deleteMe();
_bossZone.getPlayersInside().forEach(player -> playMovie(player, Movie.SC_HELIOS_TRANS_A));
startQuestTimer("stage2", 15000, null, null);
break;
}
case HELIOS2:
{
bossInstance.deleteMe();
if (leopold != null)
_bossInstance.deleteMe();
if (_leopold != null)
{
leopold.deleteMe();
_leopold.deleteMe();
}
bossZone.getPlayersInside().forEach(player ->
{
playMovie(player, Movie.SC_HELIOS_TRANS_B);
});
_bossZone.getPlayersInside().forEach(player -> playMovie(player, Movie.SC_HELIOS_TRANS_B));
startQuestTimer("stage3", 15000, null, null);
break;
}
case HELIOS3:
{
Clean();
bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.HELIOS_DEFEATED_TAKES_FLIGHT_DEEP_IN_TO_THE_SUPERION_FORT_HIS_THRONE_IS_RENDERED_INACTIVE, ExShowScreenMessage.TOP_CENTER, 10000, true));
clean();
_bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.HELIOS_DEFEATED_TAKES_FLIGHT_DEEP_IN_TO_THE_SUPERION_FORT_HIS_THRONE_IS_RENDERED_INACTIVE, ExShowScreenMessage.TOP_CENTER, 10000, true));
GrandBossManager.getInstance().setBossStatus(HELIOS3, DEAD);
final long respawnTime = (Config.HELIOS_SPAWN_INTERVAL + getRandom(-Config.HELIOS_SPAWN_RANDOM, Config.HELIOS_SPAWN_RANDOM)) * 3600000;
final StatSet info = GrandBossManager.getInstance().getStatSet(HELIOS3);

View File

@@ -87,7 +87,7 @@ public class Lindvior extends AbstractNpcAI
private static final int LINDVIOR_CAMERA = 19428;
// Zone
private static final int ZONE_ID = 12107;
static final Location CENTER_LOCATION = new Location(46424, -26200, -1400);
private static final Location CENTER_LOCATION = new Location(46424, -26200, -1400);
// Skills
private static final SkillHolder SKILL_RECHARGE_POSIBLE = new SkillHolder(15605, 1);
private static final SkillHolder RECHARGE = new SkillHolder(15606, 1);
@@ -103,32 +103,7 @@ public class Lindvior extends AbstractNpcAI
private static final int ALIVE = 0;
private static final int FIGHTING = 2;
private static final int DEAD = 3;
// Tasks
protected ScheduledFuture<?> _socialTask;
protected ScheduledFuture<?> _mobsSpawnTask;
protected ScheduledFuture<?> _collapseTask;
protected ScheduledFuture<?> _announceTask;
protected ScheduledFuture<?> _announceProtect;
protected ScheduledFuture<?> _skillCastTask;
protected ScheduledFuture<?> _LynDracoTask;
protected ScheduledFuture<?> _smallVortexesTask;
protected ScheduledFuture<?> _bigVortexesTask;
protected NoSummonFriendZone _zoneLair;
protected GrandBoss _lindvior = null;
private GrandBoss _lindviorForSpawn = null;
protected Npc _lindviorfake = null;
protected Npc _dummyLindvior;
protected Npc _vortex = null;
protected Npc _lionel = null;
protected List<Npc> _guardSpawn = new ArrayList<>();
protected List<FriendlyNpc> _generatorSpawn = new ArrayList<>();
protected List<Npc> _monsterSpawn = new ArrayList<>();
protected List<Npc> _LinDracoSpawn = new ArrayList<>();
protected int _activeMask = 0;
protected int _chargedMask = 0;
protected int _status = 0;
protected int _stage = 0;
// Others
private static final Location[] CONTROL_GENERATOR_SPAWNS =
{
new Location(45288, -30360, -1432, 0),
@@ -181,9 +156,16 @@ public class Lindvior extends AbstractNpcAI
{21170106, 21170107},
{21170108, 21170109}
};
protected final int[] _chargedValues = new int[] {0, 0, 0, 0};
private static final int[] LINDVIOR_SERVITOR = {25895, 25896, 25897, 29242, 29241, 29243};
// @formatter:on
private static final int[] LINDVIOR_SERVITOR =
{
25895,
25896,
25897,
29242,
29241,
29243
};
private static final NpcStringId[] GUARD_MSG =
{
NpcStringId.ACTIVATE_THE_GENERATOR_HURRY,
@@ -194,6 +176,38 @@ public class Lindvior extends AbstractNpcAI
NpcStringId.HOLD_ONTO_THE_GENERATOR_TO_ACTIVATE_THE_CHARGE_SKILL,
NpcStringId.THE_GENERATOR_IS_CONNECTED_TO_THE_CANNON,
};
// Tasks
protected ScheduledFuture<?> _socialTask;
protected ScheduledFuture<?> _mobsSpawnTask;
protected ScheduledFuture<?> _collapseTask;
protected ScheduledFuture<?> _announceTask;
protected ScheduledFuture<?> _announceProtect;
protected ScheduledFuture<?> _skillCastTask;
protected ScheduledFuture<?> _LynDracoTask;
protected ScheduledFuture<?> _smallVortexesTask;
protected ScheduledFuture<?> _bigVortexesTask;
protected NoSummonFriendZone _zoneLair;
protected GrandBoss _lindvior = null;
private GrandBoss _lindviorForSpawn = null;
protected Npc _lindviorfake = null;
protected Npc _dummyLindvior;
protected Npc _vortex = null;
protected Npc _lionel = null;
protected List<Npc> _guardSpawn = new ArrayList<>();
protected List<FriendlyNpc> _generatorSpawn = new ArrayList<>();
protected List<Npc> _monsterSpawn = new ArrayList<>();
protected List<Npc> _LinDracoSpawn = new ArrayList<>();
protected int _activeMask = 0;
protected int _chargedMask = 0;
protected int _status = 0;
protected int _stage = 0;
protected final int[] _chargedValues = new int[]
{
0,
0,
0,
0
};
public Lindvior()
{
@@ -331,13 +345,10 @@ public class Lindvior extends AbstractNpcAI
}
else if (percent <= 20)
{
if (_status == 5)
if ((_status == 5) && (_smallVortexesTask != null))
{
if (_smallVortexesTask != null)
{
_smallVortexesTask.cancel(true);
_smallVortexesTask = null;
}
_smallVortexesTask.cancel(true);
_smallVortexesTask = null;
}
if (_lindvior != null)
{
@@ -347,7 +358,7 @@ public class Lindvior extends AbstractNpcAI
return super.onAttack(npc, attacker, damage, isSummon);
}
protected void Clean()
protected void clean()
{
_status = 0;
if (_socialTask != null)
@@ -413,7 +424,7 @@ public class Lindvior extends AbstractNpcAI
{
if (clean)
{
Clean();
clean();
}
_zoneLair.oustAllPlayers();
_zoneLair.broadcastPacket(new OnEventTrigger(FIRST_STAGE_EVENT_TRIGGER, false));
@@ -579,10 +590,7 @@ public class Lindvior extends AbstractNpcAI
{
player.sendPacket(new OnEventTrigger(FIRST_STAGE_EVENT_TRIGGER, false));
cancelQuestTimers("NPC_SHOUT");
_guardSpawn.stream().forEach(guard ->
{
guard.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.ALL_4_GENERATORS_MUST_BE_ACTIVATED);
});
_guardSpawn.stream().forEach(guard -> guard.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.ALL_4_GENERATORS_MUST_BE_ACTIVATED));
_announceProtect = ThreadPool.scheduleAtFixedRate(() -> _zoneLair.getPlayersInside().forEach(p -> player.sendPacket(new ExShowScreenMessage(NpcStringId.PROTECT_THE_GENERATOR, ExShowScreenMessage.TOP_CENTER, 7000, true))), 10000, 18000);
_zoneLair.broadcastPacket(new SpecialCamera(_dummyLindvior, 3300, 200, 20, 11000, 10500, 0, 8, 1, 0, 0));
_dummyLindvior.setInvisible(true);
@@ -696,22 +704,13 @@ public class Lindvior extends AbstractNpcAI
}
case "show_shield_animation": // zone broadcast shield event triger
{
_zoneLair.getPlayersInside().forEach(p ->
{
p.sendPacket(new OnEventTrigger(SECOND_STAGE_EVENT_TRIGGER, true));
});
_guardSpawn.stream().forEach(guard ->
{
guard.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.THE_GENERATOR_IS_CONNECTED_TO_THE_CANNON);
});
_zoneLair.getPlayersInside().forEach(p -> p.sendPacket(new OnEventTrigger(SECOND_STAGE_EVENT_TRIGGER, true)));
_guardSpawn.stream().forEach(guard -> guard.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.THE_GENERATOR_IS_CONNECTED_TO_THE_CANNON));
break;
}
case "show_movie": // zone broadcast Lindvior scene movie
{
_zoneLair.getPlayersInside().forEach(p ->
{
playMovie(p, Movie.SC_LIND_OPENING);
});
_zoneLair.getPlayersInside().forEach(p -> playMovie(p, Movie.SC_LIND_OPENING));
startQuestTimer("spawnDummyLindvior", 23200, null, null);
break;
}
@@ -725,7 +724,6 @@ public class Lindvior extends AbstractNpcAI
case "lindvior2":
{
_mobsSpawnTask = ThreadPool.scheduleAtFixedRate(() -> spawnServitor(2, 1000, _lindvior.getLocation(), LINDVIOR_SERVITOR), 60000, 180000);
for (Location loc : ATTACKER_SMALL_VORTEX_SPAWNS)
{
addSpawn(NPC_ATTACKER_SMALL_VORTEX, loc, true);
@@ -737,7 +735,6 @@ public class Lindvior extends AbstractNpcAI
case "lindvior3":
{
_mobsSpawnTask = ThreadPool.scheduleAtFixedRate(() -> spawnServitor(2, 1000, _lindvior.getLocation(), LINDVIOR_SERVITOR), 60000, 180000);
spawnServitor(5, 2000, _lindvior.getLocation(), LINDVIOR_SERVITOR);
for (Location loc : ATTACKER_SMALL_VORTEX_SPAWNS)
{
@@ -750,14 +747,10 @@ public class Lindvior extends AbstractNpcAI
case "lindvior4":
{
_mobsSpawnTask = ThreadPool.scheduleAtFixedRate(() -> spawnServitor(2, 1000, _lindvior.getLocation(), LINDVIOR_SERVITOR), 60000, 180000);
if (SpawnTable.getInstance().getSpawns(NPC_ATTACKER_BIG_VORTEX) != null)
if ((SpawnTable.getInstance().getSpawns(NPC_ATTACKER_BIG_VORTEX) != null) && (_vortex != null) && (_vortex.getId() == NPC_ATTACKER_SMALL_VORTEX))
{
if ((_vortex != null) && (_vortex.getId() == NPC_ATTACKER_SMALL_VORTEX))
{
_vortex.getSpawn().stopRespawn();
_vortex.deleteMe();
}
_vortex.getSpawn().stopRespawn();
_vortex.deleteMe();
}
_status = 4;
break;
@@ -765,7 +758,6 @@ public class Lindvior extends AbstractNpcAI
case "lindvior5":
{
_mobsSpawnTask = ThreadPool.scheduleAtFixedRate(() -> spawnServitor(2, 1000, _lindvior.getLocation(), LINDVIOR_SERVITOR), 60000, 180000);
_bigVortexesTask = ThreadPool.schedule(() -> spawnServitor(1, 300, _lindvior.getLocation(), NPC_ATTACKER_BIG_VORTEX), 1000);
for (Location loc : ATTACKER_SMALL_VORTEX_SPAWNS)
{
@@ -773,7 +765,7 @@ public class Lindvior extends AbstractNpcAI
addSpawn(LINDVIOR_SERVITOR[4], loc, true);
addSpawn(LINDVIOR_SERVITOR[3], loc, true);
}
_collapseTask = ThreadPool.schedule(Lindvior.this::Clean, 600000);
_collapseTask = ThreadPool.schedule(Lindvior.this::clean, 600000);
_status = 6;
break;
}
@@ -854,8 +846,8 @@ public class Lindvior extends AbstractNpcAI
_mobsSpawnTask.cancel(true);
_mobsSpawnTask = null;
}
_zoneLair.getCharactersInside().stream().filter(Creature::isNpc).forEach(mob -> mob.deleteMe());
ThreadPool.schedule(() -> npc.decayMe(), 10000);
_zoneLair.getCharactersInside().stream().filter(Creature::isNpc).forEach(Creature::deleteMe);
ThreadPool.schedule(npc::decayMe, 10000);
_zoneLair.broadcastPacket(new OnEventTrigger(SECOND_STAGE_EVENT_TRIGGER, false));
_zoneLair.broadcastPacket(new OnEventTrigger(FIRST_STAGE_EVENT_TRIGGER, true));
_lionel.deleteMe();
@@ -870,7 +862,7 @@ public class Lindvior extends AbstractNpcAI
else if (npc.getId() == NPC_GENERATOR)
{
_zoneLair.broadcastPacket(new ExShowScreenMessage(NpcStringId.THE_GENERATOR_HAS_BEEN_DESTROYED, ExShowScreenMessage.TOP_CENTER, 5000, true));
Clean();
clean();
_collapseTask = ThreadPool.schedule(() -> Fail(false), 20000);
}
return super.onKill(npc, killer, isSummon);
@@ -889,13 +881,10 @@ public class Lindvior extends AbstractNpcAI
@Override
public String onEnterZone(Creature character, ZoneType zone)
{
if (zone.getId() == ZONE_ID)
if (_collapseTask != null)
{
if (_collapseTask != null)
{
_collapseTask.cancel(true);
_collapseTask = null;
}
_collapseTask.cancel(true);
_collapseTask = null;
}
return super.onEnterZone(character, zone);
}
@@ -903,12 +892,9 @@ public class Lindvior extends AbstractNpcAI
@Override
public String onExitZone(Creature character, ZoneType zone)
{
if (zone.getId() == ZONE_ID)
if (zone.getPlayersInside().isEmpty())
{
if (zone.getPlayersInside().isEmpty())
{
_collapseTask = ThreadPool.schedule(() -> Fail(true), 900000);
}
_collapseTask = ThreadPool.schedule(() -> Fail(true), 900000);
}
return super.onExitZone(character, zone);
}
@@ -916,13 +902,10 @@ public class Lindvior extends AbstractNpcAI
@Override
public void onTimerEvent(String event, StatSet params, Npc npc, Player player)
{
if (event.equals("NPC_SHOUT"))
if (event.equals("NPC_SHOUT") && (npc != null) && !npc.isDead())
{
if ((npc != null) && !npc.isDead())
{
npc.broadcastSay(ChatType.NPC_GENERAL, GUARD_MSG[getRandom(GUARD_MSG.length)]);
getTimers().addTimer("NPC_SHOUT", (10 + getRandom(5)) * 1000, npc, null);
}
npc.broadcastSay(ChatType.NPC_GENERAL, GUARD_MSG[getRandom(GUARD_MSG.length)]);
getTimers().addTimer("NPC_SHOUT", (10 + getRandom(5)) * 1000, npc, null);
}
}

View File

@@ -135,38 +135,23 @@ public class Vortex extends AbstractNpcAI
@Override
public String onSpawn(Npc npc)
{
switch (npc.getId())
{
case SMALL_VORTEX:
{
attackRandomTarget(npc);
npc.setRandomWalking(true);
npc.setRunning();
break;
}
case BIG_VORTEX:
{
attackRandomTarget(npc);
npc.setRandomWalking(true);
npc.setRunning();
break;
}
}
attackRandomTarget(npc);
npc.setRandomWalking(true);
npc.setRunning();
return super.onSpawn(npc);
}
private void attackRandomTarget(Npc npc)
{
final Collection<Player> players = World.getInstance().getVisibleObjects(npc, Player.class);
if ((players == null) || players.isEmpty())
{
if ((players == null) || players.isEmpty())
{
return;
}
if (!players.isEmpty())
{
addAttackPlayerDesire(npc, players.stream().findAny().get());
}
return;
}
if (!players.isEmpty())
{
addAttackPlayerDesire(npc, players.stream().findAny().get());
}
}

View File

@@ -531,12 +531,9 @@ public class OctavisWarzone extends AbstractInstance
final Instance world = npc.getInstanceWorld();
if (isInInstance(world))
{
if (CommonUtil.contains(GLADIATORS, npc.getId()))
{
npc.setRandomWalking(false);
world.openCloseDoor(npc.getParameters().getInt("My_DoorName", -1), true);
getTimers().addTimer("GLADIATOR_MOVING", 3000, npc, null);
}
npc.setRandomWalking(false);
world.openCloseDoor(npc.getParameters().getInt("My_DoorName", -1), true);
getTimers().addTimer("GLADIATOR_MOVING", 3000, npc, null);
}
return super.onSpawn(npc);
}

View File

@@ -71,10 +71,6 @@ public class Orfen extends AbstractNpcAI
// private static final int RIBA = 29017;
private static final int RIBA_IREN = 29018;
private static boolean _IsTeleported;
private static Set<Attackable> _minions = ConcurrentHashMap.newKeySet();
private static ZoneType ZONE;
private static final byte ALIVE = 0;
private static final byte DEAD = 1;
@@ -82,6 +78,10 @@ public class Orfen extends AbstractNpcAI
private static final SkillHolder BLOW = new SkillHolder(4067, 4);
private static final SkillHolder ORFEN_HEAL = new SkillHolder(4516, 1);
private static boolean _isTeleported;
private static Set<Attackable> _minions = ConcurrentHashMap.newKeySet();
private static ZoneType _zone;
private Orfen()
{
final int[] mobs =
@@ -91,8 +91,8 @@ public class Orfen extends AbstractNpcAI
RIBA_IREN
};
registerMobs(mobs);
_IsTeleported = false;
ZONE = ZoneManager.getInstance().getZoneById(12013);
_isTeleported = false;
_zone = ZoneManager.getInstance().getZoneById(12013);
final StatSet info = GrandBossManager.getInstance().getStatSet(ORFEN);
final int status = GrandBossManager.getInstance().getBossStatus(ORFEN);
if (status == DEAD)
@@ -199,12 +199,12 @@ public class Orfen extends AbstractNpcAI
}
else if (event.equalsIgnoreCase("check_orfen_pos"))
{
if ((_IsTeleported && (npc.getCurrentHp() > (npc.getMaxHp() * 0.95))) || (!ZONE.isInsideZone(npc) && !_IsTeleported))
if ((_isTeleported && (npc.getCurrentHp() > (npc.getMaxHp() * 0.95))) || (!_zone.isInsideZone(npc) && !_isTeleported))
{
setSpawnPoint(npc, getRandom(3) + 1);
_IsTeleported = false;
_isTeleported = false;
}
else if (_IsTeleported && !ZONE.isInsideZone(npc))
else if (_isTeleported && !_zone.isInsideZone(npc))
{
setSpawnPoint(npc, 0);
}
@@ -292,9 +292,9 @@ public class Orfen extends AbstractNpcAI
final int npcId = npc.getId();
if (npcId == ORFEN)
{
if (!_IsTeleported && ((npc.getCurrentHp() - damage) < (npc.getMaxHp() / 2)))
if (!_isTeleported && ((npc.getCurrentHp() - damage) < (npc.getMaxHp() / 2)))
{
_IsTeleported = true;
_isTeleported = true;
setSpawnPoint(npc, 0);
}
else if (npc.isInsideRadius2D(attacker, 1000) && !npc.isInsideRadius2D(attacker, 300) && (getRandom(10) == 0))

View File

@@ -47,6 +47,12 @@ public class QueenShyeed extends AbstractNpcAI
private static final EffectZone MOB_BUFF_DISPLAY_ZONE = ZoneManager.getInstance().getZoneById(200104, EffectZone.class);
private static final EffectZone PC_BUFF_ZONE = ZoneManager.getInstance().getZoneById(200105, EffectZone.class);
private QueenShyeed()
{
addKillId(SHYEED);
spawnShyeed();
}
@Override
public String onAdvEvent(String event, Npc npc, Player player)
{
@@ -79,12 +85,6 @@ public class QueenShyeed extends AbstractNpcAI
return super.onKill(npc, killer, isSummon);
}
private QueenShyeed()
{
addKillId(SHYEED);
spawnShyeed();
}
private void spawnShyeed()
{
final long respawn = GlobalVariablesManager.getInstance().getLong("QueenShyeedRespawn", 0);

View File

@@ -101,18 +101,6 @@ public class Trasken extends AbstractNpcAI
// Status
private static final int ALIVE = 0;
private static final int DEAD = 3;
// Others
protected double _hpTail;
protected double _hpTrasken;
private static Npc _tieTrasken;
private static Npc _trasken;
private static NoSummonFriendZone _zoneLair;
private static NoSummonFriendZone _zoneLair2;
private int _playersToEnter;
protected int _statusZone = 0;
protected ScheduledFuture<?> _collapseTask;
protected AtomicInteger _killsTie = new AtomicInteger(0);
protected AtomicInteger _killsTradjan = new AtomicInteger(0);
// Spawns
private static final Location HEART_SPAWN = new Location(88292, -173758, -15965);
private static final Location[] TIE_SPAWN = new Location[]
@@ -291,6 +279,18 @@ public class Trasken extends AbstractNpcAI
{81208, -182095, -9896}
};
// @formatter:on
// Others
protected double _hpTail;
protected double _hpTrasken;
private static Npc _tieTrasken;
private static Npc _trasken;
private static NoSummonFriendZone _zoneLair;
private static NoSummonFriendZone _zoneLair2;
private int _playersToEnter;
protected int _statusZone = 0;
protected ScheduledFuture<?> _collapseTask;
protected AtomicInteger _killsTie = new AtomicInteger(0);
protected AtomicInteger _killsTradjan = new AtomicInteger(0);
public Trasken()
{
@@ -365,7 +365,7 @@ public class Trasken extends AbstractNpcAI
}
}
protected void Clean()
protected void clean()
{
_statusZone = 0;
if (_collapseTask != null)
@@ -391,11 +391,11 @@ public class Trasken extends AbstractNpcAI
});
}
private void Fail(boolean clean)
private void fail(boolean clean)
{
if (clean)
{
Clean();
clean();
}
_zoneLair.oustAllPlayers();
_zoneLair2.oustAllPlayers();
@@ -436,12 +436,12 @@ public class Trasken extends AbstractNpcAI
final double percent = ((npc.getCurrentHp() - damage) / npc.getMaxHp()) * 100.0;
if ((percent <= 30) && (_statusZone == 4))
{
TraskenStay(npc);
traskenStay(npc);
_statusZone = 5;
}
if ((percent <= 40) && (_statusZone == 3))
{
TraskenStay(npc);
traskenStay(npc);
_statusZone = 4;
}
if (getRandom(100) < 50)
@@ -760,7 +760,7 @@ public class Trasken extends AbstractNpcAI
}
final int time = 540000;
zone.getPlayersInside().forEach(temp -> temp.sendPacket(new ExSendUIEvent(temp, false, false, 540, 0, NpcStringId.REMAINING_TIME)));
_collapseTask = ThreadPool.schedule(() -> Fail(true), time);
_collapseTask = ThreadPool.schedule(() -> fail(true), time);
}
return super.onEnterZone(creature, zone);
}
@@ -772,7 +772,7 @@ public class Trasken extends AbstractNpcAI
{
_collapseTask = ThreadPool.schedule(() ->
{
Fail(true);
fail(true);
for (int info : EVENT_TRIGGERS)
{
creature.broadcastPacket(new OnEventTrigger(info, false));
@@ -864,7 +864,7 @@ public class Trasken extends AbstractNpcAI
}
}
private void TraskenStay(Creature creature)
private void traskenStay(Creature creature)
{
creature.broadcastPacket(new ExShowScreenMessage(NpcStringId.THE_EARTH_WYRM_HAS_LOST_CONSCIOUSNESS, 5, 4600, true));
creature.doCast(SKILL_TRASKEN_BUFF.getSkill()); // 12 sec combo