Support for exiting instance at nearest town.
This commit is contained in:
		| @@ -89,6 +89,7 @@ | ||||
| 												<xs:enumeration value="FIXED" /> | ||||
| 												<xs:enumeration value="RANDOM" /> | ||||
| 												<xs:enumeration value="ORIGIN" /> | ||||
| 												<xs:enumeration value="TOWN" /> | ||||
| 											</xs:restriction> | ||||
| 										</xs:simpleType> | ||||
| 									</xs:attribute> | ||||
|   | ||||
| @@ -24,5 +24,6 @@ public enum InstanceTeleportType | ||||
| 	NONE, | ||||
| 	FIXED, | ||||
| 	RANDOM, | ||||
| 	ORIGIN | ||||
| 	ORIGIN, | ||||
| 	TOWN | ||||
| } | ||||
| @@ -209,6 +209,10 @@ public class InstanceManager implements IXmlReader | ||||
| 								{ | ||||
| 									template.setExitLocation(type, null); | ||||
| 								} | ||||
| 								else if (type.equals(InstanceTeleportType.TOWN)) | ||||
| 								{ | ||||
| 									template.setExitLocation(type, null); | ||||
| 								} | ||||
| 								else | ||||
| 								{ | ||||
| 									final List<Location> locations = new ArrayList<>(); | ||||
|   | ||||
| @@ -325,23 +325,7 @@ public class MapRegionManager implements IXmlReader | ||||
| 			// Karma player land out of city | ||||
| 			if (player.getReputation() < 0) | ||||
| 			{ | ||||
| 				try | ||||
| 				{ | ||||
| 					final RespawnZone zone = ZoneManager.getInstance().getZone(player, RespawnZone.class); | ||||
| 					if (zone != null) | ||||
| 					{ | ||||
| 						return getRestartRegion(creature, zone.getRespawnPoint((PlayerInstance) creature)).getChaoticSpawnLoc(); | ||||
| 					} | ||||
| 					return getMapRegion(creature).getChaoticSpawnLoc(); | ||||
| 				} | ||||
| 				catch (Exception e) | ||||
| 				{ | ||||
| 					if (player.isFlyingMounted()) | ||||
| 					{ | ||||
| 						return REGIONS.get("union_base_of_kserth").getChaoticSpawnLoc(); | ||||
| 					} | ||||
| 					return REGIONS.get(DEFAULT_RESPAWN).getChaoticSpawnLoc(); | ||||
| 				} | ||||
| 				return getNearestKarmaRespawn(player); | ||||
| 			} | ||||
| 			 | ||||
| 			// Checking if needed to be respawned in "far" town from the castle; | ||||
| @@ -377,6 +361,32 @@ public class MapRegionManager implements IXmlReader | ||||
| 		} | ||||
| 		 | ||||
| 		// Get the nearest town | ||||
| 		return getNearestTownRespawn(creature); | ||||
| 	} | ||||
| 	 | ||||
| 	public Location getNearestKarmaRespawn(PlayerInstance player) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			final RespawnZone zone = ZoneManager.getInstance().getZone(player, RespawnZone.class); | ||||
| 			if (zone != null) | ||||
| 			{ | ||||
| 				return getRestartRegion(player, zone.getRespawnPoint(player)).getChaoticSpawnLoc(); | ||||
| 			} | ||||
| 			return getMapRegion(player).getChaoticSpawnLoc(); | ||||
| 		} | ||||
| 		catch (Exception e) | ||||
| 		{ | ||||
| 			if (player.isFlyingMounted()) | ||||
| 			{ | ||||
| 				return REGIONS.get("union_base_of_kserth").getChaoticSpawnLoc(); | ||||
| 			} | ||||
| 			return REGIONS.get(DEFAULT_RESPAWN).getChaoticSpawnLoc(); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public Location getNearestTownRespawn(Creature creature) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			final RespawnZone zone = ZoneManager.getInstance().getZone(creature, RespawnZone.class); | ||||
|   | ||||
| @@ -33,6 +33,7 @@ import org.l2jmobius.gameserver.enums.InstanceReenterType; | ||||
| import org.l2jmobius.gameserver.enums.InstanceRemoveBuffType; | ||||
| import org.l2jmobius.gameserver.enums.InstanceTeleportType; | ||||
| import org.l2jmobius.gameserver.instancemanager.InstanceManager; | ||||
| import org.l2jmobius.gameserver.instancemanager.MapRegionManager; | ||||
| import org.l2jmobius.gameserver.model.AbstractPlayerGroup; | ||||
| import org.l2jmobius.gameserver.model.Location; | ||||
| import org.l2jmobius.gameserver.model.PlayerCondOverride; | ||||
| @@ -367,7 +368,6 @@ public class InstanceTemplate extends ListenersContainer implements IIdentifiabl | ||||
| 	public Location getExitLocation(PlayerInstance player) | ||||
| 	{ | ||||
| 		Location location = null; | ||||
| 		 | ||||
| 		switch (_exitLocationType) | ||||
| 		{ | ||||
| 			case RANDOM: | ||||
| @@ -391,6 +391,18 @@ public class InstanceTemplate extends ListenersContainer implements IIdentifiabl | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 			case TOWN: | ||||
| 			{ | ||||
| 				if (player.getReputation() < 0) | ||||
| 				{ | ||||
| 					location = MapRegionManager.getInstance().getNearestKarmaRespawn(player); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					location = MapRegionManager.getInstance().getNearestTownRespawn(player); | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		return location; | ||||
| 	} | ||||
|   | ||||
| @@ -89,6 +89,7 @@ | ||||
| 												<xs:enumeration value="FIXED" /> | ||||
| 												<xs:enumeration value="RANDOM" /> | ||||
| 												<xs:enumeration value="ORIGIN" /> | ||||
| 												<xs:enumeration value="TOWN" /> | ||||
| 											</xs:restriction> | ||||
| 										</xs:simpleType> | ||||
| 									</xs:attribute> | ||||
|   | ||||
| @@ -24,5 +24,6 @@ public enum InstanceTeleportType | ||||
| 	NONE, | ||||
| 	FIXED, | ||||
| 	RANDOM, | ||||
| 	ORIGIN | ||||
| 	ORIGIN, | ||||
| 	TOWN | ||||
| } | ||||
| @@ -209,6 +209,10 @@ public class InstanceManager implements IXmlReader | ||||
| 								{ | ||||
| 									template.setExitLocation(type, null); | ||||
| 								} | ||||
| 								else if (type.equals(InstanceTeleportType.TOWN)) | ||||
| 								{ | ||||
| 									template.setExitLocation(type, null); | ||||
| 								} | ||||
| 								else | ||||
| 								{ | ||||
| 									final List<Location> locations = new ArrayList<>(); | ||||
|   | ||||
| @@ -325,23 +325,7 @@ public class MapRegionManager implements IXmlReader | ||||
| 			// Karma player land out of city | ||||
| 			if (player.getReputation() < 0) | ||||
| 			{ | ||||
| 				try | ||||
| 				{ | ||||
| 					final RespawnZone zone = ZoneManager.getInstance().getZone(player, RespawnZone.class); | ||||
| 					if (zone != null) | ||||
| 					{ | ||||
| 						return getRestartRegion(creature, zone.getRespawnPoint((PlayerInstance) creature)).getChaoticSpawnLoc(); | ||||
| 					} | ||||
| 					return getMapRegion(creature).getChaoticSpawnLoc(); | ||||
| 				} | ||||
| 				catch (Exception e) | ||||
| 				{ | ||||
| 					if (player.isFlyingMounted()) | ||||
| 					{ | ||||
| 						return REGIONS.get("union_base_of_kserth").getChaoticSpawnLoc(); | ||||
| 					} | ||||
| 					return REGIONS.get(DEFAULT_RESPAWN).getChaoticSpawnLoc(); | ||||
| 				} | ||||
| 				return getNearestKarmaRespawn(player); | ||||
| 			} | ||||
| 			 | ||||
| 			// Checking if needed to be respawned in "far" town from the castle; | ||||
| @@ -377,6 +361,32 @@ public class MapRegionManager implements IXmlReader | ||||
| 		} | ||||
| 		 | ||||
| 		// Get the nearest town | ||||
| 		return getNearestTownRespawn(creature); | ||||
| 	} | ||||
| 	 | ||||
| 	public Location getNearestKarmaRespawn(PlayerInstance player) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			final RespawnZone zone = ZoneManager.getInstance().getZone(player, RespawnZone.class); | ||||
| 			if (zone != null) | ||||
| 			{ | ||||
| 				return getRestartRegion(player, zone.getRespawnPoint(player)).getChaoticSpawnLoc(); | ||||
| 			} | ||||
| 			return getMapRegion(player).getChaoticSpawnLoc(); | ||||
| 		} | ||||
| 		catch (Exception e) | ||||
| 		{ | ||||
| 			if (player.isFlyingMounted()) | ||||
| 			{ | ||||
| 				return REGIONS.get("union_base_of_kserth").getChaoticSpawnLoc(); | ||||
| 			} | ||||
| 			return REGIONS.get(DEFAULT_RESPAWN).getChaoticSpawnLoc(); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public Location getNearestTownRespawn(Creature creature) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			final RespawnZone zone = ZoneManager.getInstance().getZone(creature, RespawnZone.class); | ||||
|   | ||||
| @@ -33,6 +33,7 @@ import org.l2jmobius.gameserver.enums.InstanceReenterType; | ||||
| import org.l2jmobius.gameserver.enums.InstanceRemoveBuffType; | ||||
| import org.l2jmobius.gameserver.enums.InstanceTeleportType; | ||||
| import org.l2jmobius.gameserver.instancemanager.InstanceManager; | ||||
| import org.l2jmobius.gameserver.instancemanager.MapRegionManager; | ||||
| import org.l2jmobius.gameserver.model.AbstractPlayerGroup; | ||||
| import org.l2jmobius.gameserver.model.Location; | ||||
| import org.l2jmobius.gameserver.model.PlayerCondOverride; | ||||
| @@ -367,7 +368,6 @@ public class InstanceTemplate extends ListenersContainer implements IIdentifiabl | ||||
| 	public Location getExitLocation(PlayerInstance player) | ||||
| 	{ | ||||
| 		Location location = null; | ||||
| 		 | ||||
| 		switch (_exitLocationType) | ||||
| 		{ | ||||
| 			case RANDOM: | ||||
| @@ -391,6 +391,18 @@ public class InstanceTemplate extends ListenersContainer implements IIdentifiabl | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 			case TOWN: | ||||
| 			{ | ||||
| 				if (player.getReputation() < 0) | ||||
| 				{ | ||||
| 					location = MapRegionManager.getInstance().getNearestKarmaRespawn(player); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					location = MapRegionManager.getInstance().getNearestTownRespawn(player); | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		return location; | ||||
| 	} | ||||
|   | ||||
| @@ -89,6 +89,7 @@ | ||||
| 												<xs:enumeration value="FIXED" /> | ||||
| 												<xs:enumeration value="RANDOM" /> | ||||
| 												<xs:enumeration value="ORIGIN" /> | ||||
| 												<xs:enumeration value="TOWN" /> | ||||
| 											</xs:restriction> | ||||
| 										</xs:simpleType> | ||||
| 									</xs:attribute> | ||||
|   | ||||
| @@ -24,5 +24,6 @@ public enum InstanceTeleportType | ||||
| 	NONE, | ||||
| 	FIXED, | ||||
| 	RANDOM, | ||||
| 	ORIGIN | ||||
| 	ORIGIN, | ||||
| 	TOWN | ||||
| } | ||||
| @@ -209,6 +209,10 @@ public class InstanceManager implements IXmlReader | ||||
| 								{ | ||||
| 									template.setExitLocation(type, null); | ||||
| 								} | ||||
| 								else if (type.equals(InstanceTeleportType.TOWN)) | ||||
| 								{ | ||||
| 									template.setExitLocation(type, null); | ||||
| 								} | ||||
| 								else | ||||
| 								{ | ||||
| 									final List<Location> locations = new ArrayList<>(); | ||||
|   | ||||
| @@ -325,28 +325,7 @@ public class MapRegionManager implements IXmlReader | ||||
| 			// Karma player land out of city | ||||
| 			if (player.getReputation() < 0) | ||||
| 			{ | ||||
| 				try | ||||
| 				{ | ||||
| 					final RespawnZone zone = ZoneManager.getInstance().getZone(player, RespawnZone.class); | ||||
| 					if (zone != null) | ||||
| 					{ | ||||
| 						return getRestartRegion(creature, zone.getRespawnPoint((PlayerInstance) creature)).getChaoticSpawnLoc(); | ||||
| 					} | ||||
| 					// Opposing race check. | ||||
| 					if (getMapRegion(creature).getBannedRace().containsKey(creature.getRace())) | ||||
| 					{ | ||||
| 						return REGIONS.get(getMapRegion(creature).getBannedRace().get(creature.getRace())).getChaoticSpawnLoc(); | ||||
| 					} | ||||
| 					return getMapRegion(creature).getChaoticSpawnLoc(); | ||||
| 				} | ||||
| 				catch (Exception e) | ||||
| 				{ | ||||
| 					if (player.isFlyingMounted()) | ||||
| 					{ | ||||
| 						return REGIONS.get("union_base_of_kserth").getChaoticSpawnLoc(); | ||||
| 					} | ||||
| 					return REGIONS.get(DEFAULT_RESPAWN).getChaoticSpawnLoc(); | ||||
| 				} | ||||
| 				return getNearestKarmaRespawn(player); | ||||
| 			} | ||||
| 			 | ||||
| 			// Checking if needed to be respawned in "far" town from the castle; | ||||
| @@ -382,6 +361,37 @@ public class MapRegionManager implements IXmlReader | ||||
| 		} | ||||
| 		 | ||||
| 		// Get the nearest town | ||||
| 		return getNearestTownRespawn(creature); | ||||
| 	} | ||||
| 	 | ||||
| 	public Location getNearestKarmaRespawn(PlayerInstance player) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			final RespawnZone zone = ZoneManager.getInstance().getZone(player, RespawnZone.class); | ||||
| 			if (zone != null) | ||||
| 			{ | ||||
| 				return getRestartRegion(player, zone.getRespawnPoint(player)).getChaoticSpawnLoc(); | ||||
| 			} | ||||
| 			// Opposing race check. | ||||
| 			if (getMapRegion(player).getBannedRace().containsKey(player.getRace())) | ||||
| 			{ | ||||
| 				return REGIONS.get(getMapRegion(player).getBannedRace().get(player.getRace())).getChaoticSpawnLoc(); | ||||
| 			} | ||||
| 			return getMapRegion(player).getChaoticSpawnLoc(); | ||||
| 		} | ||||
| 		catch (Exception e) | ||||
| 		{ | ||||
| 			if (player.isFlyingMounted()) | ||||
| 			{ | ||||
| 				return REGIONS.get("union_base_of_kserth").getChaoticSpawnLoc(); | ||||
| 			} | ||||
| 			return REGIONS.get(DEFAULT_RESPAWN).getChaoticSpawnLoc(); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public Location getNearestTownRespawn(Creature creature) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			final RespawnZone zone = ZoneManager.getInstance().getZone(creature, RespawnZone.class); | ||||
|   | ||||
| @@ -33,6 +33,7 @@ import org.l2jmobius.gameserver.enums.InstanceReenterType; | ||||
| import org.l2jmobius.gameserver.enums.InstanceRemoveBuffType; | ||||
| import org.l2jmobius.gameserver.enums.InstanceTeleportType; | ||||
| import org.l2jmobius.gameserver.instancemanager.InstanceManager; | ||||
| import org.l2jmobius.gameserver.instancemanager.MapRegionManager; | ||||
| import org.l2jmobius.gameserver.model.AbstractPlayerGroup; | ||||
| import org.l2jmobius.gameserver.model.Location; | ||||
| import org.l2jmobius.gameserver.model.PlayerCondOverride; | ||||
| @@ -367,7 +368,6 @@ public class InstanceTemplate extends ListenersContainer implements IIdentifiabl | ||||
| 	public Location getExitLocation(PlayerInstance player) | ||||
| 	{ | ||||
| 		Location location = null; | ||||
| 		 | ||||
| 		switch (_exitLocationType) | ||||
| 		{ | ||||
| 			case RANDOM: | ||||
| @@ -391,6 +391,18 @@ public class InstanceTemplate extends ListenersContainer implements IIdentifiabl | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 			case TOWN: | ||||
| 			{ | ||||
| 				if (player.getReputation() < 0) | ||||
| 				{ | ||||
| 					location = MapRegionManager.getInstance().getNearestKarmaRespawn(player); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					location = MapRegionManager.getInstance().getNearestTownRespawn(player); | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		return location; | ||||
| 	} | ||||
|   | ||||
| @@ -89,6 +89,7 @@ | ||||
| 												<xs:enumeration value="FIXED" /> | ||||
| 												<xs:enumeration value="RANDOM" /> | ||||
| 												<xs:enumeration value="ORIGIN" /> | ||||
| 												<xs:enumeration value="TOWN" /> | ||||
| 											</xs:restriction> | ||||
| 										</xs:simpleType> | ||||
| 									</xs:attribute> | ||||
|   | ||||
| @@ -24,5 +24,6 @@ public enum InstanceTeleportType | ||||
| 	NONE, | ||||
| 	FIXED, | ||||
| 	RANDOM, | ||||
| 	ORIGIN | ||||
| 	ORIGIN, | ||||
| 	TOWN | ||||
| } | ||||
| @@ -209,6 +209,10 @@ public class InstanceManager implements IXmlReader | ||||
| 								{ | ||||
| 									template.setExitLocation(type, null); | ||||
| 								} | ||||
| 								else if (type.equals(InstanceTeleportType.TOWN)) | ||||
| 								{ | ||||
| 									template.setExitLocation(type, null); | ||||
| 								} | ||||
| 								else | ||||
| 								{ | ||||
| 									final List<Location> locations = new ArrayList<>(); | ||||
|   | ||||
| @@ -325,28 +325,7 @@ public class MapRegionManager implements IXmlReader | ||||
| 			// Karma player land out of city | ||||
| 			if (player.getReputation() < 0) | ||||
| 			{ | ||||
| 				try | ||||
| 				{ | ||||
| 					final RespawnZone zone = ZoneManager.getInstance().getZone(player, RespawnZone.class); | ||||
| 					if (zone != null) | ||||
| 					{ | ||||
| 						return getRestartRegion(creature, zone.getRespawnPoint((PlayerInstance) creature)).getChaoticSpawnLoc(); | ||||
| 					} | ||||
| 					// Opposing race check. | ||||
| 					if (getMapRegion(creature).getBannedRace().containsKey(creature.getRace())) | ||||
| 					{ | ||||
| 						return REGIONS.get(getMapRegion(creature).getBannedRace().get(creature.getRace())).getChaoticSpawnLoc(); | ||||
| 					} | ||||
| 					return getMapRegion(creature).getChaoticSpawnLoc(); | ||||
| 				} | ||||
| 				catch (Exception e) | ||||
| 				{ | ||||
| 					if (player.isFlyingMounted()) | ||||
| 					{ | ||||
| 						return REGIONS.get("union_base_of_kserth").getChaoticSpawnLoc(); | ||||
| 					} | ||||
| 					return REGIONS.get(DEFAULT_RESPAWN).getChaoticSpawnLoc(); | ||||
| 				} | ||||
| 				return getNearestKarmaRespawn(player); | ||||
| 			} | ||||
| 			 | ||||
| 			// Checking if needed to be respawned in "far" town from the castle; | ||||
| @@ -382,6 +361,37 @@ public class MapRegionManager implements IXmlReader | ||||
| 		} | ||||
| 		 | ||||
| 		// Get the nearest town | ||||
| 		return getNearestTownRespawn(creature); | ||||
| 	} | ||||
| 	 | ||||
| 	public Location getNearestKarmaRespawn(PlayerInstance player) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			final RespawnZone zone = ZoneManager.getInstance().getZone(player, RespawnZone.class); | ||||
| 			if (zone != null) | ||||
| 			{ | ||||
| 				return getRestartRegion(player, zone.getRespawnPoint(player)).getChaoticSpawnLoc(); | ||||
| 			} | ||||
| 			// Opposing race check. | ||||
| 			if (getMapRegion(player).getBannedRace().containsKey(player.getRace())) | ||||
| 			{ | ||||
| 				return REGIONS.get(getMapRegion(player).getBannedRace().get(player.getRace())).getChaoticSpawnLoc(); | ||||
| 			} | ||||
| 			return getMapRegion(player).getChaoticSpawnLoc(); | ||||
| 		} | ||||
| 		catch (Exception e) | ||||
| 		{ | ||||
| 			if (player.isFlyingMounted()) | ||||
| 			{ | ||||
| 				return REGIONS.get("union_base_of_kserth").getChaoticSpawnLoc(); | ||||
| 			} | ||||
| 			return REGIONS.get(DEFAULT_RESPAWN).getChaoticSpawnLoc(); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public Location getNearestTownRespawn(Creature creature) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			final RespawnZone zone = ZoneManager.getInstance().getZone(creature, RespawnZone.class); | ||||
|   | ||||
| @@ -33,6 +33,7 @@ import org.l2jmobius.gameserver.enums.InstanceReenterType; | ||||
| import org.l2jmobius.gameserver.enums.InstanceRemoveBuffType; | ||||
| import org.l2jmobius.gameserver.enums.InstanceTeleportType; | ||||
| import org.l2jmobius.gameserver.instancemanager.InstanceManager; | ||||
| import org.l2jmobius.gameserver.instancemanager.MapRegionManager; | ||||
| import org.l2jmobius.gameserver.model.AbstractPlayerGroup; | ||||
| import org.l2jmobius.gameserver.model.Location; | ||||
| import org.l2jmobius.gameserver.model.PlayerCondOverride; | ||||
| @@ -367,7 +368,6 @@ public class InstanceTemplate extends ListenersContainer implements IIdentifiabl | ||||
| 	public Location getExitLocation(PlayerInstance player) | ||||
| 	{ | ||||
| 		Location location = null; | ||||
| 		 | ||||
| 		switch (_exitLocationType) | ||||
| 		{ | ||||
| 			case RANDOM: | ||||
| @@ -391,6 +391,18 @@ public class InstanceTemplate extends ListenersContainer implements IIdentifiabl | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 			case TOWN: | ||||
| 			{ | ||||
| 				if (player.getReputation() < 0) | ||||
| 				{ | ||||
| 					location = MapRegionManager.getInstance().getNearestKarmaRespawn(player); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					location = MapRegionManager.getInstance().getNearestTownRespawn(player); | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		return location; | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDevelopment
					MobiusDevelopment