테스트

aion-server 4.8

Gitteol
최고관리자 · 1 · 💬 0 클론/새로받기
 4.8 61f661d · 1 commits 새로받기(Pull)
game-server/data/handlers/instance/crucible/CrucibleChallengeInstance.java
package instance.crucible;

import java.util.Set;
import java.util.concurrent.Future;

import com.aionemu.commons.utils.Rnd;
import com.aionemu.gameserver.instance.handlers.InstanceID;
import com.aionemu.gameserver.model.Race;
import com.aionemu.gameserver.model.drop.DropItem;
import com.aionemu.gameserver.model.gameobjects.Creature;
import com.aionemu.gameserver.model.gameobjects.Npc;
import com.aionemu.gameserver.model.gameobjects.player.Player;
import com.aionemu.gameserver.model.instance.InstanceProgressionType;
import com.aionemu.gameserver.model.instance.StageType;
import com.aionemu.gameserver.model.instance.playerreward.CruciblePlayerReward;
import com.aionemu.gameserver.model.templates.spawns.SpawnTemplate;
import com.aionemu.gameserver.network.aion.instanceinfo.CrucibleScoreWriter;
import com.aionemu.gameserver.network.aion.serverpackets.SM_INSTANCE_SCORE;
import com.aionemu.gameserver.network.aion.serverpackets.SM_INSTANCE_STAGE_INFO;
import com.aionemu.gameserver.network.aion.serverpackets.SM_SYSTEM_MESSAGE;
import com.aionemu.gameserver.questEngine.model.QuestState;
import com.aionemu.gameserver.questEngine.model.QuestStatus;
import com.aionemu.gameserver.services.drop.DropRegistrationService;
import com.aionemu.gameserver.services.instance.InstanceService;
import com.aionemu.gameserver.services.item.ItemService;
import com.aionemu.gameserver.skillengine.SkillEngine;
import com.aionemu.gameserver.spawnengine.SpawnEngine;
import com.aionemu.gameserver.utils.PacketSendUtility;
import com.aionemu.gameserver.utils.ThreadPoolManager;
import com.aionemu.gameserver.world.WorldMapInstance;
import com.aionemu.gameserver.world.zone.ZoneName;

/**
 * @author xTz
 */
@InstanceID(300320000)
public class CrucibleChallengeInstance extends CrucibleInstance {

	private int stage1Count;
	private Future<?> bonusTimer;
	private int spawnCount;
	private int dieCount;
	private int rewardCount;

	public CrucibleChallengeInstance(WorldMapInstance instance) {
		super(instance);
	}

	@Override
	public void onInstanceCreate() {
		super.onInstanceCreate();
		sp(205668, 345.77954f, 1662.6697f, 95.25f, (byte) 0, 0);
		sp(205682, 383.3434f, 1667.2977f, 97.79293f, (byte) 60, 0);
	}

	@Override
	public void onEnterInstance(Player player) {
		super.onEnterInstance(player);
		if (getPlayerReward(player.getObjectId()).isRewarded())
			doReward(player);
		else
			sendPacket(null, 0);
		sendEventPacket();
	}

	private void sendPacket(String npcL10n, int points) {
		PacketSendUtility.broadcastToMap(instance, new SM_INSTANCE_SCORE(instance.getMapId(), new CrucibleScoreWriter(instanceScore)));
		if (npcL10n != null)
			PacketSendUtility.broadcastToMap(instance, SM_SYSTEM_MESSAGE.STR_MSG_GET_SCORE(npcL10n, points));
	}

	private void sendEventPacket() {
		PacketSendUtility.broadcastToMap(instance, new SM_INSTANCE_STAGE_INFO(2, stageType.getId(), stageType.getType()));
	}

