Keep proper instance of SevenSignsRBs script.
This commit is contained in:
		| @@ -14,27 +14,28 @@ | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package instances.SevenSignsRBs; | ||||
| package ai.bosses.SevenSignsRBs; | ||||
| 
 | ||||
| import java.util.List; | ||||
| 
 | ||||
| import org.l2jmobius.gameserver.enums.RaidBossStatus; | ||||
| import org.l2jmobius.gameserver.instancemanager.DBSpawnManager; | ||||
| import org.l2jmobius.gameserver.instancemanager.ZoneManager; | ||||
| import org.l2jmobius.gameserver.model.Location; | ||||
| import org.l2jmobius.gameserver.model.Party; | ||||
| import org.l2jmobius.gameserver.model.actor.Creature; | ||||
| import org.l2jmobius.gameserver.model.actor.Npc; | ||||
| import org.l2jmobius.gameserver.model.actor.Player; | ||||
| import org.l2jmobius.gameserver.model.instancezone.Instance; | ||||
| import org.l2jmobius.gameserver.model.skill.AbnormalVisualEffect; | ||||
| import org.l2jmobius.gameserver.model.zone.type.NoRestartZone; | ||||
| 
 | ||||
| import instances.AbstractInstance; | ||||
| import ai.AbstractNpcAI; | ||||
| 
 | ||||
