Browse Source

BETA: Updating Party Matching system (Thanks to Tryskell and Gnacik)
Also cleaned Packet handler from packets that should not be there and added some missing ones.

Rumen Nikiforov 13 years ago
parent
commit
85772372da

+ 8 - 11
L2J_Server_BETA/java/com/l2jserver/gameserver/model/PartyMatchRoom.java

@@ -14,11 +14,9 @@
  */
 package com.l2jserver.gameserver.model;
 
+import java.util.ArrayList;
 import java.util.List;
 
-import javolution.util.FastList;
-
-import com.l2jserver.gameserver.instancemanager.MapRegionManager;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ExManagePartyRoomMember;
@@ -26,25 +24,24 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
 /**
  * @author Gnacik
- *
  */
 public class PartyMatchRoom
 {
-	private int _id;
+	private final int _id;
 	private String _title;
 	private int _loot;
 	private int _location;
 	private int _minlvl;
 	private int _maxlvl;
 	private int _maxmem;
-	private final List<L2PcInstance> _members = new FastList<L2PcInstance>();
+	private final List<L2PcInstance> _members = new ArrayList<>();
 	
 	public PartyMatchRoom(int id, String title, int loot, int minlvl, int maxlvl, int maxmem, L2PcInstance owner)
 	{
 		_id = id;
 		_title = title;
 		_loot = loot;
-		_location = MapRegionManager.getInstance().getMapRegion(owner).getBbs();
+		_location = 0; // TODO: Closes town
 		_minlvl = minlvl;
 		_maxlvl = maxlvl;
 		_maxmem = maxmem;
@@ -81,7 +78,7 @@ public class PartyMatchRoom
 	
 	public void notifyMembersAboutExit(L2PcInstance player)
 	{
-		for(L2PcInstance _member : getPartyMembers())
+		for (L2PcInstance _member : _members)
 		{
 			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_LEFT_PARTY_ROOM);
 			sm.addCharName(player);
@@ -97,11 +94,11 @@ public class PartyMatchRoom
 		// Remove new leader
 		_members.remove(newLeader);
 		// Move him to first position
-		_members.set(0,newLeader);
+		_members.set(0, newLeader);
 		// Add old leader as normal member
 		_members.add(oldLeader);
 		// Broadcast change
-		for(L2PcInstance member : getPartyMembers())
+		for (L2PcInstance member : _members)
 		{
 			member.sendPacket(new ExManagePartyRoomMember(newLeader, this, 1));
 			member.sendPacket(new ExManagePartyRoomMember(oldLeader, this, 1));
@@ -154,7 +151,7 @@ public class PartyMatchRoom
 		return _members.get(0);
 	}
 	
-	/* SET  */
+	/* SET */
 	
 	public void setMinLvl(int minlvl)
 	{

+ 21 - 19
L2J_Server_BETA/java/com/l2jserver/gameserver/network/L2GamePacketHandler.java

@@ -109,9 +109,6 @@ public final class L2GamePacketHandler implements IPacketHandler<L2GameClient>,
 							case 0x36:
 								msg = new RequestGotoLobby();
 								break;
-							case 0x5a:
-								msg = new RequestExCubeGameChangeTeam();
-								break;
 							case 0x93:
 								msg = new RequestEx2ndPasswordCheck();
 								break;
@@ -342,7 +339,7 @@ public final class L2GamePacketHandler implements IPacketHandler<L2GameClient>,
 								// SendL2ParamSetting
 								break;
 							default:
-								this.printDebugDoubleOpcode(opcode, id_2, buf, state, client);
+								printDebugDoubleOpcode(opcode, id_2, buf, state, client);
 								break;
 						}
 						break;
@@ -713,6 +710,23 @@ public final class L2GamePacketHandler implements IPacketHandler<L2GameClient>,
 							case 0x05:
 								msg = new RequestWriteHeroWords();
 								break;
+							case 0x5F:
+								/**
+								 * Server Packets:
+								 * 	ExMpccRoomInfo FE:9B
+									ExListMpccWaiting FE:9C
+									ExDissmissMpccRoom FE:9D
+									ExManageMpccRoomMember FE:9E
+									ExMpccRoomMember FE:9F
+								 */
+								//TODO: RequestJoinMpccRoom chdd
+								break;
+							case 0x5E:
+								// TODO: RequestManageMpccRoom chdddddS
+								break;
+							case 0x5D:
+								// TODO: RequestListMpccWaiting chddd
+								break;
 							case 0x06:
 								msg = new RequestExAskJoinMPCC();
 								break;
@@ -961,7 +975,7 @@ public final class L2GamePacketHandler implements IPacketHandler<L2GameClient>,
 										// RequestChangeBookMarkSlot
 										break;
 									default:
-										this.printDebugDoubleOpcode(opcode, id3, buf, state, client);
+										printDebugDoubleOpcode(opcode, id3, buf, state, client);
 										break;
 								}
 								break;
@@ -1121,25 +1135,13 @@ public final class L2GamePacketHandler implements IPacketHandler<L2GameClient>,
 							case 0x92:
 								// RequestUseGoodsInventoryItem 
 								break;
-							case 0x93:
-								// RequestEx2ndPasswordCheck 
-								break;
-							case 0x94:
-								// RequestEx2ndPasswordVerify  
-								break;
-							case 0x95:
-								// RequestEx2ndPasswordReq 
-								break;
 							default:
-								this.printDebugDoubleOpcode(opcode, id2, buf, state, client);
+								printDebugDoubleOpcode(opcode, id2, buf, state, client);
 								break;
 						}
 						break;
-						/*case 0xee:
-						msg = new RequestChangePartyLeader(data, _client);
-						break;*/
 					default:
-						this.printDebug(opcode, buf, state, client);
+						printDebug(opcode, buf, state, client);
 						break;
 				}
 				break;

