Browse Source

Converted ZC_SKILLINFO_UPDATE2 to struct (#8968)

Lemongrass3110 4 months ago
parent
commit
fb066e9090
5 changed files with 45 additions and 37 deletions
  1. 30 22
      src/map/clif.cpp
  2. 1 1
      src/map/clif.hpp
  3. 0 5
      src/map/clif_packetdb.hpp
  4. 2 2
      src/map/packets_struct.hpp
  5. 12 7
      src/map/skill.cpp

+ 30 - 22
src/map/clif.cpp

@@ -5704,7 +5704,7 @@ void clif_skillinfoblock(map_session_data *sd)
 	// adoption fix
 	if (haveCallPartnerSkill) {
 		clif_addskill(*sd, WE_CALLPARTNER);
-		clif_skillinfo(sd, WE_CALLPARTNER, 0);
+		clif_skillinfo( *sd, WE_CALLPARTNER );
 	}
 
 	// workaround for bugreport:5348; send the remaining skills one by one to bypass packet size limit
@@ -5713,7 +5713,7 @@ void clif_skillinfoblock(map_session_data *sd)
 		if( (id = sd->status.skill[i].id) != 0 && ( id != WE_CALLPARTNER || !haveCallPartnerSkill ) )
 		{
 			clif_addskill(*sd, id);
-			clif_skillinfo(sd, id, 0);
+			clif_skillinfo( *sd, id );
 		}
 	}
 }
@@ -5801,30 +5801,38 @@ void clif_skillup(map_session_data *sd, uint16 skill_id, int32 lv, int32 range,
 }
 
 
