浏览代码

Implemented packet PACKET_ZC_GUILD_POSITION (#8724)

Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
Toshiro90 6 月之前
父节点
当前提交
59e3bfccaf
共有 4 个文件被更改,包括 28 次插入2 次删除
  1. 24 0
      src/map/clif.cpp
  2. 1 0
      src/map/clif.hpp
  3. 2 2
      src/map/guild.cpp
  4. 1 0
      src/map/packets.hpp

+ 24 - 0
src/map/clif.cpp

@@ -9347,6 +9347,30 @@ void clif_guild_broken( map_session_data& sd, int flag ){
 	clif_send( &p, sizeof( p ), &sd.bl, SELF );
 }
 
+void clif_guild_position_selected(map_session_data& sd)
+{
+#if PACKETVER_MAIN_NUM >= 20180605 || PACKETVER_RE_NUM >= 20180605 || PACKETVER_ZERO_NUM >= 20180605
+	PACKET_ZC_GUILD_POSITION* p = reinterpret_cast<PACKET_ZC_GUILD_POSITION*>(packet_buffer);
+
+	p->packetType = HEADER_ZC_GUILD_POSITION;
+	p->packetLength = sizeof( PACKET_ZC_GUILD_POSITION );
+	p->AID = sd.bl.id;
+
+	if( sd.guild != nullptr ){
+		const auto& g = sd.guild->guild;
+
+		if( int ps = guild_getposition( sd ); ps != -1 ){
+			safestrncpy( p->position, g.position[ps].name, NAME_LENGTH );
+			p->packetLength += static_cast<decltype(p->packetLength)>( NAME_LENGTH );
+		}
+	}
+
+	clif_send( p, p->packetLength, &sd.bl, AREA );
+#else
+	clif_name_area(&sd.bl);
+#endif
+}
+
 
 /// Displays emotion on an object (ZC_EMOTION).
 /// 00c0 <id>.L <type>.B

+ 1 - 0
src/map/clif.hpp

@@ -1068,6 +1068,7 @@ void clif_guild_xy_single( map_session_data& sd, map_session_data& tsd );
 void clif_guild_xy_remove( map_session_data& sd );
 void clif_guild_castle_list(map_session_data& sd);
 void clif_guild_castle_teleport_res(map_session_data& sd, enum e_siege_teleport_result result);
+void clif_guild_position_selected(map_session_data& sd);
 
 // Battleground
 void clif_bg_hp(map_session_data *sd);

+ 2 - 2
src/map/guild.cpp

@@ -1501,7 +1501,7 @@ int guild_memberposition_changed(struct mmo_guild &g,int idx,int pos) {
 
 	// Update char position in client [LuzZza]
 	if(g.member[idx].sd != nullptr)
-		clif_name_area(&g.member[idx].sd->bl);
+		clif_guild_position_selected(*g.member[idx].sd);
 	return 0;
 }
 
@@ -1532,7 +1532,7 @@ int guild_position_changed(int guild_id,int idx,struct guild_position *p) {
 	// Update char name in client [LuzZza]
 	for(i=0;i<g->guild.max_member;i++)
 		if(g->guild.member[i].position == idx && g->guild.member[i].sd != nullptr)
-			clif_name_area(&g->guild.member[i].sd->bl);
+			clif_guild_position_selected(*g->guild.member[i].sd);
 	return 0;
 }
 

+ 1 - 0
src/map/packets.hpp

@@ -1428,6 +1428,7 @@ DEFINE_PACKET_HEADER(CZ_REQ_STYLE_CHANGE, 0xa46)
 DEFINE_PACKET_HEADER(ZC_STYLE_CHANGE_RES, 0xa47)
 DEFINE_PACKET_HEADER(ZC_GROUP_ISALIVE, 0xab2)
 DEFINE_PACKET_HEADER(CZ_REQ_STYLE_CHANGE2, 0xafc)
+DEFINE_PACKET_HEADER(ZC_GUILD_POSITION, 0x0afd)
 DEFINE_PACKET_HEADER(ZC_REMOVE_EFFECT, 0x0b0d)
 DEFINE_PACKET_HEADER(ZC_FEED_MER, 0x22f)
 DEFINE_PACKET_HEADER(ZC_FEED_PET, 0x1a3)