+ 83 - 12
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/AnswerJoinPartyRoom.java

@@ -14,35 +14,106 @@
  */
 package com.l2jserver.gameserver.network.clientpackets;
 
+import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.PartyMatchRoom;
+import com.l2jserver.gameserver.model.PartyMatchRoomList;
+import com.l2jserver.gameserver.model.PartyMatchWaitingList;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.ExManagePartyRoomMember;
+import com.l2jserver.gameserver.network.serverpackets.ExPartyRoomMember;
+import com.l2jserver.gameserver.network.serverpackets.PartyMatchDetail;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+
 /**
  * Format: (ch) d
- * @author -Wooden-
+ * @author -Wooden-, Tryskell
  */
 public final class AnswerJoinPartyRoom extends L2GameClientPacket
 {
 	private static final String _C__D0_30_ANSWERJOINPARTYROOM = "[C] D0:30 AnswerJoinPartyRoom";
-	@SuppressWarnings("unused")
-	private int _requesterID; // not tested, just guessed
+	private int _answer; // 1 or 0
 	
 	@Override
 	protected void readImpl()
 	{
-		_requesterID = readD();
+		_answer = readD();
 	}
 	
-	/**
-	 * @see com.l2jserver.gameserver.network.clientpackets.L2GameClientPacket#runImpl()
-	 */
 	@Override
 	protected void runImpl()
 	{
-		// TODO
-		//_log.info("C5:AnswerJoinPartyRoom: d: "+_requesterID);
+		final L2PcInstance player = getActiveChar();
+		if (player == null)
+		{
+			return;
+		}
+		
+		L2PcInstance partner = player.getActiveRequester();
+		if (partner == null)
+		{
+			// Partner hasn't been found, cancel the invitation
+			player.sendPacket(SystemMessageId.TARGET_IS_NOT_FOUND_IN_THE_GAME);
+			player.setActiveRequester(null);
+			return;
+		}
+		else if (L2World.getInstance().getPlayer(partner.getObjectId()) == null)
+		{
+			// Partner hasn't been found, cancel the invitation
+			player.sendPacket(SystemMessageId.TARGET_IS_NOT_FOUND_IN_THE_GAME);
+			player.setActiveRequester(null);
+			return;
+		}
+		
+		// If answer is positive, join the requester's PartyRoom.
+		if ((_answer == 1) && !partner.isRequestExpired())
+		{
+			PartyMatchRoom room = PartyMatchRoomList.getInstance().getRoom(partner.getPartyRoom());
+			if (room == null)
+			{
+				return;
+			}
+			
+			if ((player.getLevel() >= room.getMinLvl()) && (player.getLevel() <= room.getMaxLvl()))
+			{
+				// Remove from waiting list
+				PartyMatchWaitingList.getInstance().removePlayer(player);
+				
+				player.setPartyRoom(partner.getPartyRoom());
+				
+				player.sendPacket(new PartyMatchDetail(player, room));
+				player.sendPacket(new ExPartyRoomMember(player, room, 0));
+				
+				for (L2PcInstance member : room.getPartyMembers())
+				{
+					if (member == null)
+					{
+						continue;
+					}
+					
+					member.sendPacket(new ExManagePartyRoomMember(player, room, 0));
+					member.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.C1_ENTERED_PARTY_ROOM).addPcName(player));
+				}
+				room.addMember(player);
+				
+				// Info Broadcast
+				player.broadcastUserInfo();
+			}
+			else
+			{
+				player.sendPacket(SystemMessageId.CANT_ENTER_PARTY_ROOM);
+			}
+		}
+		else
+		{
+			partner.sendPacket(SystemMessageId.PARTY_MATCHING_REQUEST_NO_RESPONSE);
+		}
+		
+		// reset transaction timers
+		player.setActiveRequester(null);
+		partner.onTransactionResponse();
 	}
 	
