瀏覽代碼

Converted CZ_CHANGE_GROUPEXPOPTION to struct

Lemongrass3110 3 月之前
父節點
當前提交
c87aaf7afb
共有 3 個文件被更改,包括 45 次插入19 次删除
  1. 27 17
      src/map/clif.cpp
  2. 1 2
      src/map/clif_packetdb.hpp
  3. 17 0
      src/map/packets.hpp

+ 27 - 17
src/map/clif.cpp

@@ -13937,31 +13937,41 @@ void clif_parse_RemovePartyMember( int32 fd, map_session_data* sd ){
 /// 07d7 <exp share rule>.L <item pickup rule>.B <item share rule>.B (CZ_GROUPINFO_CHANGE_V2)
 void clif_parse_PartyChangeOption(int32 fd, map_session_data *sd)
 {
-	struct party_data *p;
-	int32 i,expflag;
-	int32 cmd = RFIFOW(fd,0);
-	struct s_packet_db* info = &packet_db[cmd];
+	if( sd == nullptr ){
+		return;
+	}
 
-	if( !sd->status.party_id )
+	if( sd->status.party_id == 0 ){
 		return;
+	}
+
+	party_data* party = party_search( sd->status.party_id );
 
-	p = party_search(sd->status.party_id);
-	if( p == nullptr )
+	if( party == nullptr ){
 		return;
-	ARR_FIND( 0, MAX_PARTY, i, p->data[i].sd == sd );
-	if( i == MAX_PARTY )
-		return; //Shouldn't happen
-	if( !p->party.member[i].leader )
+	}
+
+	if( !party_isleader( sd ) ){
 		return;
+	}
+
+	const PACKET_CZ_CHANGE_GROUPEXPOPTION* p = reinterpret_cast<PACKET_CZ_CHANGE_GROUPEXPOPTION*>( RFIFOP( fd, 0 ) );
+	int32 itemflag = 0;
 
-	expflag = RFIFOL(fd,info->pos[0]);
-	if(cmd == 0x0102){ //Client can't change the item-field
-		party_changeoption(sd, expflag, p->party.item);
+#if PACKETVER >= 20090603
+	if( p->item_pickup != 0 ){
+		itemflag |= 1;
 	}
-	else {
-		int32 itemflag = (RFIFOB(fd,info->pos[1])?1:0)|(RFIFOB(fd,info->pos[2])?2:0);
-		party_changeoption(sd, expflag, itemflag);
+
+	if( p->item_share != 0 ){
+		itemflag |= 2;
 	}
+#else
+	// Client can't change the item-field
+	itemflag = party->party.item;
+#endif
+
+	party_changeoption( sd, p->exp_share, itemflag );
 }
 
 

+ 1 - 2
src/map/clif_packetdb.hpp

@@ -107,7 +107,7 @@
 	parseable_packet( HEADER_CZ_JOIN_GROUP, sizeof( PACKET_CZ_JOIN_GROUP ), clif_parse_ReplyPartyInvite, 0 );
 	parseable_packet( HEADER_CZ_REQ_LEAVE_GROUP, sizeof( PACKET_CZ_REQ_LEAVE_GROUP ), clif_parse_LeaveParty, 0 );
 	packet(0x0101,6);
-	parseable_packet(0x0102,6,clif_parse_PartyChangeOption,2);
+	parseable_packet( HEADER_CZ_CHANGE_GROUPEXPOPTION, sizeof( PACKET_CZ_CHANGE_GROUPEXPOPTION ), clif_parse_PartyChangeOption, 0 );
 	parseable_packet( HEADER_CZ_REQ_EXPEL_GROUP_MEMBER, sizeof( PACKET_CZ_REQ_EXPEL_GROUP_MEMBER ), clif_parse_RemovePartyMember, 0 );
 	packet(0x0104,79);
 	parseable_packet(0x0108,-1,clif_parse_PartyMessage,2,4);
@@ -1264,7 +1264,6 @@
 
 // 2009-06-03aRagexeRE
 #if PACKETVER >= 20090603
-	parseable_packet(0x07d7,8,clif_parse_PartyChangeOption,2,6,7);
 	packet(0x07d8,8);
 	packet(0x07d9,254);
 	parseable_packet(0x07da,6,clif_parse_PartyChangeLeader,2);

+ 17 - 0
src/map/packets.hpp

@@ -1875,6 +1875,23 @@ struct PACKET_CZ_MAKE_GROUP2{
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(CZ_MAKE_GROUP2, 0x1e8);
 
+#if PACKETVER >= 20090603
+// CZ_GROUPINFO_CHANGE_V2
+struct PACKET_CZ_CHANGE_GROUPEXPOPTION{
+	int16 packetType;
+	int32 exp_share;
+	uint8 item_pickup;
+	uint8 item_share;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_CHANGE_GROUPEXPOPTION, 0x7d7);
+#else
+struct PACKET_CZ_CHANGE_GROUPEXPOPTION{
+	int16 packetType;
+	int32 exp_share;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_CHANGE_GROUPEXPOPTION, 0x102);
+#endif
+
 // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
 #if !defined( sun ) && ( !defined( __NETBSD__ ) || __NetBSD_Version__ >= 600000000 )
 	#pragma pack( pop )