| /** | ||||
|  * @author RobikBobik | ||||
|  * @NOTE: Retail like work | ||||
|  * @TODO: When one RB die, the second will be invul for 5 minutes. | ||||
|  */ | ||||
| public class SevenSignsRBs extends AbstractInstance | ||||
| public class SevenSignsRBs extends AbstractNpcAI | ||||
| { | ||||
| 	// NPCs | ||||
| 	private static final int ANAKIM_GATEKEEPER_SPIRIT = 31089; | ||||
| @@ -42,17 +43,14 @@ public class SevenSignsRBs extends AbstractInstance | ||||
| 	private static final int GATEKEEPER_SPIRIT_OUT_TELEPORT = 31088; | ||||
| 	private static final int ANAKIM = 25286; | ||||
| 	private static final int LILITH = 25283; | ||||
| 	 | ||||
| 	// Misc | ||||
| 	private static final int ANAKIM_TEMPLATE_ID = 200; | ||||
| 	private static final int LILITH_TEMPLATE_ID = 199; | ||||
| 	 | ||||
| 	private static final int MAX_PLAYERS_IN_ZONE = 300; | ||||
| 	 | ||||
| 	private static final NoRestartZone ANAKIM_ZONE = ZoneManager.getInstance().getZoneById(70052, NoRestartZone.class); | ||||
| 	private static final NoRestartZone LILITH_ZONE = ZoneManager.getInstance().getZoneById(70053, NoRestartZone.class); | ||||
| 	 | ||||
| 	// TELEPORTS | ||||
| 	private static final Location TELEPORT_TO_LILITH = new Location(185657, -10112, -5496); | ||||
| 	private static final Location TELEPORT_TO_ANAKIM = new Location(-7283, 19086, -5496); | ||||
| 	 | ||||
| 	private static final Location[] TELEPORT_TO_DARK_ELVEN = | ||||
| 	{ | ||||
| 		new Location(12168, 17149, -4575), | ||||
| @@ -61,19 +59,20 @@ public class SevenSignsRBs extends AbstractInstance | ||||
| 		new Location(11169, 15922, -4585), | ||||
| 	}; | ||||
| 	 | ||||
| 	// TODO: When teleport from instance done. Enable it | ||||
| 	/* | ||||
| 	 * private static final Location[] TELEPORT_TO_ADEN = { new Location(148053, 26935, -2206), new Location(148053, 28017, -2269), new Location(146558, 28017, -2269), new Location(146558, 26935, -2206), }; | ||||
| 	 */ | ||||
| 	private static final Location[] TELEPORT_TO_ADEN = | ||||
| 	{ | ||||
| 		new Location(148053, 26935, -2206), | ||||
| 		new Location(148053, 28017, -2269), | ||||
| 		new Location(146558, 28017, -2269), | ||||
| 		new Location(146558, 26935, -2206), | ||||
| 	}; | ||||
| 	 | ||||
| 	public SevenSignsRBs() | ||||
| 	{ | ||||
| 		super(ANAKIM_TEMPLATE_ID, LILITH_TEMPLATE_ID); | ||||
| 		addStartNpc(ANAKIM_GATEKEEPER_SPIRIT, LILITH_GATEKEEPER_SPIRIT); | ||||
| 		addTalkId(ANAKIM_GATEKEEPER_SPIRIT, LILITH_GATEKEEPER_SPIRIT, GATEKEEPER_SPIRIT_OUT_TELEPORT); | ||||
| 		addKillId(ANAKIM, LILITH); | ||||
| 		addAttackId(ANAKIM, LILITH); | ||||
| 		addInstanceLeaveId(ANAKIM_TEMPLATE_ID, LILITH_TEMPLATE_ID); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| @@ -83,6 +82,11 @@ public class SevenSignsRBs extends AbstractInstance | ||||
| 		{ | ||||
| 			case "ANAKIM_ENTER": | ||||
| 			{ | ||||
| 				if (DBSpawnManager.getInstance().getStatus(ANAKIM) != RaidBossStatus.ALIVE) | ||||
| 				{ | ||||
| 					player.sendMessage("Anakim is not present at the moment"); | ||||
| 					break; | ||||
| 				} | ||||
| 				if (player.isInParty()) | ||||
| 				{ | ||||
| 					final Party party = player.getParty(); | ||||
| @@ -90,7 +94,7 @@ public class SevenSignsRBs extends AbstractInstance | ||||
| 					final List<Player> members = (isInCC) ? party.getCommandChannel().getMembers() : party.getMembers(); | ||||
| 					if (members.size() > (MAX_PLAYERS_IN_ZONE - ANAKIM_ZONE.getPlayersInside().size())) | ||||
| 					{ | ||||
| 						player.sendMessage("Lilith Sanctum reached 300 players. You cannot enter now."); | ||||
| 						player.sendMessage("Anakims Sanctum reached " + MAX_PLAYERS_IN_ZONE + " players. You cannot enter now."); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| @@ -100,13 +104,13 @@ public class SevenSignsRBs extends AbstractInstance | ||||
| 							{ | ||||
| 								player.sendMessage("Player " + member.getName() + " must go closer to Gatekeeper Spirit."); | ||||
| 							} | ||||
| 							enterInstance(member, npc, ANAKIM_TEMPLATE_ID); | ||||
| 							member.teleToLocation(TELEPORT_TO_ANAKIM); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				else if (player.isGM()) | ||||
| 				{ | ||||
| 					enterInstance(player, npc, ANAKIM_TEMPLATE_ID); | ||||
| 					player.teleToLocation(TELEPORT_TO_ANAKIM); | ||||
| 					player.sendMessage("SYS: You have entered as GM/Admin to Anakim Instance"); | ||||
| 				} | ||||
| 				else | ||||
| @@ -114,13 +118,19 @@ public class SevenSignsRBs extends AbstractInstance | ||||
| 					if (!player.isInsideRadius3D(npc, 1000)) | ||||
| 					{ | ||||
| 						player.sendMessage("You must go closer to Gatekeeper Spirit."); | ||||
| 						break; | ||||
| 					} | ||||
| 					enterInstance(player, npc, ANAKIM_TEMPLATE_ID); | ||||
| 					player.teleToLocation(TELEPORT_TO_ANAKIM); | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 			case "LILITH_ENTER": | ||||
| 			{ | ||||
| 				if (DBSpawnManager.getInstance().getStatus(LILITH) != RaidBossStatus.ALIVE) | ||||
| 				{ | ||||
| 					player.sendMessage("Lilith is not present at the moment"); | ||||
| 					break; | ||||
| 				} | ||||
| 				if (player.isInParty()) | ||||
| 				{ | ||||
| 					final Party party = player.getParty(); | ||||
| @@ -128,7 +138,7 @@ public class SevenSignsRBs extends AbstractInstance | ||||
| 					final List<Player> members = (isInCC) ? party.getCommandChannel().getMembers() : party.getMembers(); | ||||
| 					if (members.size() > (MAX_PLAYERS_IN_ZONE - LILITH_ZONE.getPlayersInside().size())) | ||||
| 					{ | ||||
| 						player.sendMessage("Lilith Sanctum reached 300 players. You cannot enter now."); | ||||
| 						player.sendMessage("Lilith Sanctum reached " + MAX_PLAYERS_IN_ZONE + " players. You cannot enter now."); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| @@ -138,13 +148,13 @@ public class SevenSignsRBs extends AbstractInstance | ||||
| 							{ | ||||
| 								player.sendMessage("Player " + member.getName() + " must go closer to Gatekeeper Spirit."); | ||||
| 							} | ||||
| 							enterInstance(member, npc, LILITH_TEMPLATE_ID); | ||||
| 							member.teleToLocation(TELEPORT_TO_LILITH); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				else if (player.isGM()) | ||||
| 				{ | ||||
| 					enterInstance(player, npc, LILITH_TEMPLATE_ID); | ||||
| 					player.teleToLocation(TELEPORT_TO_LILITH); | ||||
| 					player.sendMessage("SYS: You have entered as GM/Admin to Anakim Instance"); | ||||
| 				} | ||||
| 				else | ||||
| @@ -152,8 +162,9 @@ public class SevenSignsRBs extends AbstractInstance | ||||
| 					if (!player.isInsideRadius3D(npc, 1000)) | ||||
| 					{ | ||||
| 						player.sendMessage("You must go closer to Gatekeeper Spirit."); | ||||
| 						break; | ||||
| 					} | ||||
| 					enterInstance(player, npc, LILITH_TEMPLATE_ID); | ||||
| 					player.teleToLocation(TELEPORT_TO_LILITH); | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| @@ -181,34 +192,55 @@ public class SevenSignsRBs extends AbstractInstance | ||||
| 			} | ||||
| 			case "TELEPORT_OUT": | ||||
| 			{ | ||||
| 				// TODO: Different teleport location from instance. | ||||
| 				// switch (player.getInstanceId()) | ||||
| 				// { | ||||
| 				// case ANAKIM_TEMPLATE_ID: | ||||
| 				// { | ||||
| 				// final Location destination = TELEPORT_TO_DARK_ELVEN[getRandom(TELEPORT_TO_DARK_ELVEN.length)]; | ||||
| 				// player.teleToLocation(destination.getX() + getRandom(100), destination.getY() + getRandom(100), destination.getZ()); | ||||
| 				// break; | ||||
| 				// } | ||||
| 				// case LILITH_TEMPLATE_ID: | ||||
| 				// { | ||||
| 				// final Location destination = TELEPORT_TO_ADEN[getRandom(TELEPORT_TO_ADEN.length)]; | ||||
| 				// player.teleToLocation(destination.getX() + getRandom(100), destination.getY() + getRandom(100), destination.getZ()); | ||||
| 				// break; | ||||
| 				// } | ||||
| 				// } | ||||
| 				final Location destination = TELEPORT_TO_DARK_ELVEN[getRandom(TELEPORT_TO_DARK_ELVEN.length)]; | ||||
| 				player.teleToLocation(destination.getX() + getRandom(100), destination.getY() + getRandom(100), destination.getZ()); | ||||
| 				if (ANAKIM_ZONE.isInsideZone(player.getLocation())) | ||||
| 				{ | ||||
| 					final Location destination = TELEPORT_TO_DARK_ELVEN[getRandom(TELEPORT_TO_DARK_ELVEN.length)]; | ||||
| 					player.teleToLocation(destination.getX() + getRandom(100), destination.getY() + getRandom(100), destination.getZ()); | ||||
| 					break; | ||||
| 				} | ||||
| 				if (LILITH_ZONE.isInsideZone(player.getLocation())) | ||||
| 				{ | ||||
| 					final Location destination = TELEPORT_TO_ADEN[getRandom(TELEPORT_TO_ADEN.length)]; | ||||
| 					player.teleToLocation(destination.getX() + getRandom(100), destination.getY() + getRandom(100), destination.getZ()); | ||||
| 					break; | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 			case "ANAKIM_DEATH_CAST_LILITH_INVUL": | ||||
| 			{ | ||||
| 				// TODO: When one RB die, the second will be invul for 5 minutes. | ||||
| 				if (DBSpawnManager.getInstance().getStatus(LILITH) == RaidBossStatus.ALIVE) | ||||
| 				{ | ||||
| 					Npc LILITH_NPC = DBSpawnManager.getInstance().getNpcs().get(LILITH); | ||||
| 					LILITH_NPC.setInvul(true); | ||||
| 					LILITH_NPC.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.INVINCIBILITY); | ||||
| 					startQuestTimer("LILITH_INVUL_END", 300000, null, player); | ||||
| 				} | ||||
| 				 | ||||
| 				break; | ||||
| 			} | ||||
| 			case "LILITH_DEATH_CAST_ANAKIM_INVUL": | ||||
| 			{ | ||||
| 				// TODO: When one RB die, the second will be invul for 5 minutes. | ||||
| 				if (DBSpawnManager.getInstance().getStatus(ANAKIM) == RaidBossStatus.ALIVE) | ||||
| 				{ | ||||
| 					Npc ANAKIM_NPC = DBSpawnManager.getInstance().getNpcs().get(ANAKIM); | ||||
| 					ANAKIM_NPC.setInvul(true); | ||||
| 					ANAKIM_NPC.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.INVINCIBILITY); | ||||
| 					startQuestTimer("ANAKIM_INVUL_END", 300000, null, player); | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 			case "LILITH_INVUL_END": | ||||
| 			{ | ||||
| 				Npc LILITH_NPC = DBSpawnManager.getInstance().getNpcs().get(LILITH); | ||||
| 				LILITH_NPC.setInvul(false); | ||||
| 				LILITH_NPC.getEffectList().stopAbnormalVisualEffect(AbnormalVisualEffect.INVINCIBILITY); | ||||
| 				break; | ||||
| 			} | ||||
| 			case "ANAKIM_INVUL_END": | ||||
| 			{ | ||||
| 				Npc ANAKIM_NPC = DBSpawnManager.getInstance().getNpcs().get(ANAKIM); | ||||
| 				ANAKIM_NPC.setInvul(false); | ||||
| 				ANAKIM_NPC.getEffectList().stopAbnormalVisualEffect(AbnormalVisualEffect.INVINCIBILITY); | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| @@ -222,26 +254,17 @@ public class SevenSignsRBs extends AbstractInstance | ||||
| 		{ | ||||
| 			case ANAKIM: | ||||
| 			{ | ||||
| 				// TODO: | ||||
| 				// startQuestTimer("ANAKIM_DEATH_CAST_LILITH_INVUL", 1000, null, null); | ||||
| 				startQuestTimer("REMOVE_PLAYERS_FROM_ZONE_ANAKIM", 600000, null, player); | ||||
| 				startQuestTimer("ANAKIM_DEATH_CAST_LILITH_INVUL", 1000, null, null); | ||||
| 				addSpawn(GATEKEEPER_SPIRIT_OUT_TELEPORT, -6664, 18501, -5495, 0, false, 600000, false, npc.getInstanceId()); | ||||
| 				break; | ||||
| 			} | ||||
| 			case LILITH: | ||||
| 			{ | ||||
| 				// TODO: | ||||
| 				// startQuestTimer("LILITH_DEATH_CAST_ANAKIM_INVUL", 1000, null, null); | ||||
| 				startQuestTimer("REMOVE_PLAYERS_FROM_ZONE_LILITH", 600000, null, player); | ||||
| 				startQuestTimer("LILITH_DEATH_CAST_ANAKIM_INVUL", 1000, null, null); | ||||
| 				addSpawn(GATEKEEPER_SPIRIT_OUT_TELEPORT, 185062, -9612, -5493, 0, false, 600000, false, npc.getInstanceId()); | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		final Instance world = npc.getInstanceWorld(); | ||||
| 		if (world != null) | ||||
| 		{ | ||||
| 			world.finishInstance(); | ||||
| 		} | ||||
| 		return super.onKill(npc, player, isSummon); | ||||
| 	} | ||||
| 	 | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDevelopment
					MobiusDevelopment