테스트

aion-server 4.8

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

import static com.aionemu.gameserver.network.aion.serverpackets.SM_SYSTEM_MESSAGE.STR_MSG_IDStation_Doping_01_AD;

import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;

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.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_ATTACK_STATUS;
import com.aionemu.gameserver.network.aion.serverpackets.SM_ATTACK_STATUS.LOG;
import com.aionemu.gameserver.network.aion.serverpackets.SM_EMOTION;
import com.aionemu.gameserver.network.aion.serverpackets.SM_SYSTEM_MESSAGE;
import com.aionemu.gameserver.services.abyss.AbyssPointsService;
import com.aionemu.gameserver.skillengine.SkillEngine;
import com.aionemu.gameserver.utils.PacketSendUtility;
import com.aionemu.gameserver.utils.ThreadPoolManager;
import com.aionemu.gameserver.world.WorldMapInstance;
import com.aionemu.gameserver.world.zone.ZoneInstance;
import com.aionemu.gameserver.world.zone.ZoneName;

/**
 * @author xTz
 */
@InstanceID(300240000)
public class AturamSkyFortressInstance extends GeneralInstanceHandler {

	private final AtomicBoolean msgIsSent = new AtomicBoolean();
	private final AtomicInteger officerKilled = new AtomicInteger();
	private final AtomicInteger chiefKilled = new AtomicInteger();
	private final AtomicInteger generators = new AtomicInteger();
	private boolean isInstanceDestroyed;

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

	@Override
	public void onDie(Npc npc) {
		if (isInstanceDestroyed) {
			return;
		}

		switch (npc.getNpcId()) {
			case 702651:
				spawn(282281, 524.1896f, 489.7742f, 649.916f, (byte) 34);
				break;
			case 700982:
				spawn(282279, 467.7094f, 465.6622f, 647.93896f, (byte) 40);
				break;
			case 700983:
				spawn(282278, 449.5576f, 420.7812f, 652.9143f, (byte) 89);
				instance.setDoorState(68, true);
				break;
			case 702650:
				spawn(282277, 572.8088f, 459.4094f, 647.93896f, (byte) 15);
				break;
			case 702652:
				spawn(282280, 581.1f, 401.3544f, 648.6401f, (byte) 9);
				break;
			case 217373:
				spawn(730375, 374.85f, 424.32f, 653.52f, (byte) 0);
				break;
			case 701043:
				npc.getController().delete();
				deleteAliveNpcs(701030);
				sendMsg(SM_SYSTEM_MESSAGE.STR_MSG_IDStation_HugenNM_00());
				break;
			case 217371:
				spawn(730374, npc.getX(), npc.getY(), npc.getZ(), (byte) 0);
				break;
			case 217370:
				int killed1 = officerKilled.incrementAndGet();
				if (killed1 == 4) {
					instance.setDoorState(174, true);
					sendMsg(SM_SYSTEM_MESSAGE.STR_MSG_IDStation_3FDoor_311());
					startOfficerWalkerEvent();
				} else if (killed1 == 8) {
					instance.setDoorState(175, true);
					startMarbataWalkerEvent();
				}
				npc.getController().delete();
				break;
			case 217656:
				int killed2 = chiefKilled.incrementAndGet();
				if (killed2 == 1) {
					startOfficerWalkerEvent();
				} else if (killed2 == 2) {
					instance.setDoorState(178, true);
					instance.setDoorState(308, false); // reopen side windows
					ThreadPoolManager.getInstance().schedule(() -> instance.setDoorState(307, true), 10000); // close side windows
				}
				npc.getController().delete();
				break;
			case 217382:
				instance.setDoorState(307, false); // reopen side windows
				instance.setDoorState(230, true);
				Player player = npc.getAggroList().getMostPlayerDamage();
				if (player != null) {
					AbyssPointsService.addAp(player, 540);
				}
				sendMsg(SM_SYSTEM_MESSAGE.STR_MSG_IDStation_3FDoor_322());
				break;
			case 218577:
				spawn(217382, 258.3894f, 796.7554f, 901.6453f, (byte) 80);
				break;
			case 701029:
				Npc boss = instance.getNpc(217371);
				int used = generators.incrementAndGet();
				if (boss != null) {
					if (used == 1) {
						sendMsg(SM_SYSTEM_MESSAGE.STR_MSG_IDStation_HugenNM_01());
					} else if (used == 2) {
						boss.getEffectController().removeEffect(19406);
						SkillEngine.getInstance().getSkill(boss, 19407, 1, boss).useNoAnimationSkill();
						sendMsg(SM_SYSTEM_MESSAGE.STR_MSG_IDStation_HugenNM_02());
					} else if (used == 3) {
						boss.getEffectController().removeEffect(19407);
						SkillEngine.getInstance().getSkill(boss, 19408, 1, boss).useNoAnimationSkill();
						sendMsg(SM_SYSTEM_MESSAGE.STR_MSG_IDStation_HugenNM_03());
					} else if (used == 4) {
						boss.getEffectController().removeEffect(19408);
						SkillEngine.getInstance().getSkill(boss, 18117, 1, boss).useNoAnimationSkill();
						sendMsg(SM_SYSTEM_MESSAGE.STR_MSG_IDStation_HugenNM_04());
					}
				}
				npc.getController().delete();
				break;
			case 217369:
			case 217368:
			case 217655:
				npc.getController().delete();
				break;
		}
	}

