Explorar el Código

Converted ZC_SKILLINFO_UPDATE to struct (#8967)

Co-authored-by: Atemo <Atemo@users.noreply.github.com>
Lemongrass3110 hace 3 meses
padre
commit
d37ce57786
Se han modificado 6 ficheros con 32 adiciones y 24 borrados
  1. 15 15
      src/map/clif.cpp
  2. 1 1
      src/map/clif.hpp
  3. 0 1
      src/map/clif_packetdb.hpp
  4. 2 2
      src/map/guild.cpp
  5. 10 0
      src/map/packets.hpp
  6. 4 5
      src/map/pc.cpp

+ 15 - 15
src/map/clif.cpp

@@ -5779,25 +5779,25 @@ void clif_deleteskill(map_session_data& sd, uint16 skill_id, bool skip_infoblock
 		clif_skillinfoblock(&sd);
 }
 
-/// Updates a skill in the skill tree (ZC_SKILLINFO_UPDATE).
-/// 010e <skill id>.W <level>.W <sp cost>.W <attack range>.W <upgradable>.B
-void clif_skillup(map_session_data *sd, uint16 skill_id, int32 lv, int32 range, int32 upgradable) {
-	nullpo_retv(sd);
-
-	int32 fd = sd->fd;
+/// Updates a skill in the skill tree.
+/// 010e <skill id>.W <level>.W <sp cost>.W <attack range>.W <upgradable>.B (ZC_SKILLINFO_UPDATE)
+void clif_skillup( map_session_data& sd, uint16 skill_id, uint16 lv, uint16 range, bool upgradable ){
 	uint16 idx = skill_get_index(skill_id);
 
-	if (!session_isActive(fd) || !idx)
+	if( idx == 0 ){
 		return;
+	}
 	
-	WFIFOHEAD(fd, packet_len(0x10e));
-	WFIFOW(fd, 0) = 0x10e;
-	WFIFOW(fd, 2) = skill_id;
-	WFIFOW(fd, 4) = lv;
-	WFIFOW(fd, 6) = skill_get_sp(skill_id, lv);
-	WFIFOW(fd, 8) = range;
-	WFIFOB(fd, 10) = upgradable;
-	WFIFOSET(fd, packet_len(0x10e));
+	PACKET_ZC_SKILLINFO_UPDATE p{};
+
+	p.packetType = HEADER_ZC_SKILLINFO_UPDATE;
+	p.skillId = skill_id;
+	p.level = lv;
+	p.sp = static_cast<decltype(p.sp)>( skill_get_sp( skill_id, lv ) );
+	p.range2 = range;
+	p.upFlag = upgradable;
+
+	clif_send( &p, sizeof( p ), &sd.bl, SELF );
 }
 
 

+ 1 - 1
src/map/clif.hpp

@@ -969,7 +969,7 @@ int32 clif_outsight(struct block_list *bl,va_list ap);	// map_forallinmovearea c
 void clif_class_change( block_list& bl, int32 class_, enum send_target target = AREA, map_session_data* sd = nullptr );
 
 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_skillup( map_session_data& sd, uint16 skill_id, uint16 lv, uint16 range, bool upgradable );
 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 - 1
src/map/clif_packetdb.hpp

@@ -114,7 +114,6 @@
 	parseable_packet(0x0108,-1,clif_parse_PartyMessage,2,4);
 	packet(0x0109,-1);
 	packet( HEADER_ZC_MVP_GETTING_ITEM, sizeof( struct PACKET_ZC_MVP_GETTING_ITEM ) );
-	packet(0x010e,11);
 	packet(0x010f,-1);
 	packet( HEADER_ZC_ACK_TOUSESKILL, sizeof( PACKET_ZC_ACK_TOUSESKILL ) );
 	parseable_packet(0x0112,4,clif_parse_SkillUp,2);

+ 2 - 2
src/map/guild.cpp

@@ -1760,9 +1760,9 @@ int32 guild_skillupack(int32 guild_id,uint16 skill_id,uint32 account_id) {
 	if (g == nullptr || idx == -1)
 		return 0;
 	if (sd != nullptr) {
-		int32 lv = g->guild.skill[idx].lv;
+		uint16 lv = g->guild.skill[idx].lv;
 		int32 range = skill_get_range(skill_id, lv);
-		clif_skillup(sd,skill_id,lv,range,1);
+		clif_skillup( *sd, skill_id,lv, range, true );
 
 		/* Guild Aura handling */
 		switch( skill_id ) {

+ 10 - 0
src/map/packets.hpp

@@ -478,6 +478,16 @@ struct PACKET_CZ_RESET_SKILL{
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(CZ_RESET_SKILL, 0x0bb1)
 
+struct PACKET_ZC_SKILLINFO_UPDATE{
+	uint16 packetType;
+	uint16 skillId;
+	uint16 level;
+	uint16 sp;
+	uint16 range2;
+	bool upFlag;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_SKILLINFO_UPDATE, 0x10e);
+
 struct PACKET_ZC_BOSS_INFO{
 	int16 packetType;
 	uint8 type;

+ 4 - 5
src/map/pc.cpp

@@ -9015,7 +9015,6 @@ void pc_skillup(map_session_data *sd,uint16 skill_id)
 			sd->status.skill[idx].flag == SKILL_FLAG_PERMANENT && //Don't allow raising while you have granted skills. [Skotlex]
 			sd->status.skill[idx].lv < skill_tree_get_max(skill_id, sd->status.class_) )
 		{
-			int32 lv, range, upgradable;
 			sd->status.skill[idx].lv++;
 			sd->status.skill_point--;
 			if( !skill_get_inf(skill_id) || pc_checkskill_summoner(sd, SUMMONER_POWER_LAND) >= 20 || pc_checkskill_summoner(sd, SUMMONER_POWER_SEA) >= 20 )
@@ -9025,10 +9024,10 @@ void pc_skillup(map_session_data *sd,uint16 skill_id)
 			else
 				pc_check_skilltree(sd); // Check if a new skill can Lvlup
 
-			lv = sd->status.skill[idx].lv;
-			range = skill_get_range2(&sd->bl, skill_id, lv, false);
-			upgradable = (lv < skill_tree_get_max(sd->status.skill[idx].id, sd->status.class_)) ? 1 : 0;
-			clif_skillup(sd,skill_id,lv,range,upgradable);
+			uint16 lv = sd->status.skill[idx].lv;
+			int32 range = skill_get_range2(&sd->bl, skill_id, lv, false);
+			bool upgradable = ( lv < skill_tree_get_max( sd->status.skill[idx].id, sd->status.class_ ) );
+			clif_skillup( *sd, skill_id, lv, range, upgradable );
 			clif_updatestatus(*sd,SP_SKILLPOINT);
 			if( skill_id == GN_REMODELING_CART ) /* cart weight info was updated by status_calc_pc */
 				clif_updatestatus(*sd,SP_CARTINFO);