ソースを参照

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 年 前
コミット
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!
 		}
 	}