-	/**
-	 * @see com.l2jserver.gameserver.network.clientpackets.L2GameClientPacket#getType()
-	 */
 	@Override
 	public String getType()
 	{

+ 33 - 10
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestAskJoinPartyRoom.java

@@ -14,35 +14,58 @@
  */
 package com.l2jserver.gameserver.network.clientpackets;
 
+import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.ExAskJoinPartyRoom;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
 /**
  * Format: (ch) S
- * @author  -Wooden-
+ * @author -Wooden-, Tryskell
  */
 public class RequestAskJoinPartyRoom extends L2GameClientPacket
 {
-	private static final String _C__D0_2F_REQUESTASKJOINPARTYROOM = "[C] D0:2F RequestAskJoinPartyRoom";
-	private String _player; // not tested, just guessed
-	
+	private static String _name;
 	
 	@Override
 	protected void readImpl()
 	{
-		_player = readS();
+		_name = readS();
 	}
 	
 	@Override
 	protected void runImpl()
 	{
-		// TODO
-		_log.info("C5:RequestAskJoinPartyRoom: S: "+_player);
+		final L2PcInstance player = getActiveChar();
+		if (player == null)
+		{
+			return;
+		}
+		
+		// Send PartyRoom invite request (with activeChar) name to the target
+		final L2PcInstance target = L2World.getInstance().getPlayer(_name);
+		if (target != null)
+		{
+			if (!target.isProcessingRequest())
+			{
+				player.onTransactionRequest(target);
+				target.sendPacket(new ExAskJoinPartyRoom(player.getName()));
+			}
+			else
+			{
+				player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.C1_IS_BUSY_TRY_LATER).addPcName(target));
+			}
+		}
+		else
+		{
+			player.sendPacket(SystemMessageId.TARGET_IS_NOT_FOUND_IN_THE_GAME);
+		}
 	}
 	
-	
 	@Override
 	public String getType()
 	{
-		return _C__D0_2F_REQUESTASKJOINPARTYROOM;
+		return "[C] D0:14 RequestAskJoinPartyRoom";
 	}
-	
 }

+ 28 - 10
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestOustFromPartyRoom.java

@@ -17,9 +17,11 @@ package com.l2jserver.gameserver.network.clientpackets;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.PartyMatchRoom;
 import com.l2jserver.gameserver.model.PartyMatchRoomList;
