ソースを参照

Converted ZC_ROLE_CHANGE to struct (#8789)

Lemongrass3110 6 ヶ月 前
コミット
2de106e0f0
4 ファイル変更13 行追加20 行削除
  1. 4 2
      src/map/chat.cpp
  2. 8 16
      src/map/clif.cpp
  3. 1 1
      src/map/clif.hpp
  4. 0 1
      src/map/clif_packetdb.hpp

+ 4 - 2
src/map/chat.cpp

@@ -235,7 +235,7 @@ int chat_leavechat(map_session_data* sd, bool kicked)
 
 	if( leavechar == 0 && cd->owner->type == BL_PC ) { // Set and announce new owner
 		cd->owner = (struct block_list*) cd->usersd[0];
-		clif_changechatowner(cd, cd->usersd[0]);
+		clif_chat_role( *cd, *cd->usersd[0] );
 		clif_clearchat(*cd);
 
 		//Adjust Chat location after owner has been changed.
@@ -281,13 +281,15 @@ int chat_changechatowner(map_session_data* sd, const char* nextownername)
 
 	// set new owner
 	cd->owner = (struct block_list*) cd->usersd[i];
-	clif_changechatowner(cd,cd->usersd[i]);
 
 	// swap the old and new owners' positions
 	tmpsd = cd->usersd[i];
 	cd->usersd[i] = cd->usersd[0];
 	cd->usersd[0] = tmpsd;
 
+	clif_chat_role( *cd, *cd->usersd[0] );
+	clif_chat_role( *cd, *cd->usersd[i] );
+
 	// set the new chatroom position
 	map_delblock( &cd->bl );
 	cd->bl.x = cd->owner->x;

+ 8 - 16
src/map/clif.cpp

@@ -4670,27 +4670,19 @@ void clif_addchat( chat_data& cd, map_session_data& sd ){
 }
 
 
-/// Announce the new owner (ZC_ROLE_CHANGE).
-/// 00e1 <role>.L <nick>.24B
+/// Announce the new owner.
+/// 00e1 <role>.L <nick>.24B (ZC_ROLE_CHANGE)
 /// role:
 ///     0 = owner (menu)
 ///     1 = normal
-void clif_changechatowner(struct chat_data* cd, map_session_data* sd)
-{
-	unsigned char buf[64];
-
-	nullpo_retv(sd);
-	nullpo_retv(cd);
+void clif_chat_role( chat_data& cd, map_session_data& sd ){
+	PACKET_ZC_ROLE_CHANGE p = {};
 
-	WBUFW(buf, 0) = 0xe1;
-	WBUFL(buf, 2) = 1;
-	safestrncpy(WBUFCP(buf,6),cd->usersd[0]->status.name,NAME_LENGTH);
-
-	WBUFW(buf,30) = 0xe1;
-	WBUFL(buf,32) = 0;
-	safestrncpy(WBUFCP(buf,36),sd->status.name,NAME_LENGTH);
+	p.packetType = HEADER_ZC_ROLE_CHANGE;
+	p.flag = cd.usersd[0] != &sd;
+	safestrncpy( p.name, sd.status.name, sizeof( p.name ) );
 
-	clif_send(buf,packet_len(0xe1)*2,&sd->bl,CHAT);
+	clif_send( &p, sizeof( p ), &sd.bl, CHAT );
 }
 
 

+ 1 - 1
src/map/clif.hpp

@@ -887,7 +887,7 @@ void clif_dispchat(struct chat_data* cd, int fd);	// area or fd
 void clif_joinchatfail( map_session_data& sd, e_refuse_enter_room result );
 void clif_joinchatok(map_session_data& sd,chat_data& cd);
 void clif_addchat( chat_data& cd, map_session_data& sd );
-void clif_changechatowner(struct chat_data* cd, map_session_data* sd);	// chat
+void clif_chat_role( chat_data& cd, map_session_data& sd );
 void clif_clearchat(chat_data &cd);
 void clif_chat_leave( chat_data& cd, map_session_data& sd, bool kicked );
 void clif_changechatstatus(chat_data& cd);

+ 0 - 1
src/map/clif_packetdb.hpp

@@ -89,7 +89,6 @@
 	parseable_packet(0x00d9,14,clif_parse_ChatAddMember,2,6);
 	parseable_packet(0x00de,-1,clif_parse_ChatRoomStatusChange,2,4,6,7,15);
 	parseable_packet(0x00e0,30,clif_parse_ChangeChatOwner,2,6);
-	packet(0x00e1,30);
 	parseable_packet(0x00e2,26,clif_parse_KickFromChat,2);
 	parseable_packet(0x00e3,2,clif_parse_ChatLeave,0);
 	parseable_packet(0x00e4,6,clif_parse_TradeRequest,2);