Browse Source

Moving dimensional rift npc's to ai scripts

Charus 1 year ago
parent
commit
6a976bb1aa

+ 57 - 153
src/main/java/com/l2jserver/gameserver/instancemanager/DimensionalRiftManager.java

@@ -18,7 +18,6 @@
  */
 package com.l2jserver.gameserver.instancemanager;
 
-import static com.l2jserver.gameserver.config.Configuration.general;
 import static com.l2jserver.gameserver.config.Configuration.server;
 
 import java.io.File;
@@ -35,7 +34,6 @@ import org.w3c.dom.Document;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 
-import com.l2jserver.commons.database.ConnectionFactory;
 import com.l2jserver.commons.util.Rnd;
 import com.l2jserver.gameserver.datatables.SpawnTable;
 import com.l2jserver.gameserver.model.DimensionalRiftRoom;
@@ -43,9 +41,6 @@ import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.DimensionalRift;
-import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
-import com.l2jserver.gameserver.util.Util;
 
 /**
  * Dimensional Rift manager.
@@ -57,12 +52,6 @@ public final class DimensionalRiftManager {
 	
 	private final Map<Byte, Map<Byte, DimensionalRiftRoom>> _rooms = new HashMap<>(7);
 	
-	private static final int DIMENSIONAL_FRAGMENT_ITEM_ID = 7079;
-	
-	public static DimensionalRiftManager getInstance() {
-		return SingletonHolder._instance;
-	}
-	
 	protected DimensionalRiftManager() {
 		loadRooms();
 		loadSpawns();
@@ -73,34 +62,56 @@ public final class DimensionalRiftManager {
 	}
 	
 	private void loadRooms() {
-		try (var con = ConnectionFactory.getInstance().getConnection();
-			var s = con.createStatement();
-			var rs = s.executeQuery("SELECT * FROM dimensional_rift")) {
-			while (rs.next()) {
-				// 0 waiting room, 1 recruit, 2 soldier, 3 officer, 4 captain , 5 commander, 6 hero
-				byte type = rs.getByte("type");
-				byte room_id = rs.getByte("room_id");
-				
-				// coords related
-				int xMin = rs.getInt("xMin");
-				int xMax = rs.getInt("xMax");
-				int yMin = rs.getInt("yMin");
-				int yMax = rs.getInt("yMax");
-				int z1 = rs.getInt("zMin");
-				int z2 = rs.getInt("zMax");
-				int xT = rs.getInt("xT");
-				int yT = rs.getInt("yT");
-				int zT = rs.getInt("zT");
-				boolean isBossRoom = rs.getByte("boss") > 0;
-				
-				if (!_rooms.containsKey(type)) {
-					_rooms.put(type, new HashMap<>(9));
+		try {
+			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+			factory.setValidating(false);
+			factory.setIgnoringComments(true);
+			
+			File file = new File(server().getDatapackRoot(), "data/dimensionalRiftRooms.xml");
+			if (!file.exists()) {
+				LOG.warn("Could not find file {}!", file.getAbsoluteFile());
+				return;
+			}
+			
+			Document doc = factory.newDocumentBuilder().parse(file);
+			NamedNodeMap attrs;
+			
+			byte type, id;
+			int xMin, xMax, yMin, yMax, zMin, zMax, xT, yT, zT;
+			boolean boss;
+			
+			for (Node list = doc.getFirstChild(); list != null; list = list.getNextSibling()) {
+				if ("list".equalsIgnoreCase(list.getNodeName())) {
+					for (Node room = list.getFirstChild(); room != null; room = room.getNextSibling()) {
+						if ("room".equalsIgnoreCase(room.getNodeName())) {
+							attrs = room.getAttributes();
+							
+							type = Byte.parseByte(attrs.getNamedItem("type").getNodeValue());
+							id = Byte.parseByte(attrs.getNamedItem("id").getNodeValue());
+							
+							xMin = Integer.parseInt(attrs.getNamedItem("xMin").getNodeValue());
+							xMax = Integer.parseInt(attrs.getNamedItem("xMax").getNodeValue());
+							yMin = Integer.parseInt(attrs.getNamedItem("yMin").getNodeValue());
+							yMax = Integer.parseInt(attrs.getNamedItem("yMax").getNodeValue());
+							zMin = Integer.parseInt(attrs.getNamedItem("zMin").getNodeValue());
+							zMax = Integer.parseInt(attrs.getNamedItem("zMax").getNodeValue());
+							xT = Integer.parseInt(attrs.getNamedItem("xT").getNodeValue());
+							yT = Integer.parseInt(attrs.getNamedItem("yT").getNodeValue());
+							zT = Integer.parseInt(attrs.getNamedItem("zT").getNodeValue());
+							
+							boss = Boolean.parseBoolean(attrs.getNamedItem("boss").getNodeValue());
+							
+							if (!_rooms.containsKey(type)) {
+								_rooms.put(type, new HashMap<>(9));
+							}
+							
+							_rooms.get(type).put(id, new DimensionalRiftRoom(type, id, xMin, xMax, yMin, yMax, zMin, zMax, xT, yT, zT, boss));
+						}
+					}
 				}
-				
-				_rooms.get(type).put(room_id, new DimensionalRiftRoom(type, room_id, xMin, xMax, yMin, yMax, z1, z2, xT, yT, zT, isBossRoom));
 			}
 		} catch (Exception ex) {
-			LOG.warn("Can not load Dimension Rift zones!", ex);
+			LOG.warn("There was an error on loading Dimensional Rift rooms!", ex);
 		}
 		
 		int typeSize = _rooms.keySet().size();
@@ -120,7 +131,7 @@ public final class DimensionalRiftManager {
 			factory.setValidating(false);
 			factory.setIgnoringComments(true);
 			
-			File file = new File(server().getDatapackRoot(), "data/dimensionalRift.xml");
+			File file = new File(server().getDatapackRoot(), "data/dimensionalRiftSpawns.xml");
 			if (!file.exists()) {
 				LOG.warn("Could not find file {}!", file.getAbsoluteFile());
 				return;
@@ -225,100 +236,16 @@ public final class DimensionalRiftManager {
 	}
 	
 	public synchronized void start(L2PcInstance player, byte type, L2Npc npc) {
-		boolean canPass = true;
-		if (!player.isInParty()) {
-			showHtmlFile(player, "data/html/seven_signs/rift/NoParty.htm", npc);
-			return;
-		}
-		
-		if (player.getParty().getLeaderObjectId() != player.getObjectId()) {
-			showHtmlFile(player, "data/html/seven_signs/rift/NotPartyLeader.htm", npc);
-			return;
-		}
-		
-		if (player.getParty().isInDimensionalRift()) {
-			handleCheat(player, npc);
-			return;
-		}
-		
-		if (player.getParty().getMemberCount() < general().getRiftMinPartySize()) {
-			final NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
-			html.setFile(player.getHtmlPrefix(), "data/html/seven_signs/rift/SmallParty.htm");
-			html.replace("%npc_name%", npc.getName());
-			html.replace("%count%", Integer.toString(general().getRiftMinPartySize()));
-			player.sendPacket(html);
-			return;
-		}
-		
-		// max parties inside is rooms count - 1
-		if (!isAllowedEnter(type)) {
-			player.sendMessage("Rift is full. Try later.");
-			return;
-		}
-		
-		for (L2PcInstance p : player.getParty().getMembers()) {
-			if (!checkIfInPeaceZone(p.getX(), p.getY(), p.getZ())) {
-				canPass = false;
-				break;
-			}
-		}
-		
-		if (!canPass) {
-			showHtmlFile(player, "data/html/seven_signs/rift/NotInWaitingRoom.htm", npc);
-			return;
-		}
-		
-		L2ItemInstance i;
-		int count = getNeededItems(type);
-		for (L2PcInstance p : player.getParty().getMembers()) {
-			i = p.getInventory().getItemByItemId(DIMENSIONAL_FRAGMENT_ITEM_ID);
-			
-			if (i == null) {
-				canPass = false;
-				break;
-			}
-			
-			if (i.getCount() > 0) {
-				if (i.getCount() < getNeededItems(type)) {
-					canPass = false;
-					break;
-				}
-			} else {
-				canPass = false;
-				break;
-			}
-		}
-		
-		if (!canPass) {
-			final NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
-			html.setFile(player.getHtmlPrefix(), "data/html/seven_signs/rift/NoFragments.htm");
-			html.replace("%npc_name%", npc.getName());
-			html.replace("%count%", Integer.toString(count));
-			player.sendPacket(html);
-			return;
-		}
-		
-		for (L2PcInstance p : player.getParty().getMembers()) {
-			i = p.getInventory().getItemByItemId(DIMENSIONAL_FRAGMENT_ITEM_ID);
-			if (!p.destroyItem("RiftEntrance", i, count, null, false)) {
-				final NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
-				html.setFile(player.getHtmlPrefix(), "data/html/seven_signs/rift/NoFragments.htm");
-				html.replace("%npc_name%", npc.getName());
-				html.replace("%count%", Integer.toString(count));
-				player.sendPacket(html);
-				return;
-			}
-		}
-		
 		byte room;
 		List<Byte> emptyRooms;
 		do {
 			emptyRooms = getFreeRooms(type);
 			room = emptyRooms.get(Rnd.get(1, emptyRooms.size()) - 1);
 		}
+		
 		// find empty room
-		while (_rooms.get(type).get(room).isPartyInside());
-		new DimensionalRift(player.getParty(), type, room);
+		while (_rooms.get(type).get(room).getParty() != null);
+		new DimensionalRift(npc, player.getParty(), type, room);
 	}
 	
 	public void killRift(DimensionalRift d) {
@@ -343,37 +270,10 @@ public final class DimensionalRiftManager {
 		d.setSpawnTimer(null);
 	}
 	
-	private int getNeededItems(byte type) {
-		return switch (type) {
-			case 1 -> general().getRecruitCost();
-			case 2 -> general().getSoldierCost();
-			case 3 -> general().getOfficerCost();
-			case 4 -> general().getCaptainCost();
-			case 5 -> general().getCommanderCost();
-			case 6 -> general().getHeroCost();
-			default -> throw new IndexOutOfBoundsException();
-		};
-	}
-	
-	public void showHtmlFile(L2PcInstance player, String file, L2Npc npc) {
-		final NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
-		html.setFile(player.getHtmlPrefix(), file);
-		html.replace("%npc_name%", npc.getName());
-		player.sendPacket(html);
-	}
-	
-	public void handleCheat(L2PcInstance player, L2Npc npc) {
-		showHtmlFile(player, "data/html/seven_signs/rift/Cheater.htm", npc);
-		if (!player.isGM()) {
-			LOG.warn("Player {} was cheating in dimension rift area!", player);
-			Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " tried to cheat in dimensional rift.");
-		}
-	}
-	
 	public boolean isAllowedEnter(byte type) {
 		int count = 0;
 		for (DimensionalRiftRoom room : _rooms.get(type).values()) {
-			if (room.isPartyInside()) {
+			if (room.getParty() != null) {
 				count++;
 			}
 		}
@@ -383,13 +283,17 @@ public final class DimensionalRiftManager {
 	public List<Byte> getFreeRooms(byte type) {
 		List<Byte> list = new ArrayList<>();
 		for (DimensionalRiftRoom room : _rooms.get(type).values()) {
-			if (!room.isPartyInside()) {
+			if (room.getParty() == null) {
 				list.add(room.getRoom());
 			}
 		}
 		return list;
 	}
 	
+	public static DimensionalRiftManager getInstance() {
+		return SingletonHolder._instance;
+	}
+	
 	private static class SingletonHolder {
 		protected static final DimensionalRiftManager _instance = new DimensionalRiftManager();
 	}

+ 7 - 11
src/main/java/com/l2jserver/gameserver/model/DimensionalRiftRoom.java

@@ -42,7 +42,7 @@ public final class DimensionalRiftRoom {
 	private final Shape _s;
 	private final boolean _isBossRoom;
 	private final List<L2Spawn> _roomSpawns = new ArrayList<>();
-	private boolean _partyInside = false;
+	private L2Party _party = null;
 	
 	public DimensionalRiftRoom(byte type, byte room, int xMin, int xMax, int yMin, int yMax, int zMin, int zMax, int xT, int yT, int zT, boolean isBossRoom) {
 		_type = type;
@@ -118,18 +118,14 @@ public final class DimensionalRiftRoom {
 	}
 	
 	/**
-	 * Returns if party is inside the room.
-	 * @return {@code true} if there is a party inside, {@code false} otherwise
+	 * Sets the party inside.
+	 * @param party
 	 */