-/// Updates a skill in the skill tree (ZC_SKILLINFO_UPDATE2).
-/// 07e1 <skill id>.W <type>.L <level>.W <sp cost>.W <attack range>.W <upgradable>.B
-void clif_skillinfo(map_session_data *sd,int32 skill_id, int32 inf)
-{
-	nullpo_retv(sd);
-
-	const int32 fd = sd->fd;
+/// Updates a skill in the skill tree
+/// 07e1 <skill id>.W <type>.L <level>.W <sp cost>.W <attack range>.W <upgradable>.B (ZC_SKILLINFO_UPDATE2)
+/// 0b33 <skill id>.W <type>.L <level>.W <sp cost>.W <attack range>.W <upgradable>.B <level2>.W (ZC_SKILLINFO_UPDATE3)
+void clif_skillinfo( map_session_data& sd, uint16 skill_id ){
+#if PACKETVER >= 20090715
 	uint16 idx = skill_get_index(skill_id);
 
-	if (!session_isActive(fd) || !idx)
+	if( idx == 0 ){
 		return;
+	}
 
-	WFIFOHEAD(fd,packet_len(0x7e1));
-	WFIFOW(fd,0) = 0x7e1;
-	WFIFOW(fd,2) = skill_id;
-	WFIFOL(fd,4) = inf?inf:skill_get_inf(skill_id);
-	WFIFOW(fd,8) = sd->status.skill[idx].lv;
-	WFIFOW(fd,10) = skill_get_sp(skill_id,sd->status.skill[idx].lv);
-	WFIFOW(fd,12) = skill_get_range2(&sd->bl,skill_id,sd->status.skill[idx].lv,false);
-	if( sd->status.skill[idx].flag == SKILL_FLAG_PERMANENT )
-		WFIFOB(fd,14) = (sd->status.skill[idx].lv < skill_tree_get_max(skill_id, sd->status.class_))? 1:0;
-	else
-		WFIFOB(fd,14) = 0;
-	WFIFOSET(fd,packet_len(0x7e1));
+	PACKET_ZC_SKILLINFO_UPDATE2 p = {};
+
+	p.packetType = HEADER_ZC_SKILLINFO_UPDATE2;	
+	p.id = skill_id;
+	p.level = sd.status.skill[idx].lv;
+	p.sp = static_cast<decltype(p.sp)>( skill_get_sp( skill_id,sd.status.skill[idx].lv ) );
+	p.range2 = static_cast<decltype(p.range2)>( skill_get_range2( &sd.bl,skill_id,sd.status.skill[idx].lv,false ) );
+	p.inf = skill_get_inf( skill_id );
+
+	if( sd.status.skill[idx].flag == SKILL_FLAG_PERMANENT && sd.status.skill[idx].lv < skill_tree_get_max( skill_id, sd.status.class_ ) ){
+		p.upFlag = true;
+	}else{
+		p.upFlag = false;
+	}
+
+#if PACKETVER_RE_NUM >= 20190807 || PACKETVER_ZERO_NUM >= 20190918
+	p.level2 = p.level;
+#endif
+
+	clif_send( &p, sizeof( p ), &sd.bl, SELF );
+#endif
 }
 
 void clif_skill_scale( struct block_list *bl, int32 src_id, int32 x, int32 y, uint16 skill_id, uint16 skill_lv, int32 casttime ){

+ 1 - 1
src/map/clif.hpp

@@ -970,7 +970,7 @@ void clif_class_change( block_list& bl, int32 class_, enum send_target target =
 
 void clif_skillinfoblock(map_session_data *sd);
 void clif_skillup(map_session_data *sd, uint16 skill_id, int32 lv, int32 range, int32 upgradable);
-void clif_skillinfo(map_session_data *sd,int32 skill_id, int32 inf);
+void clif_skillinfo( map_session_data& sd, uint16 skill_id );
 void clif_addskill(map_session_data& sd, uint16 skill_id);
 void clif_deleteskill(map_session_data& sd, uint16 skill_id, bool skip_infoblock = false);
 

+ 0 - 5
src/map/clif_packetdb.hpp

@@ -1288,11 +1288,6 @@
 	packet(0x07d9,268);
 #endif
 
-// 2009-07-15aRagexeRE
-#if PACKETVER >= 20090715
-	packet(0x07e1,15);
-#endif
-
 // 2009-08-05aRagexeRE
 #if PACKETVER >= 20090805
 	packet(0x07e2,8);

+ 2 - 2
src/map/packets_struct.hpp

@@ -4283,7 +4283,7 @@ DEFINE_PACKET_HEADER(ZC_SKILLINFO_LIST, 0x010f);
 struct PACKET_ZC_SKILLINFO_UPDATE2 {
 	int16 packetType;
 	uint16 id;
-	int inf;
+	int32 inf;
 	uint16 level;
 	uint16 sp;
 	uint16 range2;
@@ -4295,7 +4295,7 @@ DEFINE_PACKET_HEADER(ZC_SKILLINFO_UPDATE2, 0x0b33);
 struct PACKET_ZC_SKILLINFO_UPDATE2 {
 	int16 packetType;
 	uint16 id;
-	int inf;
+	int32 inf;
 	uint16 level;
 	uint16 sp;
 	uint16 range2;

+ 12 - 7
src/map/skill.cpp

@@ -3217,19 +3217,24 @@ void skill_combo_toggle_inf(struct block_list* bl, uint16 skill_id, int32 inf){
 		case MO_COMBOFINISH:
 		case CH_TIGERFIST:
 		case CH_CHAINCRUSH:
-			if (sd) clif_skillinfo(sd,MO_EXTREMITYFIST, inf);
+			if( sd != nullptr ){
+				clif_skillinfo( *sd, MO_EXTREMITYFIST );
+			}
 			break;
 		case TK_JUMPKICK:
-			if (sd) clif_skillinfo(sd,TK_JUMPKICK, inf);
+			if( sd != nullptr ){
+				clif_skillinfo( *sd, TK_JUMPKICK );
+			}
 			break;
 		case MO_TRIPLEATTACK:
-			if (sd && pc_checkskill(sd, SR_DRAGONCOMBO) > 0)
-				clif_skillinfo(sd,SR_DRAGONCOMBO, inf);
+			if( sd != nullptr && pc_checkskill( sd, SR_DRAGONCOMBO) > 0 ){
+				clif_skillinfo( *sd, SR_DRAGONCOMBO );
+			}
 			break;
 		case SR_FALLENEMPIRE:
-			if (sd){
-				clif_skillinfo(sd,SR_GATEOFHELL, inf);
-				clif_skillinfo(sd,SR_TIGERCANNON, inf);
+			if (sd != nullptr){
+				clif_skillinfo( *sd, SR_GATEOFHELL );
+				clif_skillinfo( *sd, SR_TIGERCANNON );
 			}
 			break;
 	}