	@Override
	public void onDie(Npc npc) {
		int npcId = npc.getNpcId();
		increasePointsForKill(npc, npc.getAggroList().getMostPlayerDamage());
		switch (npcId) {
			case 217784: // ely
			case 217785: // asmo
				if (++stage1Count == 2) {
					sp(npcId, 342.855f, 1652.6703f, 95.63069f, (byte) 0, 0);
					sp(npcId, 342.83942f, 1673.2863f, 95.66078f, (byte) 0, 0);
				} else if (allDeadOrDespawned(npcId) && changeStage(StageType.START_STAGE_1_ROUND_2, 2000)) {
					sp(217783, 337.82263f, 1662.9073f, 95.27217f, (byte) 0, 4000);
				}
				break;
			case 217783:
				if (changeStage(StageType.PASS_STAGE_1, 0))
					sp(217758, 347.24026f, 1660.2524f, 95.35922f, (byte) 0, 0);
				break;
			case 217843:
			case 217845:
				if (changeStage(StageType.START_STAGE_3_ROUND_2, 2000)) {
					sp(217848, 1309.2858f, 1732.6802f, 316.0825f, (byte) 0, 1000);
					sp(217848, 1306.1871f, 1731.7861f, 316.25168f, (byte) 0, 1000);
					sp(217848, 1308.4879f, 1734.4999f, 316f, (byte) 0, 1000);
					sp(217848, 1308.67419f, 1736.2063f, 316f, (byte) 0, 1000);
					sp(217848, 1306.9414f, 1736.5365f, 316f, (byte) 0, 1000);
					sp(217848, 1305.2534f, 1735.1603f, 315.94586f, (byte) 0, 1000);
					sp(217847, 1307.2786f, 1734.3274f, 316f, (byte) 0, 3000);
					ThreadPoolManager.getInstance().schedule(() -> {
						Npc fieryGomju = getNpc(217847);
						if (fieryGomju != null && SkillEngine.getInstance().getSkill(fieryGomju, 19817, 1, fieryGomju).useSkill()) // Brown Bear's Roar
							ThreadPoolManager.getInstance().schedule(() -> getNpcs(217848).forEach(dracuni -> dracuni.getController().die()), 1000);
					}, 4000);
				}
				break;
			case 217847:
				sp(205676, 1307.6722f, 1732.9865f, 316.07373f, (byte) 6, 0);
				break;
			case 217788:
			case 217789:
			case 217790:
				if (changeStage(StageType.START_STAGE_4_ROUND_2, 2000))
					sp(217794, 1271f, 791.5752f, 436.63998f, (byte) 0, 6000);
				break;
			case 217791:
			case 217792:
			case 217793:
				if (changeStage(StageType.START_STAGE_4_ROUND_2, 2000))
					sp(217795, 1258.8425f, 237.91522f, 405.3968f, (byte) 0, 6000);
				break;
			case 217794:
			case 217795:
				if (stageType != StageType.START_BONUS_STAGE_4) {
					changeStage(StageType.PASS_STAGE_4, 0);
					changeStage(StageType.START_BONUS_STAGE_4, 4000);
					if (npcId == 217794)
						sp(217820, 1266.9661f, 791.5348f, 436.64014f, (byte) 0, 4000);
					else
						sp(217820, 1251.1598f, 237.97736f, 405.3968f, (byte) 0, 4000);
				}
				break;
			case 217786:
			case 217787:
				break; // just despawn (see below switch)
			case 217807: // ely
			case 217808: // ely
			case 217809: // ely
			case 217810: // ely
			case 217811: // asmo
			case 217812: // asmo
			case 217813: // asmo
			case 217814: // asmo
			case 217815: // ely
			case 217816: // asmo
				if (changeStage(StageType.START_STAGE_5_ROUND_2, 2000)) {
					switch (Rnd.get(1, 3)) {
						case 1 -> sp(217806, 332.3786f, 349.31204f, 96.090935f, (byte) 0, 4000);
						case 2 -> sp(218562, 332.3786f, 349.31204f, 96.090935f, (byte) 0, 4000);
						case 3 -> sp(218565, 332.3786f, 349.31204f, 96.090935f, (byte) 0, 4000);
					}
				}
				break;
			case 217806:
			case 218562:
			case 218565:
				if (changeStage(StageType.PASS_STAGE_5, 0))
					sp(205678, 346.64798f, 349.25586f, 96.090965f, (byte) 0, 0);
				break;
			case 217819:
				if (changeStage(StageType.PASS_STAGE_6, 0)) {
					ThreadPoolManager.getInstance().schedule(() -> {
						Player player = null;
						if (!instance.getPlayersInside().isEmpty()) {
							player = instance.getPlayersInside().get(0);
						}
						npc.getController().delete();
						if (player != null) {
							QuestState qs = player.getQuestStateList().getQuestState(player.getRace() == Race.ASMODIANS ? 28208 : 18208);
							if (qs != null && qs.getStatus() == QuestStatus.START) {
								if (qs.getQuestVarById(0) == 1 || qs.getQuestVarById(1) == 4) { // 5 x Vanktrist Spacetwine killed
									sp(730459, 1765.7104f, 1281.2388f, 389.11743f, (byte) 0, 2000);
									return;
								}
							}
						}
						sp(205679, 1765.522f, 1282.1051f, 389.11743f, (byte) 0, 2000);
					}, 4000);
				}
				return; // return instead of break since despawn is delayed
			case 217837:
			case 217838:
				Player player = npc.getAggroList().getMostPlayerDamage();
				if (player != null) {
					if (player.isInsideZone(ZoneName.get("ILLUSION_STADIUM_1_300320000"))) {
						sp(217820, 1251.1598f, 237.97736f, 405.3968f, (byte) 0, 0);
					} else if (player.isInsideZone(ZoneName.get("ILLUSION_STADIUM_6_300320000"))) {
						sp(217820, 1266.9661f, 791.5348f, 436.64014f, (byte) 0, 0);
					}
				}
				break;
			case 217800:
			case 217801:
				if (allDeadOrDespawned(217800, 217801))
					startBonusStage2();
				break;
			case 217802:
				deleteAliveNpcs(217803);
				bonusTimer.cancel(false);
				passStage2();
				break;
			case 217797:
			case 217798:
			case 217799:
				if (allDeadOrDespawned(217797, 217798, 217799))
					startBonusStage2();
				break;
			case 217841:
			case 218561:
				final int spawnNpcId;
				switch (npc.getNpcId()) {
					case 218561:
						spawnNpcId = 218560;
						break;
					case 217841:
						spawnNpcId = 217840;
						break;
					default:
						return;
				}
				if (Rnd.nextBoolean())
					sp(spawnNpcId, 1299.7399f, 1733.5763f, 316.6515f, (byte) 0, 0);
				else
					sp(spawnNpcId, 1297.627f, 1729.8733f, 316.875f, (byte) 0, 0);
				break;
			case 217803:
				if (++dieCount == 5)
					sendMsg(SM_SYSTEM_MESSAGE.STR_MSG_IDArena_Solo_SB1_5Dead_BROADCAST());
				if (bonusTimer.isCancelled() && allDeadOrDespawned(npcId)) {
					Npc poppy = getNpc(217802);
					if (poppy != null) {
						passStage2();
						sendMsg(SM_SYSTEM_MESSAGE.STR_MSG_IDArena_Solo_SB1_Succ_BROADCAST());
						sp(218571, poppy.getX(), poppy.getY(), poppy.getZ(), (byte) 0, 0);
						poppy.getController().delete();
					}
				}
				break;
			case 217844:
			case 217842:
				if (getNpcs(npcId).size() == 2)
					ThreadPoolManager.getInstance().schedule(() -> startStage3Round1_1(npcId), 5000);
				break;
			case 218185:
				deleteAliveNpcs(218190, 218191);
				sp(730460, 1759.2914f, 1786.37f, 389.11713f, (byte) 96, 0);
				PacketSendUtility.broadcastMessage(npc, 342495);
				break;
			default:
				return; // don't despawn
		}
		npc.getController().delete();
	}