-	public boolean isPartyInside() {
-		return _partyInside;
+	public void setParty(L2Party party) {
+		_party = party;
 	}
 	
-	/**
-	 * Sets the party inside.
-	 * @param partyInside
-	 */
-	public void setPartyInside(boolean partyInside) {
-		_partyInside = partyInside;
+	public L2Party getParty() {
+		return _party;
 	}
 }

+ 0 - 8
src/main/java/com/l2jserver/gameserver/model/actor/L2Npc.java

@@ -911,14 +911,6 @@ public class L2Npc extends L2Character {
 				}
 				break;
 			default:
-				if ((npcId >= 31865) && (npcId <= 31918)) {
-					if (val == 0) {
-						filename += "rift/GuardianOfBorder.htm";
-					} else {
-						filename += "rift/GuardianOfBorder-" + val + ".htm";
-					}
-					break;
-				}
 				if (((npcId >= 31093) && (npcId <= 31094)) || ((npcId >= 31172) && (npcId <= 31201)) || ((npcId >= 31239) && (npcId <= 31254))) {
 					return;
 				}

+ 54 - 79
src/main/java/com/l2jserver/gameserver/model/entity/DimensionalRift.java

@@ -37,7 +37,9 @@ import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
+import com.l2jserver.gameserver.model.quest.State;
 import com.l2jserver.gameserver.network.serverpackets.Earthquake;
+import com.l2jserver.gameserver.util.Util;
 
 /**
  * Thanks to L2Fortress and balancer.ru - kombat
@@ -47,8 +49,9 @@ public class DimensionalRift {
 	protected L2Party _party;
 	protected List<Byte> _completedRooms = new ArrayList<>();
 	private static final long seconds_5 = 5000L;
-	// private static final int MILLISECONDS_IN_MINUTE = 60000;
+	
 	protected byte jumps_current = 0;
+	private final int MAX_DISTANCE = 1500;
 	
 	private Timer teleporterTimer;
 	private TimerTask teleporterTimerTask;
@@ -58,31 +61,39 @@ public class DimensionalRift {
 	private Future<?> earthQuakeTask;
 	
 	protected byte _chosenRoom;
-	private boolean _hasJumped = false;
+	protected List<L2PcInstance> _playerInside = new CopyOnWriteArrayList<>();
 	protected List<L2PcInstance> _deadPlayers = new CopyOnWriteArrayList<>();
 	protected List<L2PcInstance> _revivedInWaitingRoom = new CopyOnWriteArrayList<>();
 	private boolean isBossRoom = false;
 	
-	public DimensionalRift(L2Party party, byte type, byte room) {
-		DimensionalRiftManager.getInstance().getRoom(type, room).setPartyInside(true);
+	private final int Q00635_IntoTheDimensionalRift = 635;
+	
+	public DimensionalRift(L2Npc npc, L2Party party, byte type, byte room) {
+		DimensionalRiftManager.getInstance().getRoom(type, room).setParty(party);
+		
 		_type = type;
 		_party = party;
 		_chosenRoom = room;
-		Location coords = getRoomCoord(room);
 		party.setDimensionalRift(this);
-		for (L2PcInstance p : party.getMembers()) {
-			final Quest riftQuest = QuestManager.getInstance().getQuest(635);
-			if (riftQuest != null) {
-				QuestState qs = p.getQuestState(riftQuest.getName());
+		for (L2PcInstance pc : party.getMembers()) {
+			final Quest q635 = QuestManager.getInstance().getQuest(Q00635_IntoTheDimensionalRift);
+			if (q635 != null) {
+				QuestState qs = pc.getQuestState(q635.getName());
 				if (qs == null) {
-					qs = riftQuest.newQuestState(p);
+					qs = q635.newQuestState(pc);
 				}
 				if (!qs.isStarted()) {
-					qs.startQuest();
+					qs.setState(State.STARTED, true);
 				}
 			}
-			p.teleToLocation(coords);
+			
+			final double distance = Util.calculateDistance(npc, pc, true, false);
+			if (distance <= MAX_DISTANCE) {
+				teleportToRoom(pc, room);
+				_playerInside.add(pc);
+			}
 		}
+		
 		createSpawnTimer(_chosenRoom);
 		createTeleporterTimer(true);
 	}
@@ -120,7 +131,7 @@ public class DimensionalRift {
 			@Override
 			public void run() {
 				if (_chosenRoom > -1) {
-					DimensionalRiftManager.getInstance().getRoom(_type, _chosenRoom).unspawn().setPartyInside(false);
+					DimensionalRiftManager.getInstance().getRoom(_type, _chosenRoom).unspawn().setParty(null);
 				}
 				
 				if (reasonTP && (jumps_current < getMaxJumps()) && (_party.getMemberCount() > _deadPlayers.size())) {
@@ -130,18 +141,20 @@ public class DimensionalRift {
 					_chosenRoom = -1;
 					
 					for (L2PcInstance p : _party.getMembers()) {
-						if (!_revivedInWaitingRoom.contains(p)) {
+						if (!_revivedInWaitingRoom.contains(p) && _playerInside.contains(p)) {
 							teleportToNextRoom(p);
 						}
 					}
+					
 					createTeleporterTimer(true);
 					createSpawnTimer(_chosenRoom);
 				} else {
 					for (L2PcInstance p : _party.getMembers()) {
-						if (!_revivedInWaitingRoom.contains(p)) {
+						if (!_revivedInWaitingRoom.contains(p) && _playerInside.contains(p)) {
 							teleportToWaitingRoom(p);
 						}
 					}
+					
 					killRift();
 					cancel();
 				}
@@ -154,7 +167,7 @@ public class DimensionalRift {
 			
 			earthQuakeTask = ThreadPoolManager.getInstance().scheduleGeneral(() -> {
 				for (L2PcInstance p : _party.getMembers()) {
-					if (!_revivedInWaitingRoom.contains(p)) {
+					if (!_revivedInWaitingRoom.contains(p) && _playerInside.contains(p)) {
 						p.sendPacket(new Earthquake(p.getX(), p.getY(), p.getZ(), 65, 9));
 					}
 				}
@@ -192,60 +205,43 @@ public class DimensionalRift {
 	
 	public void partyMemberExited(L2PcInstance player) {
 		_deadPlayers.remove(player);
-		
 		_revivedInWaitingRoom.remove(player);
 		
-		if ((_party.getMemberCount() < general().getRiftMinPartySize()) || (_party.getMemberCount() == 1)) {
-			for (L2PcInstance p : _party.getMembers()) {
-				teleportToWaitingRoom(p);
-			}
-			killRift();
-		}
+		killRift();
 	}
 	
-	public void manualTeleport(L2PcInstance player, L2Npc npc) {
+	public void manualTeleport(L2PcInstance player) {
 		if (!player.isInParty() || !player.getParty().isInDimensionalRift()) {
 			return;
 		}
 		
-		if (player.getObjectId() != player.getParty().getLeaderObjectId()) {
-			DimensionalRiftManager.getInstance().showHtmlFile(player, "data/html/seven_signs/rift/NotPartyLeader.htm", npc);
-			return;
-		}
-		
-		if (_hasJumped) {
-			DimensionalRiftManager.getInstance().showHtmlFile(player, "data/html/seven_signs/rift/AlreadyTeleported.htm", npc);
-			return;
-		}
-		
-		_hasJumped = true;
-		DimensionalRiftManager.getInstance().getRoom(_type, _chosenRoom).unspawn().setPartyInside(false);
+		DimensionalRiftManager.getInstance().getRoom(_type, _chosenRoom).unspawn().setParty(null);
 		_completedRooms.add(_chosenRoom);
 		_chosenRoom = -1;
 		
 		for (L2PcInstance p : _party.getMembers()) {
-			teleportToNextRoom(p);
+			if (_playerInside.contains(p)) {
+				teleportToNextRoom(p);
+			}
 		}
 		
-		DimensionalRiftManager.getInstance().getRoom(_type, _chosenRoom).setPartyInside(true);
+		DimensionalRiftManager.getInstance().getRoom(_type, _chosenRoom).setParty(player.getParty());
 		
 		createSpawnTimer(_chosenRoom);
 		createTeleporterTimer(true);
 	}
 	
-	public void manualExitRift(L2PcInstance player, L2Npc npc) {
+	public void manualExitRift(L2PcInstance player) {
 		if (!player.isInParty() || !player.getParty().isInDimensionalRift()) {
 			return;
 		}
 		
-		if (player.getObjectId() != player.getParty().getLeaderObjectId()) {
-			DimensionalRiftManager.getInstance().showHtmlFile(player, "data/html/seven_signs/rift/NotPartyLeader.htm", npc);
-			return;
-		}
-		
 		for (L2PcInstance p : player.getParty().getMembers()) {
-			teleportToWaitingRoom(p);
+			if (_playerInside.contains(p)) {
+				teleportToWaitingRoom(p);
+			}
 		}
+		
 		killRift();
 	}
 	
@@ -262,23 +258,17 @@ public class DimensionalRift {
 				}
 				_chosenRoom = emptyRooms.get(Rnd.get(1, emptyRooms.size()) - 1);
 			}
-			while (DimensionalRiftManager.getInstance().getRoom(_type, _chosenRoom).isPartyInside());
+			while (DimensionalRiftManager.getInstance().getRoom(_type, _chosenRoom).getParty() != null);
 		}
 		
-		DimensionalRiftManager.getInstance().getRoom(_type, _chosenRoom).setPartyInside(true);
+		DimensionalRiftManager.getInstance().getRoom(_type, _chosenRoom).setParty(player.getParty());
 		checkBossRoom(_chosenRoom);
-		player.teleToLocation(getRoomCoord(_chosenRoom));
+		
+		teleportToRoom(player, _chosenRoom);
 	}
 	
 	protected void teleportToWaitingRoom(L2PcInstance player) {
 		DimensionalRiftManager.getInstance().teleportToWaitingRoom(player);
-		final Quest riftQuest = QuestManager.getInstance().getQuest(635);
-		if (riftQuest != null) {
-			final QuestState qs = player.getQuestState(riftQuest.getName());
-			if ((qs != null) && qs.isCond(1)) {
-				qs.exitQuest(true, true);
-			}
-		}
 	}
 	
 	public void killRift() {
@@ -289,6 +279,7 @@ public class DimensionalRift {
 		}
 		
 		_party = null;
+		_playerInside = null;
 		_revivedInWaitingRoom = null;
 		_deadPlayers = null;
 		
@@ -297,7 +288,7 @@ public class DimensionalRift {
 			earthQuakeTask = null;
 		}
 		
-		DimensionalRiftManager.getInstance().getRoom(_type, _chosenRoom).unspawn().setPartyInside(false);
+		DimensionalRiftManager.getInstance().getRoom(_type, _chosenRoom).unspawn().setParty(null);
 		DimensionalRiftManager.getInstance().killRift(this);
 	}
 	
@@ -338,6 +329,7 @@ public class DimensionalRift {
 		if (isBossRoom) {
 			return (long) (time * general().getBossRoomTimeMultiply());
 		}
+		
 		return time;
 	}
 	
@@ -351,29 +343,6 @@ public class DimensionalRift {
 		_deadPlayers.remove(player);
 	}
 	
-	public void usedTeleport(L2PcInstance player) {
-		if (!_revivedInWaitingRoom.contains(player)) {
-			_revivedInWaitingRoom.add(player);
-		}
-		
-		if (!_deadPlayers.contains(player)) {
-			_deadPlayers.add(player);
-		}
-		
-		if ((_party.getMemberCount() - _revivedInWaitingRoom.size()) < general().getRiftMinPartySize()) {
-			// int pcm = _party.getMemberCount();
-			// int rev = revivedInWaitingRoom.size();
-			// int min = Config.RIFT_MIN_PARTY_SIZE;
-			
-			for (L2PcInstance p : _party.getMembers()) {
-				if ((p != null) && !_revivedInWaitingRoom.contains(p)) {
-					teleportToWaitingRoom(p);
-				}
-			}
-			killRift();
-		}
-	}
-	
 	public List<L2PcInstance> getDeadMemberList() {
 		return _deadPlayers;
 	}
@@ -394,6 +363,12 @@ public class DimensionalRift {
 		if ((general().getMaxRiftJumps() <= 8) && (general().getMaxRiftJumps() >= 1)) {
 			return general().getMaxRiftJumps();
 		}
+		
 		return 4;
 	}
+	
+	private void teleportToRoom(L2PcInstance player, byte room) {
+		Location coords = getRoomCoord(room);
+		player.teleToLocation(coords.getX() + Rnd.get(-150, 150), coords.getY() + Rnd.get(-150, 150), coords.getZ());
+	}
 }

+ 13 - 17
src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestWithDrawalParty.java

@@ -48,24 +48,20 @@ public final class RequestWithDrawalParty extends L2GameClientPacket {
 		L2Party party = player.getParty();
 		
 		if (party != null) {
-			if (party.isInDimensionalRift() && !party.getDimensionalRift().getRevivedAtWaitingRoom().contains(player)) {
-				player.sendMessage("You can't exit party when you are in Dimensional Rift.");
-			} else {
-				party.removePartyMember(player, messageType.Left);
-				
-				if (player.isInPartyMatchRoom()) {
-					PartyMatchRoom _room = PartyMatchRoomList.getInstance().getPlayerRoom(player);
-					if (_room != null) {
-						player.sendPacket(new PartyMatchDetail(player, _room));
-						player.sendPacket(new ExPartyRoomMember(player, _room, 0));
-						player.sendPacket(new ExClosePartyRoom());
-						
-						_room.deleteMember(player);
-					}
-					player.setPartyRoom(0);
-					// player.setPartyMatching(0);
-					player.broadcastUserInfo();
+			party.removePartyMember(player, messageType.Left);
+			
+			if (player.isInPartyMatchRoom()) {
+				PartyMatchRoom _room = PartyMatchRoomList.getInstance().getPlayerRoom(player);
+				if (_room != null) {
+					player.sendPacket(new PartyMatchDetail(player, _room));
+					player.sendPacket(new ExPartyRoomMember(player, _room, 0));
+					player.sendPacket(new ExClosePartyRoom());
+					
+					_room.deleteMember(player);
 				}
+				
+				player.setPartyRoom(0);
+				player.broadcastUserInfo();
 			}
 		}
 	}