package instance;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicInteger;
import com.aionemu.commons.utils.Rnd;
import com.aionemu.gameserver.ai.NpcAI;
import com.aionemu.gameserver.ai.manager.WalkManager;
import com.aionemu.gameserver.instance.handlers.GeneralInstanceHandler;
import com.aionemu.gameserver.instance.handlers.InstanceID;
import com.aionemu.gameserver.model.EmotionType;
import com.aionemu.gameserver.model.Race;
import com.aionemu.gameserver.model.gameobjects.Npc;
import com.aionemu.gameserver.model.gameobjects.player.Player;
import com.aionemu.gameserver.model.gameobjects.state.CreatureState;
import com.aionemu.gameserver.model.instance.StageList;
import com.aionemu.gameserver.network.aion.serverpackets.SM_EMOTION;
import com.aionemu.gameserver.network.aion.serverpackets.SM_SYSTEM_MESSAGE;
import com.aionemu.gameserver.services.teleport.TeleportService;
import com.aionemu.gameserver.skillengine.SkillEngine;
import com.aionemu.gameserver.utils.PacketSendUtility;
import com.aionemu.gameserver.utils.ThreadPoolManager;
import com.aionemu.gameserver.world.WorldMapInstance;
/**
* References:
* - <a href="https://www.youtube.com/watch?v=x9_I-8ChDWI">4.8 Healer/Middle</a>
* - <a href="https://www.youtube.com/watch?v=z53zPIDmT80">4.8 DPS/Side (Right)</a>
* - <a href="https://www.youtube.com/watch?v=zsPPuQm3uIc">5.4 DPS/Side (Left)</a>
*
* @author Ritsu, Estrayl
*/
@InstanceID(300560000)
public class ShugoImperialTombInstance extends GeneralInstanceHandler {
private final List<Future<?>> spawnTasks = new ArrayList<>();
private final AtomicInteger stage = new AtomicInteger();
public ShugoImperialTombInstance(WorldMapInstance instance) {
super(instance);
}
@Override
public void onInstanceCreate() {
spawn(831110, 177.84564f, 233.56879f, 536.16974f, (byte) 80); // Crown Prince's Admirer
spawn(831111, 342.11075f, 426.13712f, 294.75793f, (byte) 80); // Empress' Admirer
spawn(831112, 437.05875f, 99.71092f, 212.20023f, (byte) 10); // Emperor's Admirer
}
@Override
public void onInstanceDestroy() {
cancelTasks();
}
@Override
public void onEnterInstance(final Player player) {
applyTransformation(player);
}
private void applyTransformation(Player player) {
int skillId = switch (stage.get()) {
case 3 -> player.getRace() == Race.ASMODIANS ? 21105 : 21096;
case 2 -> player.getRace() == Race.ASMODIANS ? 21104 : 21095;
default -> player.getRace() == Race.ASMODIANS ? 21103 : 21094;
};
ThreadPoolManager.getInstance().schedule(() -> SkillEngine.getInstance().applyEffectDirectly(skillId, player, player), 1000);
}
@Override
public void onDie(Npc npc) {
switch (npc.getNpcId()) {
case 219508: // S1 Diligent Kobold Worker
case 219509: // S1 Fierce Kobold Foreman
case 219510: // S1 Kobold Looter
case 219511: // S1 Krall Lookout
case 219512: // S1 Krall Lookout Commander
case 219513: // S1 Swift Krall Graverobber
case 219516: // S2 Diligent Kobold Worker
case 219517: // S2 Fierce Kobold Foreman
case 219518: // S2 Kobold Looter
case 219519: // S2 Krall Lookout
case 219520: // S2 Krall Lookout Commander
case 219521: // S2 Swift Krall Graverobber
case 219524: // S3 Diligent Kobold Worker
case 219525: // S3 Fierce Kobold Foreman
case 219526: // S3 Kobold Looter
case 219527: // S3 Krall Lookout
case 219528: // S3 Krall Lookout Commander
case 219529: // S3 Swift Krall Graverobber
case 831250: // Imperial Obelisk
case 831251: // Imperial Obelisk
break;
case 219514: // Strong Kobold Worker
onChangeStageList(StageList.START_STAGE_1_PHASE_2);
break;
case 219515: // Powerful Kobold Foreman
spawn(831114, 177.87117f, 233.5641f, 536.16974f, (byte) 80); // Crown Prince's Delighted Admirer
break;
case 219522: // ELite Krall Lookout
onChangeStageList(StageList.START_STAGE_2_PHASE_2);
break;
case 219523: // Elite Krall Lookout Leader
spawnBonusStage2();
spawn(831115, 330.54459f, 428.68497f, 294.76053f, (byte) 116); // Empress' Delighted Admirer
break;
case 219530: // Letu Erezat
onChangeStageList(StageList.START_STAGE_3_PHASE_2);
break;
case 219531: // Captain Lediar
deleteAliveNpcs(831250, 831251, 831305); // Towers
spawn(831350, 450.61487f, 105.30411f, 212.20023f, (byte) 70); // Imperial Shrine
spawn(831116, 330.54459f, 428.68497f, 294.76053f, (byte) 116); // Emperor's Delighted Admirer
spawnChests();
spawnExitPortals();
break;
case 831130: // Crown Prince's Monument
cancelTasks();
despawnNpcs();
spawn(831306, 177.87117f, 233.5641f, 536.16974f, (byte) 80); // Crown Prince's Disappointed Admirer
break;
case 831304: // Empress' Monument
cancelTasks();
despawnNpcs();
spawn(831195, 330.54459f, 428.68497f, 294.76053f, (byte) 116); // Empress' Disappointed Admirer
break;
case 831305: // Emperor's Monument
cancelTasks();
despawnNpcs();
spawn(831307, 436.186f, 99.208008f, 212.20023f, (byte) 80); // Emperor's Disappointed Admirer
spawn(831350, 451.58344f, 105.55769f, 212.20023f, (byte) 0); // Imperial Shrine
spawnChests();
spawnExitPortals();
break;
}
}
@Override
public void onChangeStageList(StageList list) {
switch (list) {
case START_STAGE_1_PHASE_1:
if (!stage.compareAndSet(0, 1))
return;
// Defense towers
spawn(831251, 186.37216f, 226.88597f, 535.81213f, (byte) 0);
spawn(831250, 169.97723f, 239.81743f, 535.81213f, (byte) 0);
spawn(831130, 170.58615f, 224.70198f, 535.81213f, (byte) 0);
sendMsg(SM_SYSTEM_MESSAGE.STR_IDEVENT01_S1_START());
// Wave 1
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219508, 204.39177f, 288.3569f, 550.68805f, "3005600001");
// Right 2
sp(219508, 222.11205f, 274.04495f, 550.68805f, "3005600016");
}, 2000));
// Wave 2
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219508, 204.39177f, 288.3569f, 550.68805f, "3005600001");
// Right 2
sp(219508, 222.11205f, 274.04495f, 550.68805f, "3005600016");
}, 6000));
// Wave 3
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219508, 204.39177f, 288.3569f, 550.68805f, "3005600001");
// Left 2
sp(219508, 205.88284f, 287.48337f, 550.68805f, "3005600006");
// Right 2
sp(219508, 222.11205f, 274.04495f, 550.68805f, "3005600016");
}, 10000));
// Wave 4
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219508, 204.39177f, 288.3569f, 550.68805f, "3005600001");
// Right 1
sp(219508, 220.89374f, 275.24585f, 550.68805f, "3005600011");
// Right 2
sp(219508, 222.11205f, 274.04495f, 550.68805f, "3005600016");
}, 14000));
// Wave 5
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219508, 204.39177f, 288.3569f, 550.68805f, "3005600001");
sp(219508, 203.40654f, 286.93723f, 550.68805f, "3005600002");
// Left 2
sp(219508, 205.88284f, 287.48337f, 550.68805f, "3005600006");
// Right 1
sp(219508, 220.89374f, 275.24585f, 550.68805f, "3005600011");
// Right 2
sp(219508, 222.11205f, 274.04495f, 550.68805f, "3005600016");
sp(219509, 221.26567f, 272.89868f, 550.68805f, "3005600017");
}, 22000));
// Wave 6 - Retail: Left lanes are delayed by 3s
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219508, 204.39177f, 288.3569f, 550.68805f, "3005600001");
sp(219509, 203.40654f, 286.93723f, 550.68805f, "3005600002");
// Left 2
sp(219508, 205.88284f, 287.48337f, 550.68805f, "3005600006");
sp(219509, 205.05261f, 286.29807f, 550.68805f, "3005600007");
// Right 1
sp(219508, 220.89374f, 275.24585f, 550.68805f, "3005600011");
sp(219509, 219.7629f, 273.9441f, 550.68805f, "3005600012");
// Right 2
sp(219508, 222.11205f, 274.04495f, 550.68805f, "3005600016");
sp(219509, 221.26567f, 272.89868f, 550.68805f, "3005600017");
}, 26000));
// Bonus Wave 1
spawnTasks.add(ThreadPoolManager.getInstance().schedule(this::startBonusStage1, 35000));
// Wave 7
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219509, 204.39177f, 288.3569f, 550.68805f, "3005600001");
sp(219508, 203.40654f, 286.93723f, 550.68805f, "3005600002");
// Left 2
sp(219508, 205.88284f, 287.48337f, 550.68805f, "3005600006");
sp(219508, 205.05261f, 286.29807f, 550.68805f, "3005600007");
// Right 1
sp(219508, 220.89374f, 275.24585f, 550.68805f, "3005600011");
// Right 2
sp(219508, 222.11205f, 274.04495f, 550.68805f, "3005600016");
}, 52000));
// Wave 8
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 2
sp(219508, 205.88284f, 287.48337f, 550.68805f, "3005600006");
sp(219508, 205.05261f, 286.29807f, 550.68805f, "3005600007");
// Right 1
sp(219508, 220.89374f, 275.24585f, 550.68805f, "3005600011");
sp(219508, 219.7629f, 273.9441f, 550.68805f, "3005600012");
// Right 2
sp(219509, 222.11205f, 274.04495f, 550.68805f, "3005600016");
sp(219508, 221.26567f, 272.89868f, 550.68805f, "3005600017");
}, 58000));
// Wave 9
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219508, 204.39177f, 288.3569f, 550.68805f, "3005600001");
sp(219508, 203.40654f, 286.93723f, 550.68805f, "3005600002");
// Left 2
sp(219508, 205.88284f, 287.48337f, 550.68805f, "3005600006");
// Right 1
sp(219509, 220.89374f, 275.24585f, 550.68805f, "3005600011");
sp(219508, 219.7629f, 273.9441f, 550.68805f, "3005600012");
sp(219508, 219.07242f, 273.14923f, 550.68805f, "3005600013");
// Right 2
sp(219509, 222.11205f, 274.04495f, 550.68805f, "3005600016");
sp(219508, 221.26567f, 272.89868f, 550.68805f, "3005600017");
sp(219508, 220.28874f, 271.5831f, 550.68805f, "3005600018");
}, 66000));
// Wave 10
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219509, 204.39177f, 288.3569f, 550.68805f, "3005600001");
sp(219508, 203.40654f, 286.93723f, 550.68805f, "3005600002");
sp(219508, 202.45816f, 285.63885f, 550.68805f, "3005600003");
// Left 2
sp(219509, 205.88284f, 287.48337f, 550.68805f, "3005600006");
sp(219508, 205.05261f, 286.29807f, 550.68805f, "3005600007");
sp(219508, 204.04073f, 284.8664f, 550.68805f, "3005600008");
// Right 1
sp(219508, 220.89374f, 275.24585f, 550.68805f, "3005600011");
sp(219508, 219.7629f, 273.9441f, 550.68805f, "3005600012");
// Right 2
sp(219508, 222.11205f, 274.04495f, 550.68805f, "3005600016");
}, 73000));
// Wave 11
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
handleBossSpawn(list);
// Left 1
sp(219509, 203.40654f, 286.93723f, 550.68805f, "3005600002");
sp(219509, 202.45816f, 285.63885f, 550.68805f, "3005600003");
// Left 2
sp(219509, 205.05261f, 286.29807f, 550.68805f, "3005600007");
sp(219508, 204.04073f, 284.8664f, 550.68805f, "3005600008");
// Right 1
sp(219509, 219.7629f, 273.9441f, 550.68805f, "3005600012");
sp(219508, 219.07242f, 273.14923f, 550.68805f, "3005600013");
// Right 2
sp(219509, 221.26567f, 272.89868f, 550.68805f, "3005600017");
sp(219509, 220.28874f, 271.5831f, 550.68805f, "3005600018");
}, 83000));
break;
case START_STAGE_1_PHASE_2:
sendMsg(SM_SYSTEM_MESSAGE.STR_IDEVENT01_PHASE03());
spawn(219505, 199.23898f, 280.70059f, 550.49426f, (byte) 0);
spawn(219505, 217.23492f, 266.69803f, 550.49426f, (byte) 0);
spawn(219544, 210.49338f, 275.42099f, 550.49426f, (byte) 0);
sendMsg(SM_SYSTEM_MESSAGE.STR_IDEVENT01_PHASE04(), 5000);
ThreadPoolManager.getInstance().schedule(() -> deleteAliveNpcs(219544, 219505), 10000);
// Wave 1
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219508, 204.39177f, 288.3569f, 550.68805f, "3005600001");
// Left 2
sp(219508, 205.88284f, 287.48337f, 550.68805f, "3005600006");
// Right 1
sp(219509, 220.89374f, 275.24585f, 550.68805f, "3005600011");
sp(219508, 219.7629f, 273.9441f, 550.68805f, "3005600012");
sp(219508, 219.07242f, 273.14923f, 550.68805f, "3005600013");
// Right 2
sp(219509, 222.11205f, 274.04495f, 550.68805f, "3005600016");
sp(219508, 221.26567f, 272.89868f, 550.68805f, "3005600017");
sp(219508, 220.28874f, 271.5831f, 550.68805f, "3005600018");
}, 17000));
// Wave 2
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219509, 204.39177f, 288.3569f, 550.68805f, "3005600001");
sp(219508, 203.40654f, 286.93723f, 550.68805f, "3005600002");
sp(219508, 202.45816f, 285.63885f, 550.68805f, "3005600003");
// Left 2
sp(219509, 205.88284f, 287.48337f, 550.68805f, "3005600006");
sp(219508, 205.05261f, 286.29807f, 550.68805f, "3005600007");
sp(219508, 204.04073f, 284.8664f, 550.68805f, "3005600008");
// Right 1
sp(219508, 220.89374f, 275.24585f, 550.68805f, "3005600011");
// Right 2
sp(219508, 222.11205f, 274.04495f, 550.68805f, "3005600016");
}, 23000));
// Wave 3
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219508, 204.39177f, 288.3569f, 550.68805f, "3005600001");
sp(219509, 203.40654f, 286.93723f, 550.68805f, "3005600002");
// Left 2
sp(219508, 205.88284f, 287.48337f, 550.68805f, "3005600006");
sp(219509, 205.05261f, 286.29807f, 550.68805f, "3005600007");
// Right 1
sp(219508, 220.89374f, 275.24585f, 550.68805f, "3005600011");
sp(219509, 219.7629f, 273.9441f, 550.68805f, "3005600012");
// Right 2
sp(219508, 222.11205f, 274.04495f, 550.68805f, "3005600016");
sp(219509, 221.26567f, 272.89868f, 550.68805f, "3005600017");
}, 29000));
// Wave 4
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219509, 204.39177f, 288.3569f, 550.68805f, "3005600001");
sp(219509, 203.40654f, 286.93723f, 550.68805f, "3005600002");
sp(219508, 202.45816f, 285.63885f, 550.68805f, "3005600003");
sp(219508, 201.28186f, 284.0284f, 550.68805f, "3005600004");
sp(219508, 200.2524f, 282.61893f, 550.49426f, "3005600005");
// Left 2
sp(219509, 205.88284f, 287.48337f, 550.68805f, "3005600006");
sp(219509, 205.05261f, 286.29807f, 550.68805f, "3005600007");
sp(219508, 204.04073f, 284.8664f, 550.68805f, "3005600008");
sp(219508, 203.05289f, 283.4688f, 550.68805f, "3005600009");
sp(219508, 202.13564f, 282.1711f, 550.68805f, "3005600010");
}, 36000));
// Wave 5
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Right 1
sp(219509, 220.89374f, 275.24585f, 550.68805f, "3005600011");
sp(219509, 219.7629f, 273.9441f, 550.68805f, "3005600012");
sp(219508, 219.07242f, 273.14923f, 550.68805f, "3005600013");
sp(219508, 218.20207f, 272.14728f, 550.68805f, "3005600014");
sp(219508, 217.20403f, 270.99832f, 550.68805f, "3005600015");
// Right 2
sp(219509, 222.11205f, 274.04495f, 550.68805f, "3005600016");
sp(219509, 221.26567f, 272.89868f, 550.68805f, "3005600017");
sp(219508, 220.28874f, 271.5831f, 550.68805f, "3005600018");
sp(219508, 219.52791f, 270.55853f, 550.68805f, "3005600019");
sp(219508, 218.52042f, 269.20172f, 550.49426f, "3005600020");
}, 46000));
// Wave 6
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219508, 204.39177f, 288.3569f, 550.68805f, "3005600001");
sp(219509, 203.40654f, 286.93723f, 550.68805f, "3005600002");
// Left 2
sp(219508, 205.88284f, 287.48337f, 550.68805f, "3005600006");
sp(219508, 205.05261f, 286.29807f, 550.68805f, "3005600007");
// Right 1
sp(219508, 220.89374f, 275.24585f, 550.68805f, "3005600011");
sp(219508, 219.7629f, 273.9441f, 550.68805f, "3005600012");
// Right 2
sp(219508, 222.11205f, 274.04495f, 550.68805f, "3005600016");
sp(219509, 221.26567f, 272.89868f, 550.68805f, "3005600017");
}, 56000));
// Wave 7
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
handleBossSpawn(list);
// Left 1
sp(219509, 204.39177f, 288.3569f, 550.68805f, "3005600001");
sp(219508, 203.40654f, 286.93723f, 550.68805f, "3005600002");
sp(219508, 201.28186f, 284.0284f, 550.68805f, "3005600004");
// Left 2
sp(219509, 205.88284f, 287.48337f, 550.68805f, "3005600006");
sp(219508, 205.05261f, 286.29807f, 550.68805f, "3005600007");
sp(219508, 203.05289f, 283.4688f, 550.68805f, "3005600009");
// Right 1
sp(219509, 220.89374f, 275.24585f, 550.68805f, "3005600011");
sp(219508, 219.7629f, 273.9441f, 550.68805f, "3005600012");
sp(219508, 218.20207f, 272.14728f, 550.68805f, "3005600014");
// Right 2
sp(219509, 222.11205f, 274.04495f, 550.68805f, "3005600016");
sp(219508, 221.26567f, 272.89868f, 550.68805f, "3005600017");
sp(219508, 219.52791f, 270.55853f, 550.68805f, "3005600019");
}, 66000));
break;
case START_STAGE_2_PHASE_1:
if (!stage.compareAndSet(1, 2))
return;
// Defense towers
spawn(831251, 342.2613f, 436.7085f, 294.75647f, (byte) 0);
spawn(831304, 340.3823f, 426.19424f, 294.75742f, (byte) 0);
spawn(831250, 338.8206f, 415.69327f, 294.76065f, (byte) 0);
// Transformation device
spawn(831096, 307.86002f, 433.87598f, 298.31903f, (byte) 0);
sendMsg(SM_SYSTEM_MESSAGE.STR_IDEVENT01_S2_START());
// Wave 1
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219516, 306.54364f, 420.04468f, 296.40808f, "3005600021");
sp(219516, 307.4044f, 418.00693f, 296.40808f, "3005600022");
sp(219516, 308.3013f, 416.0561f, 296.40808f, "3005600023");
// Left 2
sp(219516, 308.5412f, 420.81482f, 296.40808f, "3005600026");
sp(219516, 309.58606f, 419.21835f, 296.40808f, "3005600027");
sp(219516, 310.2743f, 416.95712f, 296.40808f, "3005600028");
// Right 1
sp(219517, 314.70178f, 444.68613f, 296.40808f, "3005600041");
sp(219517, 316.14655f, 445.92197f, 296.40808f, "3005600042");
sp(219517, 317.91745f, 446.97937f, 296.40808f, "3005600043");
// Right 2
sp(219517, 312.98706f, 447.28857f, 296.40808f, "3005600046");
sp(219517, 314.63693f, 448.43115f, 296.40808f, "3005600047");
sp(219517, 316.495f, 449.23416f, 296.40808f, "3005600048");
}, 2000));
// Wave 2
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219517, 306.54364f, 420.04468f, 296.40808f, "3005600021");
sp(219516, 307.4044f, 418.00693f, 296.40808f, "3005600022");
sp(219516, 308.3013f, 416.0561f, 296.40808f, "3005600023");
// Left 2
sp(219517, 308.5412f, 420.81482f, 296.40808f, "3005600026");
sp(219516, 309.58606f, 419.21835f, 296.40808f, "3005600027");
sp(219516, 310.2743f, 416.95712f, 296.40808f, "3005600028");
// Right 1
sp(219519, 314.70178f, 444.68613f, 296.40808f, "3005600041");
sp(219519, 316.14655f, 445.92197f, 296.40808f, "3005600042");
sp(219517, 317.91745f, 446.97937f, 296.40808f, "3005600043");
// Right 2
sp(219519, 312.98706f, 447.28857f, 296.40808f, "3005600046");
sp(219519, 314.63693f, 448.43115f, 296.40808f, "3005600047");
sp(219517, 316.495f, 449.23416f, 296.40808f, "3005600048");
}, 9000));
// Wave 3
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219517, 306.54364f, 420.04468f, 296.40808f, "3005600021");
sp(219517, 307.4044f, 418.00693f, 296.40808f, "3005600022");
sp(219517, 308.3013f, 416.0561f, 296.40808f, "3005600023");
// Left 2
sp(219517, 308.5412f, 420.81482f, 296.40808f, "3005600026");
sp(219517, 309.58606f, 419.21835f, 296.40808f, "3005600027");
sp(219517, 310.2743f, 416.95712f, 296.40808f, "3005600028");
// Mid 1
sp(219516, 316.14932f, 430.78998f, 294.58875f, "3005600031");
sp(219516, 317.72842f, 430.33682f, 294.58875f, "3005600032");
// Mid 2
sp(219516, 316.7461f, 433.27048f, 294.58875f, "3005600036");
sp(219516, 318.1597f, 432.42426f, 294.58875f, "3005600037");
// Right 1
sp(219516, 314.70178f, 444.68613f, 296.40808f, "3005600041");
sp(219516, 316.14655f, 445.92197f, 296.40808f, "3005600042");
sp(219516, 317.91745f, 446.97937f, 296.40808f, "3005600043");
// Right 2
sp(219516, 312.98706f, 447.28857f, 296.40808f, "3005600046");
sp(219516, 314.63693f, 448.43115f, 296.40808f, "3005600047");
sp(219516, 316.495f, 449.23416f, 296.40808f, "3005600048");
}, 17000));
// Wave 4
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219519, 306.54364f, 420.04468f, 296.40808f, "3005600021");
sp(219519, 307.4044f, 418.00693f, 296.40808f, "3005600022");
sp(219517, 308.3013f, 416.0561f, 296.40808f, "3005600023");
// Left 2
sp(219519, 308.5412f, 420.81482f, 296.40808f, "3005600026");
sp(219519, 309.58606f, 419.21835f, 296.40808f, "3005600027");
sp(219517, 310.2743f, 416.95712f, 296.40808f, "3005600028");
// Mid 1 Run
sp(219521, 316.14932f, 430.78998f, 294.58875f, "3005600031", true);
sp(219521, 317.72842f, 430.33682f, 294.58875f, "3005600032", true);
// Mid 2 Run
sp(219521, 316.7461f, 433.27048f, 294.58875f, "3005600036", true);
sp(219521, 318.1597f, 432.42426f, 294.58875f, "3005600037", true);
// Right 1
sp(219517, 314.70178f, 444.68613f, 296.40808f, "3005600041");
sp(219516, 316.14655f, 445.92197f, 296.40808f, "3005600042");
sp(219516, 317.91745f, 446.97937f, 296.40808f, "3005600043");
// Right 2
sp(219517, 312.98706f, 447.28857f, 296.40808f, "3005600046");
sp(219516, 314.63693f, 448.43115f, 296.40808f, "3005600047");
sp(219516, 316.495f, 449.23416f, 296.40808f, "3005600048");
}, 25000));
// Wave 5
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219516, 306.54364f, 420.04468f, 296.40808f, "3005600021");
sp(219516, 307.4044f, 418.00693f, 296.40808f, "3005600022");
sp(219516, 308.3013f, 416.0561f, 296.40808f, "3005600023");
// Left 2
sp(219517, 308.5412f, 420.81482f, 296.40808f, "3005600026");
sp(219517, 309.58606f, 419.21835f, 296.40808f, "3005600027");
sp(219517, 310.2743f, 416.95712f, 296.40808f, "3005600028");
// Mid 1 Run
sp(219526, 316.14932f, 430.78998f, 294.58875f, "3005600031");
sp(219516, 317.72842f, 430.33682f, 294.58875f, "3005600032");
sp(219521, 319.82697f, 429.69153f, 294.58875f, "3005600033");
// Mid 2 Run
sp(219526, 316.7461f, 433.27048f, 294.58875f, "3005600036");
sp(219521, 318.1597f, 432.42426f, 294.58875f, "3005600037");
sp(219521, 319.61404f, 432.3442f, 294.58875f, "3005600038");
// Right 1
sp(219517, 314.70178f, 444.68613f, 296.40808f, "3005600041");
sp(219517, 316.14655f, 445.92197f, 296.40808f, "3005600042");
sp(219517, 317.91745f, 446.97937f, 296.40808f, "3005600043");
// Right 2
sp(219516, 312.98706f, 447.28857f, 296.40808f, "3005600046");
sp(219516, 314.63693f, 448.43115f, 296.40808f, "3005600047");
sp(219516, 316.495f, 449.23416f, 296.40808f, "3005600048");
}, 35000));
// Wave 6
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219516, 306.54364f, 420.04468f, 296.40808f, "3005600021");
sp(219516, 307.4044f, 418.00693f, 296.40808f, "3005600022");
// Left 2
sp(219517, 308.5412f, 420.81482f, 296.40808f, "3005600026");
// Right 1
sp(219519, 314.70178f, 444.68613f, 296.40808f, "3005600041");
sp(219519, 316.14655f, 445.92197f, 296.40808f, "3005600042");
sp(219517, 317.91745f, 446.97937f, 296.40808f, "3005600043");
// Right 2
sp(219519, 312.98706f, 447.28857f, 296.40808f, "3005600046");
sp(219519, 314.63693f, 448.43115f, 296.40808f, "3005600047");
sp(219517, 316.495f, 449.23416f, 296.40808f, "3005600048");
}, 47000));
// Wave 7
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219517, 306.54364f, 420.04468f, 296.40808f, "3005600021");
sp(219517, 307.4044f, 418.00693f, 296.40808f, "3005600022");
sp(219517, 308.3013f, 416.0561f, 296.40808f, "3005600023");
// Left 2
sp(219517, 308.5412f, 420.81482f, 296.40808f, "3005600026");
sp(219517, 309.58606f, 419.21835f, 296.40808f, "3005600027");
sp(219517, 310.2743f, 416.95712f, 296.40808f, "3005600028");
// Mid 1 Run
sp(219521, 316.14932f, 430.78998f, 294.58875f, "3005600031", true);
// Mid 2 Run
sp(219521, 316.7461f, 433.27048f, 294.58875f, "3005600036", true);
// Right 1
sp(219516, 314.70178f, 444.68613f, 296.40808f, "3005600041");
// Right 2
sp(219516, 312.98706f, 447.28857f, 296.40808f, "3005600046");
sp(219516, 314.63693f, 448.43115f, 296.40808f, "3005600047");
}, 58000));
// Wave 8
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
handleBossSpawn(list);
// Left 1
sp(219517, 306.54364f, 420.04468f, 296.40808f, "3005600021");
sp(219517, 307.4044f, 418.00693f, 296.40808f, "3005600022");
sp(219516, 308.3013f, 416.0561f, 296.40808f, "3005600023");
// Left 2
sp(219516, 309.58606f, 419.21835f, 296.40808f, "3005600027");
// Right 1
sp(219517, 316.14655f, 445.92197f, 296.40808f, "3005600042");
sp(219521, 317.91745f, 446.97937f, 296.40808f, "3005600043", true);
sp(219516, 319.68094f, 447.8982f, 296.40808f, "3005600044");
// Right 2
sp(219517, 312.98706f, 447.28857f, 296.40808f, "3005600046");
sp(219517, 314.63693f, 448.43115f, 296.40808f, "3005600047");
sp(219516, 316.495f, 449.23416f, 296.40808f, "3005600048");
sp(219516, 318.1497f, 450.4274f, 296.40808f, "3005600049");
}, 68000));
break;
case START_STAGE_2_PHASE_2:
sendMsg(SM_SYSTEM_MESSAGE.STR_IDEVENT01_PHASE());
spawn(219544, 316.4301f, 431.30615f, 294.58875f, (byte) 0);
spawn(219505, 319.37946f, 438.7644f, 294.58875f, (byte) 0);
spawn(219505, 316.30917f, 422.88278f, 294.58875f, (byte) 0);
sendMsg(SM_SYSTEM_MESSAGE.STR_IDEVENT01_PHASE04(), 5000);
ThreadPoolManager.getInstance().schedule(() -> deleteAliveNpcs(219544, 219505), 10000);
// Wave 1
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219517, 306.54364f, 420.04468f, 296.40808f, "3005600021");
sp(219517, 307.4044f, 418.00693f, 296.40808f, "3005600022");
// Left 2
sp(219519, 308.5412f, 420.81482f, 296.40808f, "3005600026");
sp(219517, 309.58606f, 419.21835f, 296.40808f, "3005600027");
// Mid 1
sp(219519, 316.14932f, 430.78998f, 294.58875f, "3005600031");
// Mid 2
sp(219519, 316.7461f, 433.27048f, 294.58875f, "3005600036");
// Right 1
sp(219517, 314.70178f, 444.68613f, 296.40808f, "3005600041");
sp(219517, 316.14655f, 445.92197f, 296.40808f, "3005600042");
// Right 2
sp(219519, 312.98706f, 447.28857f, 296.40808f, "3005600046");
sp(219517, 314.63693f, 448.43115f, 296.40808f, "3005600047");
}, 14000));
// Wave 2
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1 Run
sp(219521, 306.54364f, 420.04468f, 296.40808f, "3005600021", true);
// Left 2 Run
sp(219521, 308.5412f, 420.81482f, 296.40808f, "3005600026", true);
sp(219521, 309.58606f, 419.21835f, 296.40808f, "3005600027", true);
// Mid 1 Run
sp(219521, 316.14932f, 430.78998f, 294.58875f, "3005600031", true);
sp(219521, 317.72842f, 430.33682f, 294.58875f, "3005600032", true);
// Mid 2 Run
sp(219521, 316.7461f, 433.27048f, 294.58875f, "3005600036", true);
// Right 1 Run
sp(219521, 314.70178f, 444.68613f, 296.40808f, "3005600041", true);
sp(219521, 316.14655f, 445.92197f, 296.40808f, "3005600042", true);
// Right 2 Run
sp(219521, 312.98706f, 447.28857f, 296.40808f, "3005600046", true);
}, 21000));
// Wave 3
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219516, 306.54364f, 420.04468f, 296.40808f, "3005600021");
sp(219516, 307.4044f, 418.00693f, 296.40808f, "3005600022");
sp(219516, 308.3013f, 416.0561f, 296.40808f, "3005600023");
// Left 2
sp(219516, 308.5412f, 420.81482f, 296.40808f, "3005600026");
sp(219516, 309.58606f, 419.21835f, 296.40808f, "3005600027");
sp(219516, 310.2743f, 416.95712f, 296.40808f, "3005600028");
// Mid 1
sp(219516, 316.14932f, 430.78998f, 294.58875f, "3005600031");
sp(219516, 317.72842f, 430.33682f, 294.58875f, "3005600032");
// Mid 2
sp(219516, 316.7461f, 433.27048f, 294.58875f, "3005600036");
sp(219516, 318.1597f, 432.42426f, 294.58875f, "3005600037");
// Right 1
sp(219516, 314.70178f, 444.68613f, 296.40808f, "3005600041");
sp(219516, 316.14655f, 445.92197f, 296.40808f, "3005600042");
sp(219516, 317.91745f, 446.97937f, 296.40808f, "3005600043");
// Right 2
sp(219516, 312.98706f, 447.28857f, 296.40808f, "3005600046");
sp(219516, 314.63693f, 448.43115f, 296.40808f, "3005600047");
sp(219516, 316.495f, 449.23416f, 296.40808f, "3005600048");
}, 28000));
// Wave 4
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219516, 306.54364f, 420.04468f, 296.40808f, "3005600021");
sp(219516, 307.4044f, 418.00693f, 296.40808f, "3005600022");
sp(219516, 308.3013f, 416.0561f, 296.40808f, "3005600023");
// Left 2
sp(219517, 308.5412f, 420.81482f, 296.40808f, "3005600026");
// Mid 1
sp(219516, 316.14932f, 430.78998f, 294.58875f, "3005600031");
// Mid 2
sp(219517, 316.7461f, 433.27048f, 294.58875f, "3005600036");
sp(219516, 318.1597f, 432.42426f, 294.58875f, "3005600037");
sp(219521, 319.61404f, 432.3442f, 294.58875f, "3005600038", true);
// Right 1
sp(219516, 314.70178f, 444.68613f, 296.40808f, "3005600041");
// Right 2
sp(219519, 312.98706f, 447.28857f, 296.40808f, "3005600046");
sp(219516, 314.63693f, 448.43115f, 296.40808f, "3005600047");
sp(219516, 316.495f, 449.23416f, 296.40808f, "3005600048");
}, 37000));
// Wave 5
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219517, 306.54364f, 420.04468f, 296.40808f, "3005600021");
sp(219516, 307.4044f, 418.00693f, 296.40808f, "3005600022");
// Left 2
sp(219516, 308.5412f, 420.81482f, 296.40808f, "3005600026");
sp(219516, 309.58606f, 419.21835f, 296.40808f, "3005600027");
// Mid 1
sp(219516, 316.14932f, 430.78998f, 294.58875f, "3005600031");
sp(219519, 317.72842f, 430.33682f, 294.58875f, "3005600032");
// Mid 2
sp(219516, 316.7461f, 433.27048f, 294.58875f, "3005600036");
// Right 1
sp(219516, 314.70178f, 444.68613f, 296.40808f, "3005600041");
sp(219516, 316.14655f, 445.92197f, 296.40808f, "3005600042");
// Right 2
sp(219517, 312.98706f, 447.28857f, 296.40808f, "3005600046");
sp(219516, 314.63693f, 448.43115f, 296.40808f, "3005600047");
}, 46000));
// Wave 6
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
handleBossSpawn(list);
// Left 1
sp(219519, 307.4044f, 418.00693f, 296.40808f, "3005600022");
// Left 2
sp(219519, 310.2743f, 416.95712f, 296.40808f, "3005600028");
// Mid 1
sp(219516, 317.72842f, 430.33682f, 294.58875f, "3005600032");
// Mid 2
sp(219517, 316.7461f, 433.27048f, 294.58875f, "3005600036");
// Right 1
sp(219519, 317.91745f, 446.97937f, 296.40808f, "3005600043");
// Right 2
sp(219517, 312.98706f, 447.28857f, 296.40808f, "3005600046");
sp(219517, 314.63693f, 448.43115f, 296.40808f, "3005600047");
}, 54000));
break;
case START_STAGE_3_PHASE_1:
if (!stage.compareAndSet(2, 3))
return;
// Defense towers
spawn(831251, 452.33456f, 86.14286f, 214.3363f, (byte) 0);
spawn(831305, 451.58344f, 105.55769f, 212.20023f, (byte) 67);
spawn(831250, 437.19818f, 119.67343f, 214.33812f, (byte) 0);
// Transformation device
spawn(831097, 410.5438f, 86.79955f, 222.13731f, (byte) 0);
sendMsg(SM_SYSTEM_MESSAGE.STR_IDEVENT01_S3_START());
// Wave 1
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219528, 409.88763f, 56.653545f, 222.41557f, "3005600051");
sp(219528, 411.7334f, 57.51016f, 222.41104f, "3005600052");
sp(219527, 413.6849f, 58.40827f, 222.40959f, "3005600053");
// Left 2
sp(219528, 409.00763f, 58.69102f, 222.41164f, "3005600054");
sp(219528, 410.86633f, 59.55865f, 222.41025f, "3005600055");
sp(219527, 412.90878f, 60.187855f, 222.409f, "3005600056");
// Right 1
sp(219525, 388.09738f, 104.93561f, 222.41173f, "3005600061");
sp(219525, 389.956f, 105.80447f, 222.41042f, "3005600062");
// Right 2
sp(219525, 387.23022f, 106.98534f, 222.41225f, "3005600064");
sp(219525, 389.08893f, 107.85297f, 222.41093f, "3005600065");
}, 1000));
// Wave 2
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219528, 409.88763f, 56.653545f, 222.41557f, "3005600051");
sp(219528, 411.7334f, 57.51016f, 222.41104f, "3005600052");
sp(219527, 413.6849f, 58.40827f, 222.40959f, "3005600053");
// Left 2
sp(219528, 409.00763f, 58.69102f, 222.41164f, "3005600054");
sp(219528, 410.86633f, 59.55865f, 222.41025f, "3005600055");
sp(219527, 412.90878f, 60.187855f, 222.409f, "3005600056");
// Mid 1
sp(219525, 420.5633f, 90.57509f, 214.33856f, "3005600057");
sp(219525, 422.4661f, 91.43331f, 214.33856f, "3005600058");
// Mid 2
sp(219525, 419.69623f, 92.62358f, 214.33856f, "3005600059");
sp(219525, 421.59903f, 93.481804f, 214.33856f, "3005600060");
}, 7000));
// Wave 3
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219528, 409.88763f, 56.653545f, 222.41557f, "3005600051");
sp(219528, 411.7334f, 57.51016f, 222.41104f, "3005600052");
sp(219528, 413.6849f, 58.40827f, 222.40959f, "3005600053");
// Left 2
sp(219528, 409.00763f, 58.69102f, 222.41164f, "3005600054");
sp(219528, 410.86633f, 59.55865f, 222.41025f, "3005600055");
sp(219528, 412.90878f, 60.187855f, 222.409f, "3005600056");
// Mid 1
sp(219529, 420.5633f, 90.57509f, 214.33856f, "3005600057", true);
sp(219529, 422.4661f, 91.43331f, 214.33856f, "3005600058", true);
// Mid 2
sp(219529, 419.69623f, 92.62358f, 214.33856f, "3005600059", true);
sp(219529, 421.59903f, 93.481804f, 214.33856f, "3005600060", true);
}, 13000));
// Wave 4
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219528, 409.88763f, 56.653545f, 222.41557f, "3005600051");
sp(219528, 411.7334f, 57.51016f, 222.41104f, "3005600052");
sp(219527, 413.6849f, 58.40827f, 222.40959f, "3005600053");
// Left 2
sp(219528, 409.00763f, 58.69102f, 222.41164f, "3005600054");
sp(219528, 410.86633f, 59.55865f, 222.41025f, "3005600055");
sp(219527, 412.90878f, 60.187855f, 222.409f, "3005600056");
// Right 1
sp(219529, 388.09738f, 104.93561f, 222.41173f, "3005600061", true);
sp(219529, 389.956f, 105.80447f, 222.41042f, "3005600062", true);
// Right 2
sp(219529, 387.23022f, 106.98534f, 222.41225f, "3005600064", true);
sp(219529, 389.08893f, 107.85297f, 222.41093f, "3005600065", true);
}, 19000));
// Wave 5
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219528, 409.88763f, 56.653545f, 222.41557f, "3005600051");
sp(219528, 411.7334f, 57.51016f, 222.41104f, "3005600052");
sp(219528, 413.6849f, 58.40827f, 222.40959f, "3005600053");
// Left 2
sp(219528, 409.00763f, 58.69102f, 222.41164f, "3005600054");
sp(219528, 410.86633f, 59.55865f, 222.41025f, "3005600055");
sp(219528, 412.90878f, 60.187855f, 222.409f, "3005600056");
// Wave 6
// Mid 1
sp(219524, 420.5633f, 90.57509f, 214.33856f, "3005600057");
sp(219524, 422.4661f, 91.43331f, 214.33856f, "3005600058");
// Mid 2
sp(219524, 419.69623f, 92.62358f, 214.33856f, "3005600059");
sp(219524, 421.59903f, 93.481804f, 214.33856f, "3005600060");
}, 25000));
// Bonus spawn wave 1
spawnTasks.add(ThreadPoolManager.getInstance().schedule(this::startBonusStage3, 38000));
// Wave 7
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Right 1
sp(219528, 388.09738f, 104.93561f, 222.41173f, "3005600061");
sp(219528, 389.956f, 105.80447f, 222.41042f, "3005600062");
sp(219527, 391.97464f, 106.80167f, 222.40909f, "3005600063");
// Right 2
sp(219528, 387.23022f, 106.98534f, 222.41225f, "3005600064");
sp(219527, 389.08893f, 107.85297f, 222.41093f, "3005600065");
sp(219527, 390.72717f, 108.61628f, 222.40979f, "3005600066");
}, 55000));
// Wave 8
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Mid 1
sp(219524, 420.5633f, 90.57509f, 214.33856f, "3005600057");
sp(219524, 422.4661f, 91.43331f, 214.33856f, "3005600058");
// Mid 2
sp(219524, 419.69623f, 92.62358f, 214.33856f, "3005600059");
sp(219524, 421.59903f, 93.481804f, 214.33856f, "3005600060");
// Right 1
sp(219528, 388.09738f, 104.93561f, 222.41173f, "3005600061");
sp(219528, 389.956f, 105.80447f, 222.41042f, "3005600062");
sp(219528, 391.97464f, 106.80167f, 222.40909f, "3005600063");
// Right 2
sp(219528, 387.23022f, 106.98534f, 222.41225f, "3005600064");
sp(219528, 389.08893f, 107.85297f, 222.41093f, "3005600065");
sp(219528, 390.72717f, 108.61628f, 222.40979f, "3005600066");
}, 61000));
// Wave 9
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
handleBossSpawn(list);
// Left 1
sp(219525, 409.88763f, 56.653545f, 222.41557f, "3005600051");
sp(219525, 411.7334f, 57.51016f, 222.41104f, "3005600052");
// Left 2
sp(219525, 409.00763f, 58.69102f, 222.41164f, "3005600054");
sp(219525, 410.86633f, 59.55865f, 222.41025f, "3005600055");
// Mid 1
sp(219525, 420.5633f, 90.57509f, 214.33856f, "3005600057");
sp(219525, 422.4661f, 91.43331f, 214.33856f, "3005600058");
// Mid 2
sp(219525, 419.69623f, 92.62358f, 214.33856f, "3005600059");
// Right 1
sp(219528, 388.09738f, 104.93561f, 222.41173f, "3005600061");
sp(219528, 389.956f, 105.80447f, 222.41042f, "3005600062");
sp(219527, 391.97464f, 106.80167f, 222.40909f, "3005600063");
// Right 2
sp(219528, 387.23022f, 106.98534f, 222.41225f, "3005600064");
sp(219527, 389.08893f, 107.85297f, 222.41093f, "3005600065");
sp(219527, 390.72717f, 108.61628f, 222.40979f, "3005600066");
}, 67000));
// Wave 10
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Right 1
sp(219528, 388.09738f, 104.93561f, 222.41173f, "3005600061");
sp(219529, 389.956f, 105.80447f, 222.41042f, "3005600062", true);
sp(219529, 391.97464f, 106.80167f, 222.40909f, "3005600063", true);
// Right 2
sp(219528, 387.23022f, 106.98534f, 222.41225f, "3005600064");
sp(219528, 389.08893f, 107.85297f, 222.41093f, "3005600065");
sp(219528, 390.72717f, 108.61628f, 222.40979f, "3005600066");
}, 73000));
break;
case START_STAGE_3_PHASE_2:
sendMsg(SM_SYSTEM_MESSAGE.STR_IDEVENT01_PHASE09());
spawn(219543, 425.69678f, 85.350716f, 214.338f, (byte) 0);
spawn(219544, 418.70923f, 100.76572f, 214.33798f, (byte) 0);
spawn(219507, 421.16943f, 92.78562f, 214.33856f, (byte) 0);
sendMsg(SM_SYSTEM_MESSAGE.STR_IDEVENT01_PHASE10(), 5000);
ThreadPoolManager.getInstance().schedule(() -> deleteAliveNpcs(219543, 219544, 219507), 10000);
// Wave 1
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Mid 1
sp(219528, 420.5633f, 90.57509f, 214.33856f, "3005600057");
sp(219528, 422.4661f, 91.43331f, 214.33856f, "3005600058");
sp(219528, 424.35175f, 92.317375f, 214.33856f, "3005600058-B");
// Mid 2
sp(219528, 419.69623f, 92.62358f, 214.33856f, "3005600059");
sp(219528, 421.59903f, 93.481804f, 214.33856f, "3005600060");
sp(219528, 423.48468f, 94.36587f, 214.3483f, "3005600060-B");
}, 17000));
// Wave 2
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Mid 1
sp(219528, 420.5633f, 90.57509f, 214.33856f, "3005600057");
sp(219528, 422.4661f, 91.43331f, 214.33856f, "3005600058");
sp(219528, 424.35175f, 92.317375f, 214.33856f, "3005600058-B");
// Mid 2
sp(219528, 419.69623f, 92.62358f, 214.33856f, "3005600059");
sp(219528, 421.59903f, 93.481804f, 214.33856f, "3005600060");
sp(219528, 423.48468f, 94.36587f, 214.3483f, "3005600060-B");
}, 24000));
// Wave 3
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219525, 409.88763f, 56.653545f, 222.41557f, "3005600051");
sp(219525, 411.7334f, 57.51016f, 222.41104f, "3005600052");
// Left 2
sp(219525, 409.00763f, 58.69102f, 222.41164f, "3005600054");
sp(219525, 410.86633f, 59.55865f, 222.41025f, "3005600055");
// Mid 1
sp(219528, 420.5633f, 90.57509f, 214.33856f, "3005600057");
sp(219528, 422.4661f, 91.43331f, 214.33856f, "3005600058");
sp(219528, 424.35175f, 92.317375f, 214.33856f, "3005600058-B");
// Mid 2
sp(219528, 419.69623f, 92.62358f, 214.33856f, "3005600059");
sp(219528, 421.59903f, 93.481804f, 214.33856f, "3005600060");
sp(219528, 423.48468f, 94.36587f, 214.3483f, "3005600060-B");
}, 30000));
// Wave 4
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Mid 1
sp(219528, 420.5633f, 90.57509f, 214.33856f, "3005600057");
sp(219528, 422.4661f, 91.43331f, 214.33856f, "3005600058");
sp(219528, 424.35175f, 92.317375f, 214.33856f, "3005600058-B");
// Mid 2
sp(219528, 419.69623f, 92.62358f, 214.33856f, "3005600059");
sp(219528, 421.59903f, 93.481804f, 214.33856f, "3005600060");
sp(219528, 423.48468f, 94.36587f, 214.3483f, "3005600060-B");
// Right 1
sp(219525, 388.09738f, 104.93561f, 222.41173f, "3005600061");
sp(219525, 389.956f, 105.80447f, 222.41042f, "3005600062");
// Right 2
sp(219525, 387.23022f, 106.98534f, 222.41225f, "3005600064");
sp(219525, 389.08893f, 107.85297f, 222.41093f, "3005600065");
}, 35000));
// Wave 5
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
// Left 1
sp(219529, 409.88763f, 56.653545f, 222.41557f, "3005600051", true);
sp(219529, 411.7334f, 57.51016f, 222.41104f, "3005600052", true);
// Left 2
sp(219529, 409.00763f, 58.69102f, 222.41164f, "3005600054", true);
// Mid 1
sp(219528, 422.4661f, 91.43331f, 214.33856f, "3005600058");
sp(219528, 424.35175f, 92.317375f, 214.33856f, "3005600058-B");
// Mid 2
sp(219528, 421.59903f, 93.481804f, 214.33856f, "3005600060");
sp(219528, 423.48468f, 94.36587f, 214.3483f, "3005600060-B");
// Right 1
sp(219529, 388.09738f, 104.93561f, 222.41173f, "3005600061", true);
sp(219529, 389.956f, 105.80447f, 222.41042f, "3005600062", true);
// Right 2
sp(219529, 387.23022f, 106.98534f, 222.41225f, "3005600064", true);
}, 41000));
// Wave 6
spawnTasks.add(ThreadPoolManager.getInstance().schedule(() -> {
handleBossSpawn(list);
// Left 1
sp(219528, 411.7334f, 57.51016f, 222.41104f, "3005600052");
sp(219528, 413.6849f, 58.40827f, 222.40959f, "3005600053");
// Left 2
sp(219528, 410.86633f, 59.55865f, 222.41025f, "3005600055");
sp(219528, 412.90878f, 60.187855f, 222.409f, "3005600056");
// Mid 1
sp(219528, 422.4661f, 91.43331f, 214.33856f, "3005600058");
sp(219528, 424.35175f, 92.317375f, 214.33856f, "3005600058-B");
// Mid 2
sp(219528, 421.59903f, 93.481804f, 214.33856f, "3005600060");
sp(219528, 423.48468f, 94.36587f, 214.3483f, "3005600060-B");
// Right 1
sp(219528, 389.956f, 105.80447f, 222.41042f, "3005600062");
sp(219528, 391.97464f, 106.80167f, 222.40909f, "3005600063");
// Right 2
sp(219528, 389.08893f, 107.85297f, 222.41093f, "3005600065");
sp(219528, 390.72717f, 108.61628f, 222.40979f, "3005600066");
}, 55000));
break;
}
}
private void handleBossSpawn(StageList stageList) {
switch (stageList) {
case START_STAGE_1_PHASE_1 -> {
switch (Rnd.nextInt(2)) {
case 0 -> sp(219514, 205.88284f, 287.48337f, 550.68805f, "3005600006"); // Left
case 1 -> sp(219514, 220.89374f, 275.24585f, 550.68805f, "3005600011"); // Right
}
}
case START_STAGE_1_PHASE_2 -> {
switch (Rnd.nextInt(2)) {
case 0 -> sp(219515, 204.04073f, 284.8664f, 550.68805f, "3005600008"); // Left
case 1 -> sp(219515, 219.07242f, 273.14923f, 550.68805f, "3005600013"); // Right
}
}
case START_STAGE_2_PHASE_1 -> {
switch (Rnd.nextInt(3)) {
case 0 -> sp(219522, 308.5412f, 420.81482f, 296.40808f, "3005600026"); // Left
case 1 -> sp(219522, 316.7461f, 433.27048f, 294.58875f, "3005600036"); // Mid
case 2 -> sp(219522, 314.70178f, 444.68613f, 296.40808f, "3005600041"); // Right
}
}
case START_STAGE_2_PHASE_2 -> {
switch (Rnd.nextInt(3)) {
case 0 -> sp(219523, 308.5412f, 420.81482f, 296.40808f, "3005600026"); // Left
case 1 -> sp(219523, 316.14932f, 430.78998f, 294.58875f, "3005600031"); // Mid
case 2 -> sp(219523, 314.70178f, 444.68613f, 296.40808f, "3005600041"); // Right
}
}
case START_STAGE_3_PHASE_1 -> {
switch (Rnd.nextInt(3)) {
case 0 -> sp(219530, 412.90878f, 60.187855f, 222.409f, "3005600056"); // Left
case 1 -> sp(219530, 423.48468f, 94.36587f, 214.3483f, "30056000060-B"); // Mid
case 2 -> sp(219530, 390.72717f, 108.61628f, 222.40979f, "3005600066"); // Right
}
}
case START_STAGE_3_PHASE_2 -> {
switch (Rnd.nextInt(3)) {
case 0 -> sp(219531, 409.00763f, 58.69102f, 222.41164f, "3005600054"); // Left
case 1 -> sp(219531, 420.5633f, 90.57509f, 214.33856f, "3005600057"); // Mid
case 2 -> sp(219531, 388.09738f, 104.93561f, 222.41173f, "3005600061"); // Right
}
}
}
}
private void startBonusStage1() {
spawn(219505, 199.23898f, 280.70059f, 550.49426f, (byte) 0);
spawn(219505, 217.23492f, 266.69803f, 550.49426f, (byte) 0);
spawn(219543, 210.49338f, 275.42099f, 550.49426f, (byte) 0);
sendMsg(SM_SYSTEM_MESSAGE.STR_IDEVENT01_PHASE());
sendMsg(SM_SYSTEM_MESSAGE.STR_IDEVENT01_PHASE02(), 5000);
ThreadPoolManager.getInstance().schedule(() -> deleteAliveNpcs(219543, 219505), 11000);
}
private void spawnBonusStage2() {
spawn(219506, 318.58594f, 426.85278f, 294.58875f, (byte) 0);
spawn(219506, 319.8232f, 432.50577f, 294.58875f, (byte) 0);
spawn(219506, 316.298f, 426.3792f, 294.58875f, (byte) 0);
spawn(219506, 324.12003f, 431.1665f, 294.58875f, (byte) 0);
spawn(219506, 321.50192f, 430.2314f, 294.58875f, (byte) 0);
spawn(219506, 320.20047f, 424.94888f, 294.58875f, (byte) 0);
spawn(219506, 319.10046f, 435.9833f, 294.58875f, (byte) 0);
spawn(219506, 323.14096f, 426.51614f, 294.58875f, (byte) 0);
spawn(219506, 322.4489f, 434.38107f, 294.58875f, (byte) 0);
spawn(219543, 318.77524f, 430.0789f, 294.58875f, (byte) 0);
ThreadPoolManager.getInstance().schedule(() -> deleteAliveNpcs(219543, 219506), 6000);
}
private void startBonusStage3() {
spawn(219507, 425.69678f, 85.350716f, 214.338f, (byte) 0);
spawn(219507, 418.70923f, 100.76572f, 214.33798f, (byte) 0);
spawn(219544, 421.16943f, 92.78562f, 214.33856f, (byte) 0);
sendMsg(SM_SYSTEM_MESSAGE.STR_IDEVENT01_PHASE());
sendMsg(SM_SYSTEM_MESSAGE.STR_IDEVENT01_PHASE02(), 5000);
ThreadPoolManager.getInstance().schedule(() -> deleteAliveNpcs(219507, 219544), 11000);
}
private void spawnExitPortals() {
spawn(831118, 64.34126f, 331.66925f, 287.28214f, (byte) 0);
spawn(831118, 48.955025f, 241.34631f, 421.61823f, (byte) 0);
spawn(831118, 54.88896f, 353.18854f, 287.28244f, (byte) 0);
spawn(831118, 51.961323f, 256.28143f, 421.61823f, (byte) 0);
spawn(831118, 332.69638f, 54.43414f, 358.22095f, (byte) 0);
spawn(831118, 443.98517f, 138.95134f, 214.81421f, (byte) 80);
spawn(831118, 339.50348f, 169.87396f, 306.4693f, (byte) 0);
spawn(831118, 46.9357f, 435.19156f, 455.65244f, (byte) 0);
spawn(831118, 450.11063f, 239.98364f, 516.4457f, (byte) 0);
spawn(831118, 289.1735f, 329.22617f, 458.2218f, (byte) 0);
spawn(831118, 224.21411f, 33.678886f, 466.1734f, (byte) 0);
spawn(831118, 329.32675f, 36.599545f, 358.22098f, (byte) 0);
spawn(831118, 298.6258f, 307.70688f, 458.22186f, (byte) 0);
spawn(831118, 167.14172f, 76.387856f, 466.1734f, (byte) 0);
spawn(831118, 50.074734f, 452.7495f, 455.6524f, (byte) 0);
spawn(831118, 330.05118f, 191.39325f, 306.46924f, (byte) 0);
spawn(831118, 394.43204f, 282.6926f, 516.4457f, (byte) 0);
spawn(831118, 469.83466f, 76.66318f, 214.76643f, (byte) 0);
spawn(831118, 164.9796f, 421.7813f, 616.1734f, (byte) 0);
spawn(831118, 222.05199f, 379.07236f, 616.1734f, (byte) 0);
}
private void spawnChests() {
// Emperor's Relics 1-Key
spawn(831122, 316.1566f, 333.21307f, 456.08493f, (byte) 0);
spawn(831122, 369.00742f, 169.64816f, 306.46603f, (byte) 0);
spawn(831122, 298.8276f, 335.4352f, 458.22232f, (byte) 0);
spawn(831122, 310.1692f, 309.53632f, 458.22226f, (byte) 0);
spawn(831122, 80.64051f, 345.50037f, 285.14545f, (byte) 0);
spawn(831122, 328.34308f, 307.45993f, 458.22153f, (byte) 0);
spawn(831122, 339.49194f, 197.62344f, 306.46964f, (byte) 0);
spawn(831122, 369.3519f, 178.85245f, 306.46866f, (byte) 0);
spawn(831122, 344.67303f, 184.942f, 304.3324f, (byte) 0);
spawn(831122, 328.68756f, 316.6642f, 458.22092f, (byte) 0);
spawn(831122, 356.82092f, 195.4013f, 304.33533f, (byte) 0);
spawn(831122, 94.62696f, 331.95328f, 287.27887f, (byte) 0);
spawn(831122, 319.6168f, 309.49963f, 458.22095f, (byte) 0);
spawn(831122, 94.97144f, 341.15756f, 287.28137f, (byte) 0);
spawn(831122, 314.35663f, 321.00702f, 456.08493f, (byte) 0);
spawn(831122, 350.83353f, 171.72455f, 306.46967f, (byte) 0);
spawn(831122, 310.8757f, 348.5869f, 458.22256f, (byte) 0);
spawn(831122, 82.44047f, 357.70642f, 285.14545f, (byte) 0);
spawn(831122, 65.11149f, 359.92856f, 287.2829f, (byte) 0);
spawn(831122, 351.54004f, 210.77515f, 306.4696f, (byte) 0);
spawn(831122, 76.45307f, 334.02966f, 287.2826f, (byte) 0);
spawn(831122, 360.28113f, 171.0f, 306.4681f, (byte) 0);
spawn(831122, 77.159584f, 373.08026f, 287.2831f, (byte) 0);
spawn(831122, 355.02097f, 183.19527f, 304.3324f, (byte) 0);
spawn(831122, 305.15875f, 329.49237f, 456.08493f, (byte) 0);
spawn(831122, 71.442635f, 353.98572f, 285.14545f, (byte) 0);
spawn(831122, 304.0087f, 322.75378f, 456.0895f, (byte) 0);
spawn(831122, 345.8231f, 191.6806f, 304.3324f, (byte) 0);
spawn(831122, 85.90067f, 333.99298f, 287.28128f, (byte) 0);
spawn(831122, 70.29258f, 347.24713f, 285.14545f, (byte) 0);
// Empress' Relics 1-Key
spawn(831123, 359.7552f, 58.446693f, 358.22098f, (byte) 0);
spawn(831123, 66.76055f, 239.5818f, 421.7896f, (byte) 0);
spawn(831123, 356.41553f, 45.183434f, 358.38928f, (byte) 0);
spawn(831123, 62.997505f, 227.72667f, 421.61823f, (byte) 0);
spawn(831123, 62.569805f, 268.48575f, 423.43756f, (byte) 0);
spawn(831123, 332.38266f, 22.128136f, 360.0403f, (byte) 0);
spawn(831123, 51.071453f, 422.49442f, 457.47177f, (byte) 0);
spawn(831123, 68.73515f, 225.56467f, 421.61823f, (byte) 0);
spawn(831123, 343.7064f, 23.771324f, 358.22098f, (byte) 0);
spawn(831123, 77.04496f, 235.73196f, 421.78915f, (byte) 0);
spawn(831123, 61.485966f, 257.10004f, 421.61823f, (byte) 0);
spawn(831123, 342.19485f, 53.14469f, 358.22095f, (byte) 0);
spawn(831123, 51.673756f, 226.08348f, 423.43756f, (byte) 0);
spawn(831123, 350.34528f, 46.59707f, 358.3922f, (byte) 0);
spawn(831123, 68.13286f, 421.9756f, 455.65244f, (byte) 0);
spawn(831123, 357.19852f, 38.951546f, 358.39038f, (byte) 0);
spawn(831123, 76.44264f, 432.14288f, 455.82336f, (byte) 0);
spawn(831123, 357.75385f, 31.776619f, 358.39203f, (byte) 0);
spawn(831123, 69.63638f, 250.55241f, 421.78964f, (byte) 0);
spawn(831123, 69.03407f, 446.96335f, 455.82376f, (byte) 0);
spawn(831123, 71.916115f, 237.41977f, 421.78894f, (byte) 0);
spawn(831123, 343.2787f, 64.5304f, 360.0403f, (byte) 0);
spawn(831123, 75.70664f, 249.13878f, 421.78638f, (byte) 0);
spawn(831123, 79.046295f, 262.40204f, 421.61823f, (byte) 0);
spawn(831123, 335.87512f, 39.341072f, 358.22098f, (byte) 0);
spawn(831123, 71.3138f, 433.8307f, 455.82294f, (byte) 0);
spawn(831123, 62.395184f, 424.1376f, 455.65244f, (byte) 0);
spawn(831123, 347.46945f, 35.626457f, 358.39227f, (byte) 0);
spawn(831123, 75.887314f, 439.3178f, 455.82196f, (byte) 0);
spawn(831123, 349.44406f, 21.609322f, 358.22098f, (byte) 0);
spawn(831123, 84.264786f, 455.56992f, 455.65244f, (byte) 0);
spawn(831123, 84.867096f, 259.159f, 421.61823f, (byte) 0);
spawn(831123, 365.576f, 55.20365f, 358.22098f, (byte) 0);
spawn(831123, 55.166237f, 243.29642f, 421.61823f, (byte) 0);
spawn(831123, 66.15825f, 435.99274f, 455.82352f, (byte) 0);
spawn(831123, 54.563915f, 439.70734f, 455.65515f, (byte) 0);
spawn(831123, 61.96748f, 464.89667f, 457.47177f, (byte) 0);
spawn(831123, 75.104324f, 445.5497f, 455.821f, (byte) 0);
spawn(831123, 76.48961f, 242.90689f, 421.78745f, (byte) 0);
spawn(831123, 78.443985f, 458.81296f, 455.65244f, (byte) 0);
spawn(831123, 352.625f, 33.464424f, 358.3917f, (byte) 0);
spawn(831123, 60.883648f, 453.51096f, 455.6524f, (byte) 0);
// Crown Prince's Relics 1-Key
spawn(831124, 211.09508f, 404.05515f, 614.131f, (byte) 0);
spawn(831124, 435.39233f, 259.91364f, 514.4033f, (byte) 0);
spawn(831124, 439.626f, 265.3722f, 514.4033f, (byte) 0);
spawn(831124, 197.74788f, 404.6274f, 614.48865f, (byte) 0);
spawn(831124, 225.05302f, 390.13104f, 616.1752f, (byte) 0);
spawn(831124, 457.62457f, 263.59116f, 516.4457f, (byte) 0);
spawn(831124, 410.6319f, 261.6957f, 514.4033f, (byte) 0);
spawn(831124, 196.15181f, 386.54306f, 614.4412f, (byte) 0);
spawn(831124, 418.15936f, 255.10327f, 514.4033f, (byte) 0);
spawn(831124, 417.06314f, 293.49078f, 516.4457f, (byte) 0);
spawn(831124, 176.92763f, 431.9935f, 616.1734f, (byte) 0);
spawn(831124, 193.36438f, 399.0128f, 614.48865f, (byte) 0);
spawn(831124, 414.81146f, 267.5063f, 514.4033f, (byte) 0);
spawn(831124, 216.92516f, 385.02884f, 616.1734f, (byte) 0);
spawn(831124, 435.518f, 237.70782f, 516.4457f, (byte) 0);
spawn(831124, 427.114f, 266.71103f, 514.7609f, (byte) 0);
spawn(831124, 194.1109f, 416.6819f, 614.131f, (byte) 0);
spawn(831124, 229.9601f, 405.0212f, 616.1734f, (byte) 0);
spawn(831124, 452.7175f, 248.70099f, 516.4457f, (byte) 0);
spawn(831124, 404.5921f, 290.56342f, 516.4457f, (byte) 0);
spawn(831124, 202.80295f, 410.5095f, 614.48865f, (byte) 0);
spawn(831124, 444.58963f, 243.59877f, 516.4457f, (byte) 0);
spawn(831124, 425.51794f, 248.6267f, 514.4995f, (byte) 0);
spawn(831124, 400.0553f, 267.39f, 516.4457f, (byte) 0);
spawn(831124, 206.02621f, 397.83002f, 614.131f, (byte) 0);
spawn(831124, 402.65216f, 279.38605f, 516.4457f, (byte) 0);
spawn(831124, 181.26578f, 399.61206f, 614.30817f, (byte) 0);
spawn(831124, 207.85353f, 379.13788f, 616.1734f, (byte) 0);
spawn(831124, 189.39867f, 434.92084f, 616.1734f, (byte) 0);
spawn(831124, 422.7305f, 261.09644f, 514.7609f, (byte) 0);
spawn(831124, 172.39082f, 408.8201f, 616.1734f, (byte) 0);
spawn(831124, 188.79323f, 393.01965f, 614.131f, (byte) 0);
spawn(831124, 174.98769f, 420.8161f, 616.1734f, (byte) 0);
spawn(831124, 423.47702f, 278.7655f, 514.4033f, (byte) 0);
spawn(831124, 185.44536f, 405.42267f, 614.131f, (byte) 0);
spawn(831124, 191.12608f, 91.33438f, 466.1734f, (byte) 0);
spawn(831124, 431.77502f, 271.9439f, 514.7609f, (byte) 0);
// Special Box 3-Key
spawn(831373, 355.68063f, 20.112541f, 358.22098f, (byte) 0);
spawn(831373, 353.3523f, 59.361397f, 358.22095f, (byte) 0);
spawn(831373, 315.51196f, 327.70633f, 456.08493f, (byte) 0);
spawn(831373, 337.12244f, 31.857185f, 358.22098f, (byte) 0);
spawn(831373, 309.1074f, 320.32703f, 456.08536f, (byte) 0);
spawn(831373, 56.413555f, 235.81253f, 421.61823f, (byte) 0);
spawn(831373, 310.3064f, 326.59393f, 456.08493f, (byte) 0);
spawn(831373, 337.95398f, 47.32389f, 358.22095f, (byte) 0);
spawn(831373, 57.245094f, 251.27924f, 421.61823f, (byte) 0);
spawn(831373, 356.1763f, 189.89456f, 304.3324f, (byte) 0);
spawn(831373, 350.83453f, 194.99779f, 304.3324f, (byte) 0);
spawn(831373, 76.45408f, 357.30292f, 285.14545f, (byte) 0);
spawn(831373, 55.81123f, 432.22345f, 455.65244f, (byte) 0);
spawn(831373, 84.0355f, 368.70935f, 287.28445f, (byte) 0);
spawn(831373, 345.88846f, 212.87036f, 306.46487f, (byte) 0);
spawn(831373, 323.69205f, 313.83783f, 458.22195f, (byte) 0);
spawn(831373, 86.40266f, 348.33115f, 285.14545f, (byte) 0);
spawn(831373, 80.04646f, 443.97028f, 455.8237f, (byte) 0);
spawn(831373, 361.35767f, 43.603996f, 358.39203f, (byte) 0);
spawn(831373, 360.7831f, 186.02603f, 304.3324f, (byte) 0);
spawn(831373, 89.97593f, 338.33118f, 287.28238f, (byte) 0);
spawn(831373, 70.66881f, 244.4879f, 421.78815f, (byte) 0);
spawn(831373, 344.90024f, 204.8159f, 306.46793f, (byte) 0);
spawn(831373, 322.08545f, 330.18976f, 456.08493f, (byte) 0);
spawn(831373, 310.1702f, 332.80957f, 456.08493f, (byte) 0);
spawn(831373, 72.04109f, 459.72766f, 455.6524f, (byte) 0);
spawn(831373, 72.6434f, 263.31674f, 421.61823f, (byte) 0);
spawn(831373, 80.64878f, 247.55934f, 421.78918f, (byte) 0);
spawn(831373, 56.642773f, 447.69016f, 455.6524f, (byte) 0);
spawn(831373, 74.36943f, 420.47882f, 455.65244f, (byte) 0);
spawn(831373, 362.7498f, 192.378f, 304.3324f, (byte) 0);
spawn(831373, 74.971725f, 224.06789f, 421.61823f, (byte) 0);
spawn(831373, 70.51978f, 367.12103f, 287.28125f, (byte) 0);
spawn(831373, 364.35638f, 176.02605f, 306.46954f, (byte) 0);
spawn(831373, 88.36933f, 354.6831f, 285.14545f, (byte) 0);
spawn(831373, 305.22412f, 350.68213f, 458.21747f, (byte) 0);
spawn(831373, 358.41595f, 206.40424f, 306.47455f, (byte) 0);
spawn(831373, 76.59028f, 351.08728f, 285.14545f, (byte) 0);
spawn(831373, 71.508f, 375.17548f, 287.27805f, (byte) 0);
spawn(831373, 189.74734f, 411.19003f, 614.131f, (byte) 0);
spawn(831373, 317.75162f, 344.216f, 458.22403f, (byte) 0);
spawn(831373, 349.77173f, 182.51524f, 304.3324f, (byte) 0);
spawn(831373, 350.97073f, 188.78217f, 304.3324f, (byte) 0);
spawn(831373, 75.39127f, 344.82037f, 285.14545f, (byte) 0);
spawn(831373, 304.2359f, 342.6277f, 458.2206f, (byte) 0);
spawn(831373, 419.11346f, 273.27368f, 514.4041f, (byte) 0);
spawn(831373, 430.85223f, 255.02826f, 514.4033f, (byte) 0);
spawn(831373, 320.11877f, 323.8378f, 456.08493f, (byte) 0);
spawn(831373, 70.06651f, 440.89883f, 455.82208f, (byte) 0);
spawn(831373, 201.48613f, 392.9446f, 614.131f, (byte) 0);
spawn(831373, 351.37772f, 40.532555f, 358.3907f, (byte) 0);
spawn(831373, 81.795845f, 352.19968f, 285.14545f, (byte) 0);
}
private void sp(int npcId, float x, float y, float z, String walkerId) {
sp(npcId, x, y, z, walkerId, false);
}
private void sp(int npcId, float x, float y, float z, String walkerId, boolean isRun) {
Npc npc = (Npc) spawn(npcId, x, y, z, (byte) 0);
npc.getSpawn().setWalkerId(walkerId);
WalkManager.startWalking((NpcAI) npc.getAi());
if (isRun) {
npc.setState(CreatureState.ACTIVE, true);
} else {
npc.setState(CreatureState.WALK_MODE);
}
PacketSendUtility.broadcastPacket(npc, new SM_EMOTION(npc, EmotionType.CHANGE_SPEED, 0, npc.getObjectId()));
}
@Override
public void leaveInstance(Player player) {
TeleportService.moveToInstanceExit(player, mapId, player.getRace());
}
private void despawnNpcs() {
deleteAliveNpcs(219461, 219505, 219507, 219508, 219509, 219510, 219511, 291512, 291513, 219514, 219515, 219516, 219517, 219518, 219519, 219520,
219521, 219522, 219523, 219524, 219525, 219526, 219527, 219528, 219529, 219530, 219531, 219543, 219544, 219630);
}
private void cancelTasks() {
spawnTasks.stream().filter(task -> task != null && !task.isDone()).forEach(task -> task.cancel(true));
}
}