Browse Source

Unhardcode ziggurat npc's into a new instance. Need dp support.

Charus 15 năm trước cách đây
mục cha
commit
c5eec1b48e

+ 0 - 98
L2_GameServer/java/net/sf/l2j/gameserver/model/actor/L2Npc.java

@@ -2250,104 +2250,6 @@ public class L2Npc extends L2Character
 						break;
 				}
 				break;
-			case 31095: //
-			case 31096: //
-			case 31097: //
-			case 31098: // Enter Necropolises
-			case 31099: //
-			case 31100: //
-			case 31101: // 
-			case 31102: //
-				if (isSealValidationPeriod)
-				{
-					if (playerCabal != compWinner || sealAvariceOwner != compWinner)
-					{
-						switch (compWinner)
-						{
-							case SevenSigns.CABAL_DAWN:
-								player.sendPacket(new SystemMessage(SystemMessageId.CAN_BE_USED_BY_DAWN));
-								filename += "necro_no.htm";
-								break;
-							case SevenSigns.CABAL_DUSK:
-								player.sendPacket(new SystemMessage(SystemMessageId.CAN_BE_USED_BY_DUSK));
-								filename += "necro_no.htm";
-								break;
-							case SevenSigns.CABAL_NULL:
-								filename = (getHtmlPath(npcId, val)); // do the default!
-								break;
-						}
-					}
-					else
-						filename = (getHtmlPath(npcId, val)); // do the default!
-				}
-				else
-				{
-					if (playerCabal == SevenSigns.CABAL_NULL)
-						filename += "necro_no.htm";
-					else
-						filename = (getHtmlPath(npcId, val)); // do the default!    
-				}
-				break;
-			case 31114: //
-			case 31115: //
-			case 31116: // Enter Catacombs
-			case 31117: //
-			case 31118: //
-			case 31119: //
-				if (isSealValidationPeriod)
-				{
-					if (playerCabal != compWinner || sealGnosisOwner != compWinner)
-					{
-						switch (compWinner)
-						{
-							case SevenSigns.CABAL_DAWN:
-								player.sendPacket(new SystemMessage(SystemMessageId.CAN_BE_USED_BY_DAWN));
-								filename += "cata_no.htm";
-								break;
-							case SevenSigns.CABAL_DUSK:
-								player.sendPacket(new SystemMessage(SystemMessageId.CAN_BE_USED_BY_DUSK));
-								filename += "cata_no.htm";
-								break;
-							case SevenSigns.CABAL_NULL:
-								filename = (getHtmlPath(npcId, val)); // do the default!
-								break;
-						}
-					}
-					else
-						filename = (getHtmlPath(npcId, val)); // do the default!
-				}
-				else
-				{
-					if (playerCabal == SevenSigns.CABAL_NULL)
-						filename += "cata_no.htm";
-					else
-						filename = (getHtmlPath(npcId, val)); // do the default!    
-				}
-				break;
-			case 31111: // Gatekeeper Spirit (Disciples)
-				if (playerCabal == sealAvariceOwner && playerCabal == compWinner)
-				{
-					switch (sealAvariceOwner)
-					{
-						case SevenSigns.CABAL_DAWN:
-							filename += "spirit_dawn.htm";
-							break;
-						case SevenSigns.CABAL_DUSK:
-							filename += "spirit_dusk.htm";
-							break;
-						case SevenSigns.CABAL_NULL:
-							filename += "spirit_null.htm";
-							break;
-					}
-				}
-				else
-				{
-					filename += "spirit_null.htm";
-				}
-				break;
-			case 31112: // Gatekeeper Spirit (Disciples)
-				filename += "spirit_exit.htm";
-				break;
 			case 31127: //
 			case 31128: //
 			case 31129: // Dawn Festival Guides

+ 169 - 0
L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2DungeonGatekeeperInstance.java

