Browse Source

Converted all ranking packets to struct (#8805)

Lemongrass3110 6 months ago
parent
commit
7f4906d312
5 changed files with 393 additions and 193 deletions
  1. 266 120
      src/map/clif.cpp
  2. 1 2
      src/map/clif.hpp
  3. 13 28
      src/map/clif_packetdb.hpp
  4. 113 0
      src/map/packets.hpp
  5. 0 43
      src/map/packets_struct.hpp

+ 266 - 120
src/map/clif.cpp

@@ -19819,180 +19819,326 @@ void clif_parse_client_version(int fd, map_session_data *sd) {
 
 
 /// Ranking list
 /// Ranking list
 
 
-/// ranking pointlist  { <name>.24B <point>.L }*10
-void clif_sub_ranklist(unsigned char *buf,int idx,map_session_data* sd, enum e_rank rankingtype){
+/// ranking pointlist  { <name>.24B }*10 { <point>.L }*10
+void clif_sub_ranklist( RANKLIST& ranklist, e_rank rankingtype ){
 	struct fame_list* list;
 	struct fame_list* list;
-	int i, size = MAX_FAME_LIST;
-
-	switch(rankingtype) {
-		case RANK_BLACKSMITH:	list = smith_fame_list; break;
-		case RANK_ALCHEMIST:	list = chemist_fame_list; break;
-		case RANK_TAEKWON:		list = taekwon_fame_list; break;
-		// PK currently unsupported
-		case RANK_KILLER:		list = nullptr; size = 0; break;
+	size_t i;
+	size_t size = std::min<size_t>( ARRAYLENGTH( ranklist.names ), MAX_FAME_LIST );
+
+	switch( rankingtype ){
+		case RANK_BLACKSMITH:
+			list = smith_fame_list;
+			break;
+		case RANK_ALCHEMIST:
+			list = chemist_fame_list;
+			break;
+		case RANK_TAEKWON:
+			list = taekwon_fame_list;
+			break;
+		case RANK_KILLER:
+			// Currently not supported
+			list = nullptr;
+			size = 0;
+			break;
 		default:
 		default:
 			ShowError( "clif_sub_ranklist: Unsupported ranking type '%d'. Please report this.\n", rankingtype );
 			ShowError( "clif_sub_ranklist: Unsupported ranking type '%d'. Please report this.\n", rankingtype );
 			return;
 			return;
 	}
 	}
 
 
-	//Packet size limits this list to 10 elements. [Skotlex]
-	for (i = 0; i < min(10,size); i++) {
-		if (list[i].id > 0) {
-			const char* name;
-			if (strcmp(list[i].name, "-") == 0 &&
-				(name = map_charid2nick(list[i].id)) != nullptr)
-			{
-				safestrncpy(WBUFCP(buf,idx + NAME_LENGTH * i), name, NAME_LENGTH);
-			} else {
-				safestrncpy(WBUFCP(buf,idx + NAME_LENGTH * i), list[i].name, NAME_LENGTH);
-			}
-		} else {
-			safestrncpy(WBUFCP(buf, idx + NAME_LENGTH * i), "None", NAME_LENGTH);
+	for( i = 0; i < size; i++ ){
+		ranklist.points[i] = list[i].fame;
+
+		if( list[i].id == 0 ){
+			safestrncpy( ranklist.names[i], "None", sizeof( ranklist.names[0] ) );
+			continue;
+		}
+
+		if( strcmp( list[i].name, "-" ) != 0 ){
+			safestrncpy( ranklist.names[i], list[i].name, sizeof( ranklist.names[0] ) );
+			continue;
+		}
+
+		const char* name = map_charid2nick( list[i].id );
+
+		if( name != nullptr ){
+			safestrncpy( ranklist.names[i], name, sizeof( ranklist.names[0] ) );
+		}else{
+			safestrncpy( ranklist.names[i], list[i].name, sizeof( ranklist.names[0] ) );
 		}
 		}
-		WBUFL(buf, idx+NAME_LENGTH*10 + i * 4) = list[i].fame; //points
 	}
 	}
 
 
-	for(;i < 10; i++) { //In case the MAX is less than 10.
-		safestrncpy(WBUFCP(buf, idx + NAME_LENGTH * i), "Unavailable", NAME_LENGTH);
-		WBUFL(buf, idx+NAME_LENGTH*10 + i * 4) = 0;
+	size = ARRAYLENGTH( ranklist.names );
+
+	for( ; i < size; i++ ){
+		safestrncpy( ranklist.names[i], "Unavailable", sizeof( ranklist.names[0] ) );
+		ranklist.points[i] = 0;
+	}
+}
+
+/// 0219 { <name>.24B }*10 { <point>.L }*10 (ZC_BLACKSMITH_RANK)
+/// 021a { <name>.24B }*10 { <point>.L }*10 (ZC_ALCHEMIST_RANK)
+/// 0226 { <name>.24B }*10 { <point>.L }*10 (ZC_TAEKWON_RANK)
+/// 0238 { <name>.24B }*10 { <point>.L }*10 (ZC_KILLER_RANK)
+/// 097d <RankingType>.W { <name>.24B }*10 { <point>.L }*10 <mypoint>L (ZC_ACK_RANKING)
+/// 0af6 <RankingType>.W { <CID>.L }*10 { <point>.L }*10 <mypoint>L (ZC_ACK_RANKING2)
+void clif_ranklist( map_session_data& sd, e_rank rankingtype ){
+#if PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190703 || PACKETVER_ZERO_NUM >= 20190724
+	PACKET_ZC_ACK_RANKING2 p = {};
+
+	p.packetType = HEADER_ZC_ACK_RANKING2;
+	p.type = rankingtype;
+
+	struct fame_list* list;
+	size_t i;
+	size_t size = std::min<size_t>( ARRAYLENGTH( p.CIDs ), MAX_FAME_LIST );
+
+	switch( rankingtype ){
+		case RANK_BLACKSMITH:
+			list = smith_fame_list;
+			break;
+		case RANK_ALCHEMIST:
+			list = chemist_fame_list;
+			break;
+		case RANK_TAEKWON:
+			list = taekwon_fame_list;
+			break;
+		case RANK_KILLER:
+			// Currently not supported
+			list = nullptr;
+			size = 0;
+			break;
+		default:
+			ShowError( "clif_sub_ranklist: Unsupported ranking type '%d'. Please report this.\n", rankingtype );
+			return;
+	}
+
+	for( i = 0; i < size; i++ ){
+		p.CIDs[i] = list[i].id;
+		p.points[i] = list[i].fame;
+	}
+
+	size = ARRAYLENGTH( p.CIDs );
+
+	for( ; i < size; i++ ){
+		p.CIDs[i] = 0;
+		p.points[i] = 0;
+	}
+
+	switch( sd.class_&MAPID_UPPERMASK ){
+		case MAPID_BLACKSMITH:
+		case MAPID_ALCHEMIST:
+		case MAPID_TAEKWON:
+			p.mypoints = sd.status.fame;
+			break;
+		default:
+			p.mypoints = 0;
+			break;			
+	}
+
+	clif_send( &p, sizeof( p ), &sd.bl, SELF );
+#elif PACKETVER_MAIN_NUM >= 20130605 || PACKETVER_RE_NUM >= 20130529 || defined(PACKETVER_ZERO)
+	PACKET_ZC_ACK_RANKING p = {};
+
+	p.packetType = HEADER_ZC_ACK_RANKING;
+	p.type = rankingtype;
+	clif_sub_ranklist( p.list, rankingtype );
+
+	switch( sd.class_&MAPID_UPPERMASK ){
+		case MAPID_BLACKSMITH:
+		case MAPID_ALCHEMIST:
+		case MAPID_TAEKWON:
+			p.mypoints = sd.status.fame;
+			break;
+		default:
+			p.mypoints = 0;
+			break;			
+	}
+
+	clif_send( &p, sizeof( p ), &sd.bl, SELF );
+#else
+	switch( rankingtype ){
+		case RANK_BLACKSMITH: {
+#if PACKETVER >= 20041108
+			PACKET_ZC_BLACKSMITH_RANK p = {};
+
+			p.packetType = HEADER_ZC_BLACKSMITH_RANK;
+			clif_sub_ranklist( p.list, RANK_BLACKSMITH );
+
+			clif_send( &p, sizeof( p ), &sd.bl, SELF );
+#endif
+			} break;
+		case RANK_ALCHEMIST: {
+#if PACKETVER >= 20041108
+			PACKET_ZC_ALCHEMIST_RANK p = {};
+
+			p.packetType = HEADER_ZC_ALCHEMIST_RANK;
+			clif_sub_ranklist( p.list, RANK_ALCHEMIST );
+
+			clif_send( &p, sizeof( p ), &sd.bl, SELF );
+#endif
+			} break;
+		case RANK_TAEKWON: {
+#if PACKETVER >= 20050328
+			PACKET_ZC_TAEKWON_RANK p = {};
+
+			p.packetType = HEADER_ZC_TAEKWON_RANK;
+			clif_sub_ranklist( p.list, RANK_TAEKWON );
+
+			clif_send( &p, sizeof( p ), &sd.bl, SELF );
+#endif
+			} break;
+		case RANK_KILLER: {
+#if PACKETVER >= 20050328
+			PACKET_ZC_KILLER_RANK p = {};
+
+			p.packetType = HEADER_ZC_KILLER_RANK;
+			clif_sub_ranklist( p.list, RANK_KILLER );
+
+			clif_send( &p, sizeof( p ), &sd.bl, SELF );
+#endif
+			} break;
+		default:
+			ShowError( "clif_ranklist: Unsupported ranking type '%d'. Please report this.\n", rankingtype );
+			return;
 	}
 	}
+#endif
 }
 }
 
 
 /// Request for the blacksmith ranklist.
 /// Request for the blacksmith ranklist.
 /// /blacksmith command sends this packet to the server.
 /// /blacksmith command sends this packet to the server.
 /// 0217 (CZ_BLACKSMITH_RANK)
 /// 0217 (CZ_BLACKSMITH_RANK)
-void clif_parse_Blacksmith( int fd, map_session_data *sd ){
-	clif_ranklist(sd,RANK_BLACKSMITH);
+void clif_parse_ranklist_blacksmith( int fd, map_session_data* sd ){
+#if PACKETVER >= 20041108
+	const PACKET_CZ_BLACKSMITH_RANK* p = reinterpret_cast<PACKET_CZ_BLACKSMITH_RANK*>( RFIFOP( fd, 0 ) );
+
+	clif_ranklist( *sd, RANK_BLACKSMITH );
+#endif
 }
 }
 
 
 /// Request for the alchemist ranklist.
 /// Request for the alchemist ranklist.
 /// /alchemist command sends this packet to the server.
 /// /alchemist command sends this packet to the server.
 /// 0218 (CZ_ALCHEMIST_RANK)
 /// 0218 (CZ_ALCHEMIST_RANK)
-void clif_parse_Alchemist( int fd, map_session_data *sd ){
-	clif_ranklist(sd,RANK_ALCHEMIST);
+void clif_parse_ranklist_alchemist( int fd, map_session_data* sd ){
+#if PACKETVER >= 20041108
+	const PACKET_CZ_ALCHEMIST_RANK* p = reinterpret_cast<PACKET_CZ_ALCHEMIST_RANK*>( RFIFOP( fd, 0 ) );
+
+	clif_ranklist( *sd, RANK_ALCHEMIST );
+#endif
 }
 }
 
 
 /// Request for the taekwon ranklist.
 /// Request for the taekwon ranklist.
 /// /taekwon command sends this packet to the server.
 /// /taekwon command sends this packet to the server.
 /// 0225 (CZ_TAEKWON_RANK)
 /// 0225 (CZ_TAEKWON_RANK)
-void clif_parse_Taekwon( int fd, map_session_data *sd ){
-	clif_ranklist(sd,RANK_TAEKWON);
+void clif_parse_ranklist_taekwon( int fd, map_session_data* sd ){
+#if PACKETVER >= 20050328
+	const PACKET_CZ_TAEKWON_RANK* p = reinterpret_cast<PACKET_CZ_TAEKWON_RANK*>( RFIFOP( fd, 0 ) );
+
+	clif_ranklist( *sd, RANK_TAEKWON );
+#endif
 }
 }
 
 
 /// Request for the killer ranklist.
 /// Request for the killer ranklist.
 /// /pk command sends this packet to the server.
 /// /pk command sends this packet to the server.
 /// 0237 (CZ_KILLER_RANK)
 /// 0237 (CZ_KILLER_RANK)
-void clif_parse_RankingPk( int fd, map_session_data *sd ){
-	clif_ranklist(sd,RANK_KILLER);
-}
-
-/// 0219 { <name>.24B }*10 { <point>.L }*10 (ZC_BLACKSMITH_RANK)
-/// 021a { <name>.24B }*10 { <point>.L }*10 (ZC_ALCHEMIST_RANK)
-/// 0226 { <name>.24B }*10 { <point>.L }*10 (ZC_TAEKWON_RANK)
-/// 0238 { <name>.24B }*10 { <point>.L }*10 (ZC_KILLER_RANK)
-/// 097d <RankingType>.W {<CharName>.24B <point>L}*10 <mypoint>L (ZC_ACK_RANKING)
-void clif_ranklist(map_session_data *sd, int16 rankingType) {
-	enum e_rank rank;
-
-#if PACKETVER < 20130710
-	unsigned char buf[MAX_FAME_LIST * sizeof(struct fame_list)+2];
-	short cmd;
-
-	switch( rankingType ){
-		case RANK_BLACKSMITH:	cmd = 0x219; break;
-		case RANK_ALCHEMIST:	cmd = 0x21a; break;
-		case RANK_TAEKWON:		cmd = 0x226; break;
-		case RANK_KILLER:		cmd = 0x238; break;
-		default:
-			ShowError( "clif_ranklist: Unsupported ranking type '%d'. Please report this.\n", rankingType );
-			return;
-	}
-
-	// Can be safely casted here, since we validated it before
-	rank = (enum e_rank)rankingType;
-
-	WBUFW(buf,0) = cmd;
-	clif_sub_ranklist(buf,2,sd,rank);
+void clif_parse_ranklist_killer( int fd, map_session_data* sd ){
+#if PACKETVER >= 20050530
+	const PACKET_CZ_KILLER_RANK* p = reinterpret_cast<PACKET_CZ_KILLER_RANK*>( RFIFOP( fd, 0 ) );
 
 
-	clif_send(buf, packet_len(cmd), &sd->bl, SELF);
-#else
-	unsigned char buf[MAX_FAME_LIST * sizeof(struct fame_list)+8];
-	int mypoint = 0;
+	clif_ranklist( *sd, RANK_KILLER );
+#endif
+}
 
 
-	switch( rankingType ){
+///
+/// 097c <type>.W (CZ_REQ_RANKING)
+/// type
+///		0: /blacksmith
+///		1: /alchemist
+///		2: /taekwon
+///		3: /pk
+void clif_parse_ranklist( int fd, map_session_data* sd ){
+#if PACKETVER_MAIN_NUM >= 20120503 || PACKETVER_RE_NUM >= 20120502
+	const PACKET_CZ_REQ_RANKING* p = reinterpret_cast<PACKET_CZ_REQ_RANKING*>( RFIFOP( fd, 0 ) );
+
+	switch( p->type ){
 		case RANK_BLACKSMITH:
 		case RANK_BLACKSMITH:
 		case RANK_ALCHEMIST:
 		case RANK_ALCHEMIST:
 		case RANK_TAEKWON:
 		case RANK_TAEKWON:
 		case RANK_KILLER:
 		case RANK_KILLER:
 			break;
 			break;
 		default:
 		default:
-			ShowError( "clif_ranklist: Unsupported ranking type '%d'. Please report this.\n", rankingType );
 			return;
 			return;
 	}
 	}
 
 
-	// Can be safely casted here, since we validated it before
-	rank = (enum e_rank)rankingType;
-
-	WBUFW(buf,0) = 0x97d;
-	WBUFW(buf,2) = rank;
-	clif_sub_ranklist(buf,4,sd,rank);
-
-	switch(sd->class_&MAPID_UPPERMASK){ //mypoint (checking if valid type)
-		case MAPID_BLACKSMITH:
-		case MAPID_ALCHEMIST:
-		case MAPID_TAEKWON:
-			mypoint = sd->status.fame;
-	}
-	WBUFL(buf,284) = mypoint; //mypoint
-	clif_send(buf, 288, &sd->bl, SELF);
+	clif_ranklist( *sd, static_cast<e_rank>( p->type ) );
 #endif
 #endif
 }
 }
 
 
-/*
- *  097c <type> (CZ_REQ_RANKING)
- * type
- *  0: /blacksmith
- *  1: /alchemist
- *  2: /taekwon
- *  3: /pk
- * */
-void clif_parse_ranklist(int fd,map_session_data *sd) {
-	struct s_packet_db* info = &packet_db[RFIFOW(fd,0)];
-	int16 rankingtype = RFIFOW(fd,info->pos[0]); //type
-
-	clif_ranklist(sd,rankingtype);
-}
-
 /// Updates the fame rank points for the given ranking.
 /// Updates the fame rank points for the given ranking.
 /// 021b <points>.L <total points>.L (ZC_BLACKSMITH_POINT)
 /// 021b <points>.L <total points>.L (ZC_BLACKSMITH_POINT)
 /// 021c <points>.L <total points>.L (ZC_ALCHEMIST_POINT)
 /// 021c <points>.L <total points>.L (ZC_ALCHEMIST_POINT)
 /// 0224 <points>.L <total points>.L (ZC_TAEKWON_POINT)
 /// 0224 <points>.L <total points>.L (ZC_TAEKWON_POINT)
+/// 0236 <points>.L <total points>.L (ZC_KILLER_POINT)
 /// 097e <RankingType>.W <point>.L <TotalPoint>.L (ZC_UPDATE_RANKING_POINT)
 /// 097e <RankingType>.W <point>.L <TotalPoint>.L (ZC_UPDATE_RANKING_POINT)
-void clif_update_rankingpoint(map_session_data &sd, int rankingtype, int point) {
-	int fd = sd.fd;
-#if PACKETVER < 20130710
-	short cmd;
+void clif_update_rankingpoint( map_session_data& sd, e_rank rankingtype, uint32 point ){
+#if PACKETVER_MAIN_NUM >= 20120503 || PACKETVER_RE_NUM >= 20120502
+	PACKET_ZC_UPDATE_RANKING_POINT p = {};
+
+	p.packetType = HEADER_ZC_UPDATE_RANKING_POINT;
+	p.type = rankingtype;
+	p.points = point;
+	p.points_total = sd.status.fame;
+
+	clif_send( &p, sizeof( p ), &sd.bl, SELF );
+#else
 	switch(rankingtype){
 	switch(rankingtype){
-		case RANK_BLACKSMITH:	cmd = 0x21b; break;
-		case RANK_ALCHEMIST:	cmd = 0x21c; break;
-		case RANK_TAEKWON:		cmd = 0x224; break;
+		case RANK_BLACKSMITH: {
+#if PACKETVER >= 20041108
+			PACKET_ZC_BLACKSMITH_POINT p = {};
+
+			p.packetType = HEADER_ZC_BLACKSMITH_POINT;
+			p.points = point;
+			p.points_total = sd.status.fame;
+
+			clif_send( &p, sizeof( p ), &sd.bl, SELF );
+#endif
+			} break;
+		case RANK_ALCHEMIST: {
+#if PACKETVER >= 20041108
+			PACKET_ZC_ALCHEMIST_POINT p = {};
+
+			p.packetType = HEADER_ZC_ALCHEMIST_POINT;
+			p.points = point;
+			p.points_total = sd.status.fame;
+
+			clif_send( &p, sizeof( p ), &sd.bl, SELF );
+#endif
+			} break;
+		case RANK_TAEKWON: {
+#if PACKETVER >= 20050328
+			PACKET_ZC_TAEKWON_POINT p = {};
+
+			p.packetType = HEADER_ZC_TAEKWON_POINT;
+			p.points = point;
+			p.points_total = sd.status.fame;
+
+			clif_send( &p, sizeof( p ), &sd.bl, SELF );
+#endif
+			} break;
+		case RANK_KILLER: {
+#if PACKETVER >= 20050530
+			PACKET_ZC_KILLER_POINT p = {};
+
+			p.packetType = HEADER_ZC_KILLER_POINT;
+			p.points = point;
+			p.points_total = sd.status.fame;
+
+			clif_send( &p, sizeof( p ), &sd.bl, SELF );
+#endif
+			} break;
 		default:
 		default:
 			ShowError( "clif_update_rankingpoint: Unsupported ranking type '%d'. Please report this.\n", rankingtype );
 			ShowError( "clif_update_rankingpoint: Unsupported ranking type '%d'. Please report this.\n", rankingtype );
 			return;
 			return;
 	}
 	}
-
-	WFIFOHEAD(fd,packet_len(cmd));
-	WFIFOW(fd,0) = cmd;
-	WFIFOL(fd,2) = point;
-	WFIFOL(fd,6) = sd.status.fame;
-	WFIFOSET(fd, packet_len(cmd));
-#else
-	WFIFOHEAD(fd,packet_len(0x97e));
-	WFIFOW(fd,0) = 0x97e;
-	WFIFOW(fd,2) = rankingtype;
-	WFIFOL(fd,4) = point;
-	WFIFOL(fd,8) = sd.status.fame;
-	WFIFOSET(fd,packet_len(0x97e));
 #endif
 #endif
 }
 }
 
 

+ 1 - 2
src/map/clif.hpp

@@ -1341,8 +1341,7 @@ void clif_channel_msg(struct Channel *channel, const char *msg, unsigned long co
 
 
 #define clif_menuskill_clear(sd) (sd)->menuskill_id = (sd)->menuskill_val = (sd)->menuskill_val2 = 0;
 #define clif_menuskill_clear(sd) (sd)->menuskill_id = (sd)->menuskill_val = (sd)->menuskill_val2 = 0;
 
 
-void clif_ranklist(map_session_data *sd, int16 rankingType);
-void clif_update_rankingpoint(map_session_data &sd, int rankingtype, int point);
+void clif_update_rankingpoint( map_session_data& sd, e_rank rankingtype, uint32 point );
 
 
 void clif_crimson_marker( map_session_data& sd, struct block_list& bl, bool remove );
 void clif_crimson_marker( map_session_data& sd, struct block_list& bl, bool remove );
 
 

+ 13 - 28
src/map/clif_packetdb.hpp

@@ -466,12 +466,19 @@
 #if PACKETVER >= 20041108
 #if PACKETVER >= 20041108
 	packet(0x0084,2);
 	packet(0x0084,2);
 	packet(0x0216,6);
 	packet(0x0216,6);
-	parseable_packet(0x0217,2,clif_parse_Blacksmith,0);
-	parseable_packet(0x0218,2,clif_parse_Alchemist,0);
-	packet(0x0219,282);
-	packet(0x021a,282);
-	packet(0x021b,10);
-	packet(0x021c,10);
+#endif
+
+#if PACKETVER_MAIN_NUM >= 20120503 || PACKETVER_RE_NUM >= 20120502
+	parseable_packet( HEADER_CZ_REQ_RANKING, sizeof( PACKET_CZ_REQ_RANKING ), clif_parse_ranklist, 0 );
+#elif PACKETVER >= 20041108
+	parseable_packet( HEADER_CZ_BLACKSMITH_RANK, sizeof( PACKET_CZ_BLACKSMITH_RANK ), clif_parse_ranklist_blacksmith, 0 );
+	parseable_packet( HEADER_CZ_ALCHEMIST_RANK, sizeof( PACKET_CZ_ALCHEMIST_RANK ), clif_parse_ranklist_alchemist, 0 );
+#if PACKETVER >= 20050328
+	parseable_packet( HEADER_CZ_TAEKWON_RANK, sizeof( PACKET_CZ_TAEKWON_RANK ), clif_parse_ranklist_taekwon, 0 );
+#endif
+#if PACKETVER >= 20050530
+	parseable_packet( HEADER_CZ_KILLER_RANK, sizeof( PACKET_CZ_KILLER_RANK ), clif_parse_ranklist_killer, 0 );
+#endif
 #endif
 #endif
 
 
 // 2004-11-15aSakexe
 // 2004-11-15aSakexe
@@ -535,13 +542,6 @@
 	parseable_packet(0x0193,2,clif_parse_CloseKafra,0);
 	parseable_packet(0x0193,2,clif_parse_CloseKafra,0);
 #endif
 #endif
 
 
-// 2005-03-28aSakexe
-#if PACKETVER >= 20050328
-	packet(0x0224,10);
-	parseable_packet(0x0225,2,clif_parse_Taekwon,0);
-	packet(0x0226,282);
-#endif
-
 // 2005-04-04aSakexe
 // 2005-04-04aSakexe
 #if PACKETVER >= 20050404
 #if PACKETVER >= 20050404
 	packet(0x0227,18);
 	packet(0x0227,18);
@@ -591,9 +591,6 @@
 // 2005-05-30aSakexe
 // 2005-05-30aSakexe
 #if PACKETVER >= 20050530
 #if PACKETVER >= 20050530
 	packet(0x022e,71);
 	packet(0x022e,71);
-	packet(0x0236,10);
-	parseable_packet(0x0237,2,clif_parse_RankingPk,0);
-	packet(0x0238,282);
 #endif
 #endif
 
 
 // 2005-05-31aSakexe
 // 2005-05-31aSakexe
@@ -604,7 +601,6 @@
 // 2005-06-08aSakexe
 // 2005-06-08aSakexe
 #if PACKETVER >= 20050608
 #if PACKETVER >= 20050608
 	packet(0x0216,6);
 	packet(0x0216,6);
-	parseable_packet(0x0217,2,clif_parse_Blacksmith,0);
 	packet(0x022f,5);
 	packet(0x022f,5);
 	parseable_packet(0x0231,26,clif_parse_ChangeHomunculusName,2);
 	parseable_packet(0x0231,26,clif_parse_ChangeHomunculusName,2);
 	packet(0x023a,4);
 	packet(0x023a,4);
@@ -1716,17 +1712,6 @@
 	packet(0x099f,22); // ZC_SKILL_ENTRY4
 	packet(0x099f,22); // ZC_SKILL_ENTRY4
 #endif
 #endif
 
 
-// 2013-06-05Ragexe
-#if PACKETVER >= 20130605
-	parseable_packet(0x097C,4,clif_parse_ranklist,2);
-#endif
-
-// 2013-07-10Ragexe
-#if PACKETVER >= 20130710
-	packet(0x097D,288); //ZC_ACK_RANKING
-	packet(0x097E,12); //ZC_UPDATE_RANKING_POINT
-#endif
-
 // 2013-07-17Ragexe
 // 2013-07-17Ragexe
 #if PACKETVER >= 20130717
 #if PACKETVER >= 20130717
 	parseable_packet( HEADER_CZ_REQ_BANKING_DEPOSIT, sizeof( PACKET_CZ_REQ_BANKING_DEPOSIT ), clif_parse_BankDeposit, 0 );
 	parseable_packet( HEADER_CZ_REQ_BANKING_DEPOSIT, sizeof( PACKET_CZ_REQ_BANKING_DEPOSIT ), clif_parse_BankDeposit, 0 );

+ 113 - 0
src/map/packets.hpp

@@ -1458,6 +1458,119 @@ struct PACKET_CZ_CREATE_CHATROOM{
 } __attribute__((packed));
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(CZ_CREATE_CHATROOM, 0xd5);
 DEFINE_PACKET_HEADER(CZ_CREATE_CHATROOM, 0xd5);
 
 
+struct PACKET_CZ_BLACKSMITH_RANK{
+	int16 packetType;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_BLACKSMITH_RANK, 0x217);
+
+struct PACKET_CZ_ALCHEMIST_RANK{
+	int16 packetType;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_ALCHEMIST_RANK, 0x218);
+
+struct RANKLIST{
+	char names[10][NAME_LENGTH];
+	uint32 points[10];
+} __attribute__((packed));
+
+struct PACKET_ZC_BLACKSMITH_RANK{
+	int16 packetType;
+	RANKLIST list;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_BLACKSMITH_RANK, 0x219);
+
+struct PACKET_ZC_ALCHEMIST_RANK{
+	int16 packetType;
+	RANKLIST list;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_ALCHEMIST_RANK, 0x21a);
+
+struct PACKET_ZC_BLACKSMITH_POINT{
+	int16 packetType;
+	uint32 points;
+	uint32 points_total;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_BLACKSMITH_POINT, 0x21b);
+
+struct PACKET_ZC_ALCHEMIST_POINT{
+	int16 packetType;
+	uint32 points;
+	uint32 points_total;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_ALCHEMIST_POINT, 0x21c);
+
+struct PACKET_ZC_TAEKWON_POINT{
+	int16 packetType;
+	uint32 points;
+	uint32 points_total;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_TAEKWON_POINT, 0x224);
+
+struct PACKET_CZ_TAEKWON_RANK{
+	int16 packetType;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_TAEKWON_RANK, 0x225);
+
+struct PACKET_ZC_TAEKWON_RANK{
+	int16 packetType;
+	RANKLIST list;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_TAEKWON_RANK, 0x226);
+
+struct PACKET_ZC_KILLER_POINT{
+	int16 packetType;
+	uint32 points;
+	uint32 points_total;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_KILLER_POINT, 0x236);
+
+struct PACKET_CZ_KILLER_RANK{
+	int16 packetType;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_KILLER_RANK, 0x237);
+
+struct PACKET_ZC_KILLER_RANK{
+	int16 packetType;
+	RANKLIST list;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_KILLER_RANK, 0x238);
+
+struct PACKET_CZ_REQ_RANKING{
+	int16 packetType;
+	uint16 type;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_REQ_RANKING, 0x97c);
+
+struct PACKET_ZC_ACK_RANKING_sub{
+	char name[NAME_LENGTH];
+	uint32 points;
+} __attribute__((packed));
+
+struct PACKET_ZC_ACK_RANKING{
+	int16 packetType;
+	uint16 type;
+	RANKLIST list;
+	uint32 mypoints;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_ACK_RANKING, 0x97d);
+
+struct PACKET_ZC_UPDATE_RANKING_POINT{
+	int16 packetType;
+	uint16 type;
+	uint32 points;
+	uint32 points_total;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_UPDATE_RANKING_POINT, 0x97e);
+
+struct PACKET_ZC_ACK_RANKING2{
+	int16 packetType;
+	uint16 type;
+	uint32 CIDs[10];
+	uint32 points[10];
+	uint32 mypoints;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_ACK_RANKING2, 0xaf6);
+
 // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
 // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
 #if !defined( sun ) && ( !defined( __NETBSD__ ) || __NetBSD_Version__ >= 600000000 )
 #if !defined( sun ) && ( !defined( __NETBSD__ ) || __NetBSD_Version__ >= 600000000 )
 	#pragma pack( pop )
 	#pragma pack( pop )

+ 0 - 43
src/map/packets_struct.hpp

@@ -4216,49 +4216,6 @@ struct PACKET_ZC_BROADCAST_ITEMREFINING_RESULT {
 DEFINE_PACKET_HEADER(ZC_BROADCAST_ITEMREFINING_RESULT, 0x0ada);
 DEFINE_PACKET_HEADER(ZC_BROADCAST_ITEMREFINING_RESULT, 0x0ada);
 #endif
 #endif
 
 
-struct PACKET_ZC_ACK_RANKING_name {
-	char name[NAME_LENGTH];
-} __attribute__((packed));
-
-struct PACKET_ZC_ACK_RANKING_points {
-	uint32 points;
-} __attribute__((packed));
-
-#if PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190703 || PACKETVER_ZERO_NUM >= 20190724
-struct PACKET_ZC_ACK_RANKING_sub {
-	char name[NAME_LENGTH];
-	uint32 points;
-} __attribute__((packed));
-
-struct PACKET_ZC_ACK_RANKING {
-	int16 packetType;
-	int16 rankType;
-	uint32 chars[10];
-	uint32 points[10];
-	uint32 myPoints;
-} __attribute__((packed));
-DEFINE_PACKET_HEADER(ZC_ACK_RANKING, 0x0af6);
-#elif PACKETVER_MAIN_NUM >= 20130605 || PACKETVER_RE_NUM >= 20130529 || defined(PACKETVER_ZERO)
-struct PACKET_ZC_ACK_RANKING_sub {
-	struct PACKET_ZC_ACK_RANKING_name names[10];
-	struct PACKET_ZC_ACK_RANKING_points points[10];
-} __attribute__((packed));
-
-struct PACKET_ZC_ACK_RANKING {
-	int16 packetType;
-	int16 rankType;
-	struct PACKET_ZC_ACK_RANKING_sub ranks;
-	uint32 myPoints;
-} __attribute__((packed));
-
-DEFINE_PACKET_HEADER(ZC_ACK_RANKING, 0x097d);
-#else
-struct PACKET_ZC_ACK_RANKING_sub {
-	struct PACKET_ZC_ACK_RANKING_name names[10];
-	struct PACKET_ZC_ACK_RANKING_points points[10];
-} __attribute__((packed));
-#endif
-
 struct PACKET_ZC_STATUS_CHANGE_ACK {
 struct PACKET_ZC_STATUS_CHANGE_ACK {
 	int16 packetType;
 	int16 packetType;
 	uint16 sp;
 	uint16 sp;