테스트

aion-server 4.8

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

import java.util.concurrent.atomic.AtomicBoolean;

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.Creature;
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.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;

/**
 * @author Tibald, Estrayl
 */
@InstanceID(300620000)
public class OccupiedRentusBaseInstance extends GeneralInstanceHandler {

	private final AtomicBoolean isRaceKnown = new AtomicBoolean();
	private final AtomicBoolean isXastaEventStarted = new AtomicBoolean();

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

	@Override
	public void onDie(final Npc npc) {
		super.onDie(npc);
		switch (npc.getNpcId()) {
			case 236299:
				if (isDeadNpc(236301)) {
					instance.setDoorState(145, true);
					deleteAliveNpcs(701156);
				}
				break;
			case 236301:
				if (isDeadNpc(236299)) {
					instance.setDoorState(145, true);
					deleteAliveNpcs(701156);
				}
				break;
			case 236298: // Kuhara
				spawn(236705, 141.54f, 255.06f, 213f, (byte) 25);
				instance.setDoorState(43, false);
				instance.setDoorState(150, true);
				npc.getController().delete();
				break;
			case 236302: // Archmagus Upadi
				instance.setDoorState(70, true);
				break;
			case 236300: // Brigade General Vasharti
				deleteAliveNpcs(799669);
				instance.setDoorState(70, true);
				spawn(730401, 193.6f, 436.5f, 262f, (byte) 86); // occupied rentus base exit
				spawn(833048, 195.48f, 413.87f, 260.97f, (byte) 27); // Rentus Quality Supply Storage Box
				Npc ariana = (Npc) spawn(799670, 183.736f, 391.392f, 260.571f, (byte) 26);
				PacketSendUtility.broadcastMessage(ariana, 1500417, 5000);
				PacketSendUtility.broadcastMessage(ariana, 1500418, 8000);
				PacketSendUtility.broadcastMessage(ariana, 1500419, 11000);
				spawnEndEvent(800227, "3002800003", 2000);
				spawnEndEvent(800227, "3002800004", 2000);
				spawnEndEvent(800228, "3002800007", 4000);
				spawnEndEvent(800227, "3002800005", 6000);
				spawnEndEvent(800228, "3002800006", 8000);
				spawnEndEvent(800229, "3002800008", 10000);
				spawnEndEvent(800229, "3002800009", 10000);
				spawnEndEvent(800230, "30028000010", 12000);
				spawnEndEvent(800230, "30028000011", 12000);
				break;
			case 282394:
				spawn(282395, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading());
				npc.getController().delete();
				break;
			case 283000:
			case 283001:
				npc.getController().delete();
				break;
			case 217299:
				spawn(217300, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading());
				npc.getController().delete();
				break;
		}
	}

	@Override
	public void onAggro(Npc npc) {
		switch (npc.getNpcId()) {
			case 236298: // Kuhara
				instance.setDoorState(43, true);
				PacketSendUtility.broadcastMessage(npc, 1500393);
				break;
			case 236300: // Vasharti
				instance.setDoorState(70, false);
				break;
		}
	}

	private void spawnEndEvent(int npcId, String walkern, int time) {
		sp(npcId, 193.39548f, 435.56158f, 260.57135f, (byte) 86, time, walkern);
	}

	@Override
	public void handleUseItemFinish(Player player, Npc npc) {
		switch (npc.getNpcId()) {
			case 702677:
			case 702678:
			case 702679:
			case 702680:
			case 702681:
			case 702682:
				TeleportService.teleportTo(player, npc.getWorldId(), npc.getInstanceId(), npc.getX(), npc.getY(), npc.getZ(), npc.getHeading());
				SkillEngine.getInstance().applyEffectDirectly(21806, npc, player);
				npc.getController().delete();
				break;
			case 702683:
			case 702684:
			case 702685:
			case 702686:
			case 702687:
			case 702688:
				TeleportService.teleportTo(player, npc.getWorldId(), npc.getInstanceId(), npc.getX(), npc.getY(), npc.getZ(), npc.getHeading());
				SkillEngine.getInstance().applyEffectDirectly(21805, npc, player);
				npc.getController().delete();
				break;
			case 701151:
				SkillEngine.getInstance().getSkill(npc, 19909, 60, npc).useNoAnimationSkill();
				npc.getController().delete();
				break;
			case 701152:
				SkillEngine.getInstance().getSkill(npc, 19910, 60, npc).useNoAnimationSkill();
				npc.getController().delete();
				break;
			case 701097:
				npc.getController().delete();
				break;
			case 701100:
				if (instance.getNpc(799543) == null)
					spawn(799543, 511.227f, 613.762f, 158.179f, (byte) 0);
				break;
		}
	}

	private void sp(final int npcId, final float x, final float y, final float z, final byte h, final int time, final String walkern) {
		final Npc npc = (Npc) spawn(npcId, x, y, z, h);
		ThreadPoolManager.getInstance().schedule(() -> {
			npc.getSpawn().setWalkerId(walkern);
			WalkManager.startWalking((NpcAI) npc.getAi());
			npc.setState(CreatureState.WALK_MODE, true);
			PacketSendUtility.broadcastPacket(npc, new SM_EMOTION(npc, EmotionType.CHANGE_SPEED, 0, npc.getObjectId()));
		}, time);
	}

	private boolean isDeadNpc(int npcId) {
		return (getNpc(npcId) == null || getNpc(npcId).isDead());
	}

	@Override
	public void onCreatureDetected(Npc detector, Creature detected) {
		if (detected instanceof Player) {
			if (detector.getNpcId() == 856056 && isXastaEventStarted.compareAndSet(false, true)) {
				sp(236271, 521.33f, 499.49f, 179.946f, (byte) 27, 2000, "300620000_Xasta_Path");
				detector.getController().delete();
				sendMsg(SM_SYSTEM_MESSAGE.STR_MSG_IDYUN_RASTA_SPAWN_01());
				sendMsg(SM_SYSTEM_MESSAGE.STR_MSG_IDYUN_RASTA_SPAWN_02(), 2000);
			}
		}
	}

	@Override
	public void onSpecialEvent(Npc npc) {
		if (npc.getNpcId() == 236271) {
			if (npc.getLifeStats().getHpPercentage() <= 50)
				spawn(236297, 354.53f, 596.26f, 148.298f, (byte) 100);
			else
				spawn(236296, 354.53f, 596.26f, 148.298f, (byte) 100);
			Npc drakanBarricade = getNpc(856015);
			if (drakanBarricade != null)
				drakanBarricade.getController().die(npc);
			npc.getController().delete();
		}
	}

	@Override
	public void onEnterInstance(Player player) {
		if (isRaceKnown.compareAndSet(false, true)) {
			if (player.getRace() == Race.ELYOS) {
				for (int npcId = 702677; npcId <= 702682; npcId++) {
					Npc npc = getNpc(npcId);
					spawn(npcId + 6, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), npc.getSpawn().getStaticId());
					npc.getController().delete();
				}
			}
		}
	}

	@Override
	public boolean isBoss(Npc npc) {
		return switch (npc.getNpcId()) {
			case 236296, 236297, 236298, 236299, 236300, 236301, 236302 -> true;
			default -> false;
		};
	}
}

📎 첨부파일

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