@@ -0,0 +1,169 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * 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 net.sf.l2j.gameserver.model.actor.instance;
+
+import java.util.StringTokenizer;
+
+import net.sf.l2j.gameserver.SevenSigns;
+import net.sf.l2j.gameserver.datatables.TeleportLocationTable;
+import net.sf.l2j.gameserver.model.L2TeleportLocation;
+import net.sf.l2j.gameserver.model.actor.L2Npc;
+import net.sf.l2j.gameserver.network.SystemMessageId;
+import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
+import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
+import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
+import net.sf.l2j.gameserver.templates.chars.L2NpcTemplate;
+
+public class L2DungeonGatekeeperInstance extends L2Npc
+{
+	public L2DungeonGatekeeperInstance(int objectId, L2NpcTemplate template)
+	{
+		super(objectId, template);
+	}
+
+	@Override
+	public void onBypassFeedback(L2PcInstance player, String command)
+	{
+		player.sendPacket(ActionFailed.STATIC_PACKET);
+
+		StringTokenizer st = new StringTokenizer(command, " ");
+		String actualCommand = st.nextToken(); // Get actual command
+
+		String filename = SevenSigns.SEVEN_SIGNS_HTML_PATH;
+		int sealAvariceOwner = SevenSigns.getInstance().getSealOwner(SevenSigns.SEAL_AVARICE);
+		int sealGnosisOwner = SevenSigns.getInstance().getSealOwner(SevenSigns.SEAL_GNOSIS);
+		int playerCabal = SevenSigns.getInstance().getPlayerCabal(player);
+		boolean isSealValidationPeriod = SevenSigns.getInstance().isSealValidationPeriod();
+		int compWinner = SevenSigns.getInstance().getCabalHighestScore();
+
+		if (actualCommand.startsWith("necro"))
+		{
+			boolean canPort = true;
+			if (isSealValidationPeriod)
+			{
+				if (compWinner == SevenSigns.CABAL_DAWN && (playerCabal != SevenSigns.CABAL_DAWN || sealAvariceOwner != SevenSigns.CABAL_DAWN))
+				{
+					player.sendPacket(new SystemMessage(SystemMessageId.CAN_BE_USED_BY_DAWN));
+					canPort = false;
+				}
+				else if (compWinner == SevenSigns.CABAL_DUSK && (playerCabal != SevenSigns.CABAL_DUSK || sealAvariceOwner != SevenSigns.CABAL_DUSK))
+				{
+					player.sendPacket(new SystemMessage(SystemMessageId.CAN_BE_USED_BY_DUSK));
+					canPort = false;
+				}
+				else if (compWinner == SevenSigns.CABAL_NULL && playerCabal != SevenSigns.CABAL_NULL)
+					canPort = true;
+				else if (playerCabal == SevenSigns.CABAL_NULL)
+					canPort = false;
+			}
+			else
+			{
+				if (playerCabal == SevenSigns.CABAL_NULL)
+					canPort = false;
+			}
+
+			if (!canPort)
+			{
+				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
+				filename += "necro_no.htm";
+				html.setFile(filename);
+				player.sendPacket(html);
+			}
+			else
+			{
+				doTeleport(player, Integer.parseInt(st.nextToken()));
+				player.setIsIn7sDungeon(true);
+			}
+		}
+		if (actualCommand.startsWith("cata"))
+		{
+			boolean canPort = true;
+			if (isSealValidationPeriod)
+			{
+				if (compWinner == SevenSigns.CABAL_DAWN && (playerCabal != SevenSigns.CABAL_DAWN || sealGnosisOwner != SevenSigns.CABAL_DAWN))
+				{
+					player.sendPacket(new SystemMessage(SystemMessageId.CAN_BE_USED_BY_DAWN));
+					canPort = false;
+				}
+				else if (compWinner == SevenSigns.CABAL_DUSK && (playerCabal != SevenSigns.CABAL_DUSK || sealGnosisOwner != SevenSigns.CABAL_DUSK))
+				{
+					player.sendPacket(new SystemMessage(SystemMessageId.CAN_BE_USED_BY_DUSK));
+					canPort = false;
+				}
+				else if (compWinner == SevenSigns.CABAL_NULL && playerCabal != SevenSigns.CABAL_NULL)
+					canPort = true;
+				else if (playerCabal == SevenSigns.CABAL_NULL)
+					canPort = false;
+			}
+			else
+			{
+				if (playerCabal == SevenSigns.CABAL_NULL)
+					canPort = false;
+			}
+
+			if (!canPort)
+			{
+				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
+				filename += "cata_no.htm";
+				html.setFile(filename);
+				player.sendPacket(html);
+			}
+			else
+			{
+				doTeleport(player, Integer.parseInt(st.nextToken()));
+				player.setIsIn7sDungeon(true);
+			}
+		}
+		else if (actualCommand.startsWith("exit"))
+		{
+			doTeleport(player, Integer.parseInt(st.nextToken()));
+			player.setIsIn7sDungeon(false);
+		}
+		else if (actualCommand.startsWith("goto"))
+		{
+			doTeleport(player, Integer.parseInt(st.nextToken()));
+		}
+		else
+			super.onBypassFeedback(player, command);
+	}
+
+	private void doTeleport(L2PcInstance player, int val)
+	{
+		L2TeleportLocation list = TeleportLocationTable.getInstance().getTemplate(val);
+		if (list != null)
+		{
+			if (player.isAlikeDead())
+				return;
+
+			player.teleToLocation(list.getLocX(), list.getLocY(), list.getLocZ(), true);
+		}
+		else
+			_log.warning("No teleport destination with id:" + val);
+
+		player.sendPacket(ActionFailed.STATIC_PACKET);
+	}
+
+	@Override
+	public String getHtmlPath(int npcId, int val)
+	{
+		String pom = "";
+		if (val == 0)
+			pom = "" + npcId;
+		else
+			pom = npcId + "-" + val;
+
+		return "data/html/teleporter/" + pom + ".htm";
+	}
+}