Browse Source

revert [4362], need more thinking.

JIV 15 years ago
parent
commit
3de6fc276e

+ 2 - 0
L2_GameServer/java/com/l2jserver/gameserver/instancemanager/ZoneManager.java

@@ -156,6 +156,8 @@ public class ZoneManager
 								temp = new L2CastleZone(zoneId);
 							else if (zoneType.equals("SiegeZone"))
 								temp = new L2SiegeZone(zoneId);
+							else if (zoneType.equals("CastleTeleportZone"))
+								temp = new L2CastleTeleportZone(zoneId);
 							else if (zoneType.equals("FortZone"))
 								temp = new L2FortZone(zoneId);
 							else if (zoneType.equals("DamageZone"))

+ 20 - 2
L2_GameServer/java/com/l2jserver/gameserver/model/entity/Castle.java

@@ -54,8 +54,9 @@ import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.itemcontainer.PcInventory;
 import com.l2jserver.gameserver.model.zone.L2ZoneType;
-import com.l2jserver.gameserver.model.zone.type.L2CastleZone;
 import com.l2jserver.gameserver.model.zone.type.L2SiegeZone;
+import com.l2jserver.gameserver.model.zone.type.L2CastleTeleportZone;
+import com.l2jserver.gameserver.model.zone.type.L2CastleZone;
 import com.l2jserver.gameserver.network.serverpackets.PlaySound;
 import com.l2jserver.gameserver.network.serverpackets.PledgeShowInfoUpdate;
 
@@ -94,6 +95,7 @@ public class Castle
 	private boolean _showNpcCrest = false;
 	private L2SiegeZone _zone = null;
 	private L2CastleZone _castleZone = null;
+	private L2CastleTeleportZone _teleZone;
 	private L2Clan _formerOwner = null;
 	private List<L2ArtefactInstance> _artefacts = new ArrayList<L2ArtefactInstance>(1);
 	private TIntIntHashMap _engrave = new TIntIntHashMap(1);
@@ -420,9 +422,25 @@ public class Castle
 		return _castleZone;
 	}
 	
+	public L2CastleTeleportZone getTeleZone()
+	{
+		if (_teleZone == null)
+		{
+			for (L2ZoneType zone : ZoneManager.getInstance().getAllZones())
+			{
+				if (zone instanceof L2CastleTeleportZone && ((L2CastleTeleportZone) zone).getCastleId() == getCastleId())
+				{
+					_teleZone = (L2CastleTeleportZone) zone;
+					break;
+				}
+			}
+		}
+		return _teleZone;
+	}
+	
 	public void oustAllPlayers()
 	{
-		getCastleZone().oustAllPlayers();
+		getTeleZone().oustAllPlayers();
 	}
 	
 	/**

+ 0 - 23
L2_GameServer/java/com/l2jserver/gameserver/model/zone/L2SpawnZone.java

@@ -20,8 +20,6 @@ import javolution.util.FastList;
 
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.model.Location;
-import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.util.Rnd;
 
 /**
@@ -70,25 +68,4 @@ public abstract class L2SpawnZone extends L2ZoneType
 		else
 			return getSpawnLoc();
 	}
-	
-	public void oustAllPlayers()
-	{
-		if (_characterList == null)
-			return;
-		if (_characterList.isEmpty())
-			return;
-		for (L2Character character : _characterList.values())
-		{
-			if (character == null)
-				continue;
-			if (character instanceof L2PcInstance)
-			{
-				L2PcInstance player = (L2PcInstance) character;
-				if (player.getKarma() > 0)
-					player.teleToLocation(_chaoticSpawnLocs.get(Rnd.get(_chaoticSpawnLocs.size())), false);
-				else
-					player.teleToLocation(_spawnLocs.get(Rnd.get(_spawnLocs.size())), true);
-			}
-		}
-	}
 }

+ 144 - 0
L2_GameServer/java/com/l2jserver/gameserver/model/zone/type/L2CastleTeleportZone.java

@@ -0,0 +1,144 @@
+/*
+ * 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 com.l2jserver.gameserver.model.zone.type;
+
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.zone.L2ZoneType;
+import com.l2jserver.util.Rnd;
+
+import javolution.util.FastList;
+
+/**
+ * A castle teleporter zone
+ * used for Mass Gatekeepers
+ *
+ * @author  Kerberos
+ */
+public class L2CastleTeleportZone extends L2ZoneType
+{
+	private int[] _spawnLoc;
+	private int _castleId;
+	
+	public L2CastleTeleportZone(int id)
+	{
+		super(id);
+		
+		_spawnLoc = new int[5];
+	}
+	
+	@Override
+	public void setParameter(String name, String value)
+	{
+		if (name.equals("castleId"))
+		{
+			_castleId = Integer.parseInt(value);
+		}
+		else if (name.equals("spawnMinX"))
+		{
+			_spawnLoc[0] = Integer.parseInt(value);
+		}
+		else if (name.equals("spawnMaxX"))
+		{
+			_spawnLoc[1] = Integer.parseInt(value);
+		}
+		else if (name.equals("spawnMinY"))
+		{
+			_spawnLoc[2] = Integer.parseInt(value);
+		}
+		else if (name.equals("spawnMaxY"))
+		{
+			_spawnLoc[3] = Integer.parseInt(value);
+		}
+		else if (name.equals("spawnZ"))
+		{
+			_spawnLoc[4] = Integer.parseInt(value);
+		}
+		else
+			super.setParameter(name, value);
+	}
+	
+	@Override
+	protected void onEnter(L2Character character)
+	{
+		character.setInsideZone(L2Character.ZONE_NOSUMMONFRIEND, true);
+	}
+	
+	@Override
+	protected void onExit(L2Character character)
+	{
+		character.setInsideZone(L2Character.ZONE_NOSUMMONFRIEND, false);
+	}
+	
+	@Override
+	public void onDieInside(L2Character character)
+	{
+	}
+	
+	@Override
+	public void onReviveInside(L2Character character)
+	{
+	}
+	
+	/**
+	 * Returns all players within this zone
+	 * @return
+	 */
+	public FastList<L2PcInstance> getAllPlayers()
+	{
+		FastList<L2PcInstance> players = new FastList<L2PcInstance>();
+		
+		for (L2Character temp : _characterList.values())
+		{
+			if (temp instanceof L2PcInstance)
+				players.add((L2PcInstance) temp);
+		}
+		
+		return players;
+	}
+	
+	public void oustAllPlayers()
+	{
+		if (_characterList == null)
+			return;
+		if (_characterList.isEmpty())
+			return;
+		for (L2Character character : _characterList.values())
+		{
+			if (character == null)
+				continue;
+			if (character instanceof L2PcInstance)
+			{
+				L2PcInstance player = (L2PcInstance) character;
+				if (player.isOnline() == 1)
+					player.teleToLocation(Rnd.get(_spawnLoc[0], _spawnLoc[1]), Rnd.get(_spawnLoc[2], _spawnLoc[3]), _spawnLoc[4]);
+			}
+		}
+	}
+	
+	public int getCastleId()
+	{
+		return _castleId;
+	}
+	
+	/**
+	 * Get the spawn locations
+	 * @return
+	 */
+	public int[] getSpawn()
+	{
+		return _spawnLoc;
+	}
+}