	private void increasePointsForKill(Npc npc, Player killer) {
		if (killer == null)
			return;
		int points = 0;
		switch (npc.getNpcId()) {
			case 217784:
			case 217785:
				points = 120;
				break;
			case 217786:
			case 217787:
				points = 200;
				break;
			case 217797:
			case 217798:
			case 217799:
				points = 1100;
				break;
			case 217788:
			case 217789:
			case 217790:
			case 217791:
			case 217792:
			case 217793:
				points = 1300;
				break;
			case 217843:
			case 217845:
				points = 1400;
				break;
			case 217783:
				points = 1600;
				break;
			case 217800:
			case 217801:
				points = 1650;
				break;
			case 217807: // ely
			case 217808: // ely
			case 217809: // ely
			case 217810: // ely
			case 217811: // asmo
			case 217812: // asmo
			case 217813: // asmo
			case 217814: // asmo
			case 217815: // ely
			case 217816: // asmo
				points = 2500;
				break;
			case 217847:
				points = 4600;
				break;
			case 217795:
			case 217794:
				points = 5000;
				break;
			case 217806:
			case 218562:
			case 218565:
				points = 5800;
				break;
			case 217819:
				points = 7200;
				break;
		}
		if (points != 0) {
			getPlayerReward(killer.getObjectId()).addPoints(points);
			sendPacket(npc.getObjectTemplate().getL10n(), points);
		}
	}