	private void startMarbataWalkerEvent() {
		sendMsg(SM_SYSTEM_MESSAGE.STR_MSG_IDStation_3FDoor_311());
		startWalk((Npc) spawn(218577, 193.45583f, 802.1455f, 900.7575f, (byte) 103), "3002400009");
		startWalk((Npc) spawn(217655, 198.34431f, 801.4107f, 900.66125f, (byte) 110), "30024000010");
		startWalk((Npc) spawn(217655, 197.13315f, 798.7863f, 900.6499f, (byte) 110), "30024000011");
	}

	private void startWalk(final Npc npc, final String walkId) {
		ThreadPoolManager.getInstance().schedule(() -> {
			if (!isInstanceDestroyed) {
				npc.getSpawn().setWalkerId(walkId);
				WalkManager.startWalking((NpcAI) npc.getAi());
				npc.setState(CreatureState.ACTIVE, true);
				PacketSendUtility.broadcastPacket(npc, new SM_EMOTION(npc, EmotionType.CHANGE_SPEED, 0, npc.getObjectId()));
			}
		}, 2000);
	}

	private void startOfficerWalkerEvent() {
		startWalk((Npc) spawn(217655, 146.53816f, 713.5974f, 901.0108f, (byte) 111), "3002400003");
		startWalk((Npc) spawn(217655, 144.84991f, 720.9318f, 901.0604f, (byte) 96), "3002400004");
		startWalk((Npc) spawn(217655, 146.19899f, 709.60455f, 901.0078f, (byte) 110), "3002400005");
		startWalk((Npc) spawn(217656, 144.11845f, 716.8327f, 901.046f, (byte) 100), "3002400006");
		startWalk((Npc) spawn(217369, 144.96825f, 712.83344f, 901.0133f, (byte) 110), "3002400007");
		startWalk((Npc) spawn(217369, 144.75804f, 718.4293f, 901.05493f, (byte) 80), "3002400008");
	}

	@Override
	public void onInstanceCreate() {
		instance.setDoorState(177, true);
		Npc npc = instance.getNpc(217371);
		if (npc != null) {
			SkillEngine.getInstance().getSkill(npc, 19406, 1, npc).useNoAnimationSkill();
		}
	}

	@Override
	public void onInstanceDestroy() {
		isInstanceDestroyed = true;
	}

	@Override
	public void handleUseItemFinish(Player player, Npc npc) {
		switch (npc.getNpcId()) {
			case 730398:
				player.getLifeStats().increaseHp(SM_ATTACK_STATUS.TYPE.HP, 5205, npc);
				player.getLifeStats().increaseMp(SM_ATTACK_STATUS.TYPE.MP, 5205, 0, LOG.REGULAR);
				sendMsg(SM_SYSTEM_MESSAGE.STR_MSG_IDStation_Doping_02());
				npc.getController().delete();
				break;
			case 730397:
				SkillEngine.getInstance().getSkill(npc, 19520, 51, player).useNoAnimationSkill();
				sendMsg(SM_SYSTEM_MESSAGE.STR_MSG_IDStation_Doping_01());
				break;
			case 730410:
				instance.setDoorState(90, true);
				break;
			case 731533:
				SkillEngine.getInstance().getSkill(player, 21807, 1, player).useNoAnimationSkill();
				break;
			case 731534:
				SkillEngine.getInstance().getSkill(player, 21808, 1, player).useNoAnimationSkill();
				break;
		}
	}

	@Override
	public void onEnterZone(Player player, ZoneInstance zone) {
		if (zone.getAreaTemplate().getZoneName() == ZoneName.get("SKY_FORTRESS_WAREHOUSE_ZONE_300240000")) {
			// wtf is that? Notify only one player ?
			if (msgIsSent.compareAndSet(false, true)) {
				PacketSendUtility.sendPacket(player, STR_MSG_IDStation_Doping_01_AD());
			}
		}
	}

	@Override
	public void onPlayMovieEnd(Player player, int movieId) {
		if (movieId == 471)
			ThreadPoolManager.getInstance().schedule(() -> instance.setDoorState(308, true), 10000); // close side windows
	}
}

📎 첨부파일

댓글 작성 권한이 없습니다.
🏆 포인트 랭킹 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