+import com.l2jserver.gameserver.model.PartyMatchWaitingList;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ExClosePartyRoom;
+import com.l2jserver.gameserver.network.serverpackets.ListPartyWating;
 
 /**
  * format (ch) d
@@ -40,30 +42,46 @@ public final class RequestOustFromPartyRoom extends L2GameClientPacket
 	@Override
 	protected void runImpl()
 	{
-		L2PcInstance activeChar = getClient().getActiveChar();
-		if (activeChar == null)
+		L2PcInstance player = getActiveChar();
+		if (player == null)
+		{
 			return;
+		}
 		
 		L2PcInstance member = L2World.getInstance().getPlayer(_charid);
 		if (member == null)
+		{
 			return;
+		}
 		
-		PartyMatchRoom _room = PartyMatchRoomList.getInstance().getPlayerRoom(member);
-		if (_room == null)
-			return;
-		
-		if (_room.getOwner() != activeChar)
+		PartyMatchRoom room = PartyMatchRoomList.getInstance().getPlayerRoom(member);
+		if (room == null || room.getOwner() != player)
+		{
 			return;
+		}
 		
-		if (activeChar.isInParty() && member.isInParty() && activeChar.getParty().getLeaderObjectId() == member.getParty().getLeaderObjectId())
+		if (player.isInParty() && member.isInParty() && (player.getParty().getLeaderObjectId() == member.getParty().getLeaderObjectId()))
 		{
-			activeChar.sendPacket(SystemMessageId.CANNOT_DISMISS_PARTY_MEMBER);
+			player.sendPacket(SystemMessageId.CANNOT_DISMISS_PARTY_MEMBER);
 		}
 		else
 		{
-			_room.deleteMember(member);
+			// Remove member from party room
+			room.deleteMember(member);
 			member.setPartyRoom(0);
+			
+			// Close the PartyRoom window
 			member.sendPacket(new ExClosePartyRoom());
+			
+			// Add player back on waiting list
+			PartyMatchWaitingList.getInstance().addPlayer(member);
+			
+			// Send Room list
+			int loc = 0; // TODO: Closes town
+			member.sendPacket(new ListPartyWating(member, 0, loc, member.getLevel()));
+			
+			// Clean player's LFP title
+			member.broadcastUserInfo();
 			member.sendPacket(SystemMessageId.OUSTED_FROM_PARTY_ROOM);
 		}
 	}

+ 21 - 24
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/ExListPartyMatchingWaitingRoom.java

@@ -14,7 +14,8 @@
  */
 package com.l2jserver.gameserver.network.serverpackets;
 
-import javolution.util.FastList;
+import java.util.ArrayList;
+import java.util.List;
 
 import com.l2jserver.gameserver.model.PartyMatchWaitingList;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -24,14 +25,13 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  */
 public class ExListPartyMatchingWaitingRoom extends L2GameServerPacket
 {
-	@SuppressWarnings("unused")
 	private final L2PcInstance _activeChar;
 	@SuppressWarnings("unused")
-	private int _page;
-	private int _minlvl;
-	private int _maxlvl;
-	private int _mode;
-	private FastList<L2PcInstance> _members;
+	private final int _page;
+	private final int _minlvl;
+	private final int _maxlvl;
+	private final int _mode;
+	private final List<L2PcInstance> _members;
 	
 	public ExListPartyMatchingWaitingRoom(L2PcInstance player, int page, int minlvl, int maxlvl, int mode)
 	{
@@ -40,7 +40,7 @@ public class ExListPartyMatchingWaitingRoom extends L2GameServerPacket
 		_minlvl = minlvl;
 		_maxlvl = maxlvl;
 		_mode = mode;
-		_members = new FastList<L2PcInstance>();
+		_members = new ArrayList<>();
 	}
 	
 	@Override
@@ -55,37 +55,34 @@ public class ExListPartyMatchingWaitingRoom extends L2GameServerPacket
 			return;
 		}
 		
-		//if (_activeChar.isInPartyMatchRoom())
-		//	return;
-		
-		for(L2PcInstance cha : PartyMatchWaitingList.getInstance().getPlayers())
+		for (L2PcInstance cha : PartyMatchWaitingList.getInstance().getPlayers())
 		{
-			if(cha == null)
+			if ((cha == null) || (cha == _activeChar))
+			{
 				continue;
+			}
 			
-			if(!cha.isPartyWaiting())
+			if (!cha.isPartyWaiting())
 			{
 				PartyMatchWaitingList.getInstance().removePlayer(cha);
 				continue;
 			}
 			
-			if((cha.getLevel() < _minlvl) || (cha.getLevel() > _maxlvl))
+			else if ((cha.getLevel() < _minlvl) || (cha.getLevel() > _maxlvl))
+			{
 				continue;
+			}
 			
 			_members.add(cha);
 		}
 		