	private boolean allDeadOrDespawned(int... npcIds) {
		for (Npc npc : instance.getNpcs()) {
			for (int npcId : npcIds) {
				if (npc.getNpcId() == npcId && !npc.isDead())
					return false;
			}
		}
		return true;
	}

	private void startStage3Round1_1(int npcId) {
		int bossId = switch (npcId) {
			case 217844 -> 217845;
			case 217842 -> 217843;
			default -> 0;
		};
		if (getNpc(bossId) != null)
			return;
		sp(bossId, 1287.6239f, 1724.2721f, 317.1485f, (byte) 6, 2000);
		deleteAliveNpcs(npcId, 217840, 218560, 218561, 217841);
	}

	@Override
	public void doReward(Player player) {
		CruciblePlayerReward playerReward = getPlayerReward(player.getObjectId());
		if (playerReward == null) {
			return;
		}
		float reward = 0.01f * playerReward.getPoints() + 120;
		if (!playerReward.isRewarded()) {
			playerReward.setRewarded();
			ItemService.addItem(player, 186000130, (int) reward);
			playerReward.setInsignia((int) reward);
			instanceScore.setInstanceProgressionType(InstanceProgressionType.END_PROGRESS);
		}
		PacketSendUtility.sendPacket(player, new SM_INSTANCE_SCORE(instance.getMapId(), new CrucibleScoreWriter(instanceScore)));
	}

	private void startBonusStage2() {
		if (!changeStage(StageType.PASS_STAGE_2, 0))
			return;

		ThreadPoolManager.getInstance().schedule(() -> changeStage(StageType.START_BONUS_STAGE_2, 1000), 2000);

		ThreadPoolManager.getInstance().schedule(() -> {
			if (!isInstanceDestroyed) {
				sendMsg(SM_SYSTEM_MESSAGE.STR_MSG_IDArena_Solo_SB1_START_BROADCAST());
				SpawnTemplate template = SpawnEngine.newSingleTimeSpawn(mapId, 217802, 1780.5665f, 307.40463f, 469.25f, (byte) 0);
				template.setWalkerId("3003200001");
				SpawnEngine.spawnObject(template, instance.getInstanceId());
			}
		}, 6000);

		bonusTimer = ThreadPoolManager.getInstance().scheduleAtFixedRate(() -> {
			spawnCount++;
			spawnBonus2();
			if (spawnCount == 10)
				bonusTimer.cancel(false);
		}, 10000, 4000);
	}

	private void spawnBonus2() {
		switch (spawnCount) {
			case 1 -> sp(217803, 1789.923f, 310.853f, 469.25f, (byte) 0, 0);
			case 2 -> sp(217803, 1780.9126f, 315.63382f, 469.25f, (byte) 0, 0);
			case 3 -> sp(217803, 1784.4752f, 300.1912f, 469.25f, (byte) 0, 0);
			case 4 -> sp(217803, 1793.2847f, 312.59842f, 469.25f, (byte) 0, 0);
			case 5 -> sp(217803, 1777.6609f, 316.1443f, 469.25f, (byte) 0, 0);
			case 6 -> sp(217803, 1776.5625f, 299.30347f, 469.25f, (byte) 0, 0);
			case 7 -> sp(217803, 1793.6469f, 301.40973f, 469.25f, (byte) 0, 0);
			case 8 -> sp(217803, 1797.4891f, 310.50418f, 469.25f, (byte) 0, 0);
			case 9 -> sp(217803, 1782.552f, 319.43973f, 469.25f, (byte) 0, 0);
			case 10 -> sp(217803, 1776.1577f, 305.80396f, 469.25f, (byte) 0, 0);
		}
	}

