ソースを参照

Converted CZ_MOVETO_MAP to struct (#8792)

Lemongrass3110 6 ヶ月 前
コミット
e869a25767
3 ファイル変更21 行追加13 行削除
  1. 12 12
      src/map/clif.cpp
  2. 1 1
      src/map/clif_packetdb.hpp
  3. 8 0
      src/map/packets.hpp

+ 12 - 12
src/map/clif.cpp

@@ -11505,20 +11505,20 @@ void clif_parse_GlobalMessage(int fd, map_session_data* sd)
 }
 
 
-/// /mm /mapmove (as @rura GM command) (CZ_MOVETO_MAP).
+/// /mm /mapmove (as @rura GM command).
 /// Request to warp to a map on given coordinates.
-/// 0140 <map name>.16B <x>.W <y>.W
-void clif_parse_MapMove(int fd, map_session_data *sd)
-{
-	char command[MAP_NAME_LENGTH_EXT+25];
-	char* map_name;
-	struct s_packet_db* info = &packet_db[RFIFOW(fd,0)];
+/// 0140 <map name>.16B <x>.W <y>.W (CZ_MOVETO_MAP)
+void clif_parse_MapMove( int fd, map_session_data* sd){
+	const PACKET_CZ_MOVETO_MAP* p = reinterpret_cast<PACKET_CZ_MOVETO_MAP*>( RFIFOP( fd, 0 ) );
+
+	char map_name[MAP_NAME_LENGTH_EXT];
+
+	safestrncpy( map_name, p->map, sizeof( map_name ) );
+
+	char command[CHAT_SIZE_MAX];
+
+	safesnprintf( command, sizeof( command ),"%cmapmove %s %hu %hu", atcommand_symbol, map_name, p->x, p->y );
 
-	map_name = RFIFOCP(fd,info->pos[0]);
-	map_name[MAP_NAME_LENGTH_EXT-1]='\0';
-	safesnprintf(command,sizeof(command),"%cmapmove %s %d %d", atcommand_symbol, map_name,
-	    RFIFOW(fd,info->pos[1]), //x
-	    RFIFOW(fd,info->pos[2])); //y
 	is_atcommand(fd, sd, command, 1);
 }
 

+ 1 - 1
src/map/clif_packetdb.hpp

@@ -148,7 +148,7 @@
 	packet(0x0138,3);
 	packet(0x013e,24);
 	parseable_packet(0x013f,26,clif_parse_GM_Item_Monster,2);
-	parseable_packet(0x0140,22,clif_parse_MapMove,2,18,20);
+	parseable_packet( HEADER_CZ_MOVETO_MAP, sizeof( PACKET_CZ_MOVETO_MAP ), clif_parse_MapMove, 0 );
 	parseable_packet(0x0143,10,clif_parse_NpcAmountInput,2,6);
 	packet(0x0145,19);
 	parseable_packet(0x0146,6,clif_parse_NpcCloseClicked,2);

+ 8 - 0
src/map/packets.hpp

@@ -1409,6 +1409,14 @@ struct PACKET_ZC_MEMBER_EXIT{
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(ZC_MEMBER_EXIT, 0xdd);
 
+struct PACKET_CZ_MOVETO_MAP{
+	int16 packetType;
+	char map[MAP_NAME_LENGTH_EXT];
+	uint16 x;
+	uint16 y;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_MOVETO_MAP, 0x140);
+
 // 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 )