-		int _count = 0;
-		int _size = _members.size();
-		
 		writeD(1);
-		writeD(_size);
-		while(_size > _count)
+		writeD(_members.size());
+		for (L2PcInstance member : _members)
 		{
-			writeS(_members.get(_count).getName());
-			writeD(_members.get(_count).getActiveClass());
-			writeD(_members.get(_count).getLevel());
-			_count++;
+			writeS(member.getName());
+			writeD(member.getActiveClass());
+			writeD(member.getLevel());
 		}
 	}
 	

+ 14 - 9
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/ExManagePartyRoomMember.java

@@ -14,17 +14,16 @@
  */
 package com.l2jserver.gameserver.network.serverpackets;
 
-import com.l2jserver.gameserver.instancemanager.MapRegionManager;
 import com.l2jserver.gameserver.model.PartyMatchRoom;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 
 /**
- * @author Gnacik
- * 
- * Mode :
- * 		0 - add
- * 		1 - modify
- * 		2 - quit
+ * Mode: <ul>
+ * <li>0 - add </li>
+ * <li>1 - modify </li>
+ * <li>2 - quit</li>
+ * </ul>
+ * @author Gnacik 
  */
 public class ExManagePartyRoomMember extends L2GameServerPacket
 {
@@ -49,15 +48,21 @@ public class ExManagePartyRoomMember extends L2GameServerPacket
 		writeS(_activeChar.getName());
 		writeD(_activeChar.getActiveClass());
 		writeD(_activeChar.getLevel());
-		writeD(MapRegionManager.getInstance().getMapRegion(_activeChar).getBbs());
+		writeD(0); // TODO: Closes town
 		if (_room.getOwner().equals(_activeChar))
+		{
 			writeD(1);
+		}
 		else
 		{
-			if((_room.getOwner().isInParty() && _activeChar.isInParty()) && (_room.getOwner().getParty().getLeaderObjectId() == _activeChar.getParty().getLeaderObjectId()))
+			if ((_room.getOwner().isInParty() && _activeChar.isInParty()) && (_room.getOwner().getParty().getLeaderObjectId() == _activeChar.getParty().getLeaderObjectId()))
+			{
 				writeD(2);
+			}
 			else
+			{
 				writeD(0);
+			}
 		}
 	}
 	

+ 15 - 10
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/ExPartyRoomMember.java

@@ -14,7 +14,6 @@
  */
 package com.l2jserver.gameserver.network.serverpackets;
 
-import com.l2jserver.gameserver.instancemanager.MapRegionManager;
 import com.l2jserver.gameserver.model.PartyMatchRoom;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 
@@ -41,23 +40,29 @@ public class ExPartyRoomMember extends L2GameServerPacket
 		writeH(0x08);
 		writeD(_mode);
 		writeD(_room.getMembers());
-		for(L2PcInstance _member : _room.getPartyMembers())
+		for (L2PcInstance member : _room.getPartyMembers())
 		{
-			writeD(_member.getObjectId());
-			writeS(_member.getName());
-			writeD(_member.getActiveClass());
-			writeD(_member.getLevel());
-			writeD(MapRegionManager.getInstance().getMapRegion(_member).getBbs());
-			if (_room.getOwner().equals(_member))
+			writeD(member.getObjectId());
+			writeS(member.getName());
+			writeD(member.getActiveClass());
+			writeD(member.getLevel());
+			writeD(0); // TODO: Closes town
+			if (_room.getOwner().equals(member))
+			{
 				writeD(1);
+			}
 			else
 			{
-				if((_room.getOwner().isInParty() && _member.isInParty()) && (_room.getOwner().getParty().getLeaderObjectId() == _member.getParty().getLeaderObjectId()))
+				if ((_room.getOwner().isInParty() && member.isInParty()) && (_room.getOwner().getParty().getLeaderObjectId() == member.getParty().getLeaderObjectId()))
+				{
 					writeD(2);
+				}
 				else
+				{
 					writeD(0);
+				}
 			}
-			writeD(0x00);
+			writeD(0x00); // TODO: Instance datas there is more if that is not 0!
 		}
 	}