	@Override
	public void onInstanceDestroy() {
		super.onInstanceDestroy();
		if (bonusTimer != null) {
			bonusTimer.cancel(false);
		}
	}

	private void passStage2() {
		if (getNpc(205675) == null) // record keeper
			sp(205675, 1784.5883f, 306.98645f, 469.25f, (byte) 0, 0);
	}

	@Override
	public boolean onDie(Player player, Creature lastAttacker) {
		super.onDie(player, lastAttacker);
		int place = 0;
		if (isInZone(ZoneName.get("ILLUSION_STADIUM_4_300320000"), player)) { // stage 1
			place = 1;
		} else if (isInZone(ZoneName.get("ILLUSION_STADIUM_8_300320000"), player)) { // stage 2
			place = 2;
		} else if (isInZone(ZoneName.get("ILLUSION_STADIUM_5_300320000"), player)) { // stage 3
			place = 3;
		} else if (isInZone(ZoneName.get("ILLUSION_STADIUM_1_300320000"), player)) { // stage 4
			place = 4;
		} else if (isInZone(ZoneName.get("ILLUSION_STADIUM_6_300320000"), player)) { // stage 4
			place = 5;
		} else if (isInZone(ZoneName.get("ILLUSION_STADIUM_2_300320000"), player)) { // stage 5
			place = 6;
		} else if (isInZone(ZoneName.get("ILLUSION_STADIUM_7_300320000"), player)) { // stage 6
			place = 7;
		}
		getPlayerReward(player.getObjectId()).setSpawnPosition(place);
		return true;
	}

	@Override
	public boolean onReviveEvent(Player player) {
		super.onReviveEvent(player);
		switch (getPlayerReward(player.getObjectId()).getSpawnPosition()) {
			case 1 -> teleport(player, 380.35417f, 1663.3583f, 97.60156f, (byte) 0);
			case 2 -> teleport(player, 1819.8119f, 304.92932f, 469.4142f, (byte) 0);
			case 3 -> teleport(player, 1354.9386f, 1748.1531f, 318.6173f, (byte) 70);
			case 4 -> teleport(player, 1294.1417f, 234.49684f, 406.0368f, (byte) 0);
			case 5 -> teleport(player, 1307.3776f, 790.7324f, 437.29678f, (byte) 0);
			case 6 -> teleport(player, 381.7477f, 346.63913f, 96.74763f, (byte) 0);
			case 7 -> teleport(player, 1750.2677f, 1253.5453f, 389.11765f, (byte) 10);
			default -> InstanceService.destroyInstance(player.getPosition().getWorldMapInstance());
		}

		if (player.getInventory().getFirstItemByItemId(186000134) == null) {
			doReward(player);
		}
		return true;
	}

	@Override
	public void leaveInstance(Player player) {
		InstanceService.destroyInstance(player.getPosition().getWorldMapInstance());
	}

	@Override
	public void onStopTraining(Player player) {
		doReward(player);
	}

	@Override
	public void onChangeStage(StageType type) {
		if (!changeStage(type, 2000))
			return;
		int npcId = 0, barrelId = 0;
		Player player = null;
		if (!instance.getPlayersInside().isEmpty()) {
			player = instance.getPlayersInside().get(0);
		}
		switch (stageType) {
			case START_STAGE_1_ROUND_1:
				if (player != null) {
					switch (player.getRace()) {
						case ELYOS:
							npcId = 217784;
							break;
						case ASMODIANS:
							npcId = 217785;
							break;
					}
					sp(npcId, 334.85098f, 1657.8495f, 95.77262f, (byte) 0, 4000);
					sp(npcId, 334.74506f, 1668.7478f, 95.67427f, (byte) 0, 4000);
					sp(npcId, 350.63846f, 1663.84f, 95.385f, (byte) 0, 4000);
				}
				break;
			case START_STAGE_2_ROUND_1:
				switch (Rnd.get(1, 2)) {
					case 1:
						sp(217800, 1779.9993f, 305.76697f, 469.25f, (byte) 30, 4000);
						sp(217801, 1779.9845f, 308.82013f, 469.25f, (byte) 90, 4000);
						break;
					case 2:
						sp(217797, 1771.5549f, 307.09192f, 469.25f, (byte) 30, 4000);
						sp(217798, 1775.9717f, 317.69516f, 469.25f, (byte) 90, 4000);
						sp(217799, 1775.9646f, 296.3559f, 469.25f, (byte) 90, 4000);
						break;
				}
				break;
			case START_STAGE_3_ROUND_1:
				switch (Rnd.get(1, 2)) {
					case 1:
						sendMsg(SM_SYSTEM_MESSAGE.STR_CHAT_IDArena_Solo_S4_System2());
						npcId = 217844;
						barrelId = 218560;
						break;
					case 2:
						sendMsg(SM_SYSTEM_MESSAGE.STR_CHAT_IDArena_Solo_S4_System1());
						npcId = 217842;
						barrelId = 217840;
						break;
				}
				sp(barrelId, 1302.4689f, 1732.1583f, 316.4486f, (byte) 0, 2000);
				sp(npcId, 1288.6692f, 1730.5212f, 316.85333f, (byte) 0, 4000);
				sp(npcId, 1296.7896f, 1726.1091f, 316.82837f, (byte) 0, 4000);
				sp(npcId, 1294.3018f, 1730.9f, 316.875f, (byte) 0, 4000);
				sp(npcId, 1292.1957f, 1726.921f, 316.875f, (byte) 0, 4000);
				sp(npcId, 1293.0376f, 1722.3871f, 316.93515f, (byte) 0, 4000);
				break;
			case START_STAGE_4_ROUND_1:
				npcId = switch (Rnd.get(1, 3)) {
					case 1 -> 217788;
					case 2 -> 217789;
					default -> 217790;
				};
				sp(217786, 1263.4213f, 791.8533f, 436.64014f, (byte) 60, 4000);
				sp(217786, 1267.2097f, 804.04456f, 436.64008f, (byte) 60, 4000);
				sp(217786, 1267.0653f, 781.0253f, 436.64017f, (byte) 60, 4000);
				sp(npcId, 1253.5984f, 791.6149f, 436.64008f, (byte) 0, 4000);
				break;
			case START_ALTERNATIVE_STAGE_4_ROUND_1:
				npcId = switch (Rnd.get(1, 3)) {
					case 1 -> 217791; // http://www.aiondatabase.com/npc/217805 spawn 2 5%
					case 2 -> 217792;
					default -> 217793;
				};
				sp(217787, 1252.525f, 248.50781f, 405.38016f, (byte) 60, 4000);
				sp(217787, 1250.0901f, 237.69656f, 405.39676f, (byte) 60, 4000);
				sp(217787, 1253.0117f, 225.77977f, 405.3801f, (byte) 60, 4000);
				sp(npcId, 1242.3618f, 237.89081f, 405.3801f, (byte) 0, 4000);
				break;
			case START_STAGE_5_ROUND_1:
				if (player != null) {
					npcId = switch (player.getRace()) {
						case ELYOS -> switch (Rnd.get(1, 5)) {
								case 1 -> 217807;
								case 2 -> 217808;
								case 3 -> 217809;
								case 4 -> 217810;
								default -> 217815;
							};
						case ASMODIANS -> switch (Rnd.get(1, 5)) {
								case 1 -> 217811;
								case 2 -> 217812;
								case 3 -> 217813;
								case 4 -> 217814;
								default -> 217816;
							};
						default -> npcId;
					};
					sp(npcId, 335.7365f, 337.93097f, 96.0909f, (byte) 0, 4000);
				}
				break;
			case START_STAGE_6_ROUND_1:
				sp(217819, 1769.4579f, 1290.9342f, 389.11728f, (byte) 80, 4000);
				break;
		}
	}

	private void sp(int npcId, float x, float y, float z, byte h, int time) {
		ThreadPoolManager.getInstance().schedule(() -> {
			if (!isInstanceDestroyed)
				spawn(npcId, x, y, z, h);
		}, time);
	}

	private boolean changeStage(StageType type, int time) {
		if (this.stageType == type)
			return false;
		this.stageType = type;
		ThreadPoolManager.getInstance().schedule(this::sendEventPacket, time);
		return true;
	}

	@Override
	public void handleUseItemFinish(Player player, Npc npc) {
		switch (npc.getNpcId()) {
			case 217758:
				spawn(205674, 345.52954f, 1662.6697f, 95.25f, (byte) 0);
				break;
		}
	}

	@Override
	public void onDropRegistered(Npc npc, int winnerObj) {
		Set<DropItem> dropItems = DropRegistrationService.getInstance().getCurrentDropMap().get(npc.getObjectId());
		int npcId = npc.getNpcId();
		int itemId = 0;
		switch (npcId) {
			case 217758:
				dropItems.add(DropRegistrationService.getInstance().regDropItem(1, winnerObj, npcId, 186000134, 1));
				break;
			case 218571:
				dropItems.clear();
				switch (Rnd.get(1, 3)) {
					case 1 -> itemId = 182006429;
					case 2 -> itemId = 182006430;
					case 3 -> itemId = 182006431;
				}
				dropItems.add(DropRegistrationService.getInstance().regDropItem(1, winnerObj, npcId, itemId, 1));
				break;
			case 218185:
				dropItems.clear();
				dropItems.add(DropRegistrationService.getInstance().regDropItem(1, winnerObj, npcId, 188051349, 1));
				break;
			case 217827:
			case 217828:
			case 217829:
				int count = 0;
				switch (rewardCount) {
					case 0:
						switch (Rnd.get(1, 3)) {
							case 1 -> count = 1;
							case 2 -> count = 10;
						}
						break;
					case 1:
						switch (Rnd.get(1, 3)) {
							case 1 -> count = 2;
							case 2 -> count = 18;
						}
						break;
					case 2:
						switch (Rnd.get(1, 3)) {
							case 1 -> count = 3;
							case 2 -> count = 26;
							case 3 -> count = 250;
						}
						break;
				}

				switch (npcId) {
					case 217827 -> deleteAliveNpcs(217828, 217829);
					case 217828 -> deleteAliveNpcs(217827, 217829);
					case 217829 -> deleteAliveNpcs(217827, 217828);
				}
				if (count == 0) {
					if (rewardCount == 0) {
						sp(217837, npc.getX(), npc.getY(), npc.getZ(), (byte) 0, 0);
					} else if (rewardCount == 1) {
						sp(217838, npc.getX(), npc.getY(), npc.getZ(), (byte) 0, 0);
					}
					npc.getController().delete();
					rewardCount++;
					return;
				}
				rewardCount++;
				if (npc.isInsideZone(ZoneName.get("ILLUSION_STADIUM_1_300320000"))) {
					sp(205667, 1258.8464f, 237.85518f, 405.39673f, (byte) 0, 0);
				} else if (npc.isInsideZone(ZoneName.get("ILLUSION_STADIUM_6_300320000"))) {
					sp(205677, 1271.5472f, 791.36145f, 436.64017f, (byte) 0, 0);
				}
				dropItems.clear();
				dropItems.add(DropRegistrationService.getInstance().regDropItem(1, winnerObj, npcId, 186000130, count));
				break;
		}
	}

}

📎 첨부파일

댓글 작성 권한이 없습니다.
🏆 포인트 랭킹 TOP 10
순위 닉네임 포인트
1 no_profile 타키야겐지쪽지보내기 자기소개 아이디로 검색 전체게시물 102,949
2 no_profile 동가리쪽지보내기 자기소개 아이디로 검색 전체게시물 63,733
3 no_profile 라프텔쪽지보내기 자기소개 아이디로 검색 전체게시물 51,771
4 no_profile 불멸의행복쪽지보내기 자기소개 아이디로 검색 전체게시물 36,923
5 서번트쪽지보내기 자기소개 아이디로 검색 전체게시물 35,011
6 no_profile 닥터스쪽지보내기 자기소개 아이디로 검색 전체게시물 29,470
7 no_profile 검은고양이쪽지보내기 자기소개 아이디로 검색 전체게시물 29,077
8 no_profile Revolution쪽지보내기 자기소개 아이디로 검색 전체게시물 28,199
9 no_profile 보거스쪽지보내기 자기소개 아이디로 검색 전체게시물 26,731
10 no_profile 호롤롤로쪽지보내기 자기소개 아이디로 검색 전체게시물 17,020
알림 0