浏览代码

Converted ZC_SKILLINFO_DELETE to struct (#8595)

Co-authored-by: Atemo <Atemo@users.noreply.github.com>
Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
AoShinHo 8 月之前
父节点
当前提交
077f714e05
共有 9 个文件被更改,包括 28 次插入25 次删除
  1. 1 1
      src/map/atcommand.cpp
  2. 2 2
      src/map/chrif.cpp
  3. 12 14
      src/map/clif.cpp
  4. 1 1
      src/map/clif.hpp
  5. 0 1
      src/map/clif_packetdb.hpp
  6. 6 0
      src/map/packets.hpp
  7. 3 3
      src/map/pc.cpp
  8. 2 2
      src/map/skill.cpp
  9. 1 1
      src/map/status.cpp

+ 1 - 1
src/map/atcommand.cpp

@@ -3792,7 +3792,7 @@ ACMD_FUNC(lostskill)
 
 	sd->status.skill[sk_idx].lv = 0;
 	sd->status.skill[sk_idx].flag = SKILL_FLAG_PERMANENT;
-	clif_deleteskill(sd,skill_id);
+	clif_deleteskill(*sd,skill_id);
 	clif_displaymessage(fd, msg_txt(sd,71)); // You have forgotten the skill.
 
 	return 0;

+ 2 - 2
src/map/chrif.cpp

@@ -1065,7 +1065,7 @@ int chrif_deadopt(uint32 father_id, uint32 mother_id, uint32 child_id) {
 		sd->status.skill[idx].id = 0;
 		sd->status.skill[idx].lv = 0;
 		sd->status.skill[idx].flag = SKILL_FLAG_PERMANENT;
-		clif_deleteskill(sd,WE_CALLBABY);
+		clif_deleteskill(*sd,WE_CALLBABY);
 	}
 
 	if( mother_id && ( sd = map_charid2sd(mother_id) ) != nullptr && sd->status.child == child_id ) {
@@ -1073,7 +1073,7 @@ int chrif_deadopt(uint32 father_id, uint32 mother_id, uint32 child_id) {
 		sd->status.skill[idx].id = 0;
 		sd->status.skill[idx].lv = 0;
 		sd->status.skill[idx].flag = SKILL_FLAG_PERMANENT;
-		clif_deleteskill(sd,WE_CALLBABY);
+		clif_deleteskill(*sd,WE_CALLBABY);
 	}
 
 	return 0;

+ 12 - 14
src/map/clif.cpp

@@ -5698,28 +5698,26 @@ void clif_addskill(map_session_data *sd, int skill_id)
 }
 
 
-/// Deletes a skill from the skill tree (ZC_SKILLINFO_DELETE).
-/// 0441 <skill id>.W
-void clif_deleteskill(map_session_data *sd, int skill_id, bool skip_infoblock)
-{
-#if PACKETVER >= 20081217
-	nullpo_retv(sd);
-
-	int fd = sd->fd;
+/// Deletes a skill from the skill tree.
+/// 0441 <skill id>.W (ZC_SKILLINFO_DELETE)
+void clif_deleteskill(map_session_data& sd, uint16 skill_id, bool skip_infoblock){
+#if PACKETVER >= 20081126
 	uint16 idx = skill_get_index(skill_id);
 
-	if (!session_isActive(fd) || !idx)
+	if (idx == 0)
 		return;
 
-	WFIFOHEAD(fd,packet_len(0x441));
-	WFIFOW(fd,0) = 0x441;
-	WFIFOW(fd,2) = skill_id;
-	WFIFOSET(fd,packet_len(0x441));
+	PACKET_ZC_SKILLINFO_DELETE p{};
+
+	p.packetType = HEADER_ZC_SKILLINFO_DELETE;
+	p.skillID = skill_id;
+
+	clif_send(&p,sizeof(p),&sd.bl,SELF);
 #endif
 #if PACKETVER_MAIN_NUM >= 20190807 || PACKETVER_RE_NUM >= 20190807 || PACKETVER_ZERO_NUM >= 20190918
 	if (!skip_infoblock)
 #endif
-		clif_skillinfoblock(sd);
+		clif_skillinfoblock(&sd);
 }
 
 /// Updates a skill in the skill tree (ZC_SKILLINFO_UPDATE).

+ 1 - 1
src/map/clif.hpp

@@ -933,7 +933,7 @@ void clif_skillinfoblock(map_session_data *sd);
 void clif_skillup(map_session_data *sd, uint16 skill_id, int lv, int range, int upgradable);
 void clif_skillinfo(map_session_data *sd,int skill_id, int inf);
 void clif_addskill(map_session_data *sd, int skill_id);
-void clif_deleteskill(map_session_data *sd, int skill_id, bool skip_infoblock = false);
+void clif_deleteskill(map_session_data& sd, uint16 skill_id, bool skip_infoblock = false);
 
 void clif_skillcasting(struct block_list* bl, int src_id, int dst_id, int dst_x, int dst_y, uint16 skill_id, uint16 skill_lv, int property, int casttime);
 void clif_skillcastcancel( block_list& bl );

+ 0 - 1
src/map/clif_packetdb.hpp

@@ -1209,7 +1209,6 @@
 // 2008-11-26aSakexe
 #if PACKETVER >= 20081126
 	packet(0x01a2,37);
-	packet(0x0441,4);
 #endif
 
 // 2008-12-10aSakexe

+ 6 - 0
src/map/packets.hpp

@@ -1118,6 +1118,12 @@ struct PACKET_ZC_SKILL_DISAPPEAR {
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(ZC_SKILL_DISAPPEAR, 0x120);
 
+struct PACKET_ZC_SKILLINFO_DELETE {
+	uint16 packetType;
+	uint16 skillID;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_SKILLINFO_DELETE, 0x441);
+
 struct PACKET_ZC_SKILL_UPDATE {
 	int16 packetType;
 	uint32 GID;

+ 3 - 3
src/map/pc.cpp

@@ -5345,7 +5345,7 @@ bool pc_skill(map_session_data* sd, uint16 skill_id, int level, enum e_addskill_
 			sd->status.skill[idx].flag = SKILL_FLAG_PERMANENT;
 			if (level == 0) { //Remove skill.
 				sd->status.skill[idx].id = 0;
-				clif_deleteskill(sd,skill_id);
+				clif_deleteskill(*sd,skill_id);
 			} else
 				clif_addskill(sd,skill_id);
 			if (!skill_get_inf(skill_id) || pc_checkskill_summoner(sd, SUMMONER_POWER_LAND) >= 20 || pc_checkskill_summoner(sd, SUMMONER_POWER_SEA) >= 20) //Only recalculate for passive skills.
@@ -5380,7 +5380,7 @@ bool pc_skill(map_session_data* sd, uint16 skill_id, int level, enum e_addskill_
 			sd->status.skill[idx].flag = SKILL_FLAG_PERM_GRANTED;
 			if (level == 0) { //Remove skill.
 				sd->status.skill[idx].id = 0;
-				clif_deleteskill(sd,skill_id);
+				clif_deleteskill(*sd,skill_id);
 			} else
 				clif_addskill(sd,skill_id);
 			if (!skill_get_inf(skill_id) || pc_checkskill_summoner(sd, SUMMONER_POWER_LAND) >= 20 || pc_checkskill_summoner(sd, SUMMONER_POWER_SEA) >= 20) //Only recalculate for passive skills.
@@ -5462,7 +5462,7 @@ bool pc_skill_plagiarism_reset(map_session_data &sd, uint8 type)
 		sd.status.skill[idx].id = 0;
 		sd.status.skill[idx].lv = 0;
 		sd.status.skill[idx].flag = SKILL_FLAG_PERMANENT;
-		clif_deleteskill(&sd, skill_id);
+		clif_deleteskill(sd, skill_id);
 		
 		if (type == 1) {
 			sd.cloneskill_idx = 0;

+ 2 - 2
src/map/skill.cpp

@@ -3395,7 +3395,7 @@ static void skill_do_copy(struct block_list* src,struct block_list *bl, uint16 s
 			case 1: //Copied by Plagiarism
 				{
 					if (tsd->cloneskill_idx > 0 && tsd->status.skill[tsd->cloneskill_idx].flag == SKILL_FLAG_PLAGIARIZED) {
-						clif_deleteskill(tsd,tsd->status.skill[tsd->cloneskill_idx].id, true);
+						clif_deleteskill(*tsd,tsd->status.skill[tsd->cloneskill_idx].id, true);
 						tsd->status.skill[tsd->cloneskill_idx].id = 0;
 						tsd->status.skill[tsd->cloneskill_idx].lv = 0;
 						tsd->status.skill[tsd->cloneskill_idx].flag = SKILL_FLAG_PERMANENT;
@@ -3415,7 +3415,7 @@ static void skill_do_copy(struct block_list* src,struct block_list *bl, uint16 s
 					//Skill level copied depends on Reproduce skill that used
 					lv = (tsc) ? tsc->getSCE(SC__REPRODUCE)->val1 : 1;
 					if( tsd->reproduceskill_idx > 0 && tsd->status.skill[tsd->reproduceskill_idx].flag == SKILL_FLAG_PLAGIARIZED ) {
-						clif_deleteskill(tsd,tsd->status.skill[tsd->reproduceskill_idx].id, true);
+						clif_deleteskill(*tsd,tsd->status.skill[tsd->reproduceskill_idx].id, true);
 						tsd->status.skill[tsd->reproduceskill_idx].id = 0;
 						tsd->status.skill[tsd->reproduceskill_idx].lv = 0;
 						tsd->status.skill[tsd->reproduceskill_idx].flag = SKILL_FLAG_PERMANENT;

+ 1 - 1
src/map/status.cpp

@@ -4914,7 +4914,7 @@ int status_calc_pc_sub(map_session_data* sd, uint8 opt)
 		// Client doesn't delete unavailable skills even if we refresh the skill tree, individually delete them.
 		for (i = 0; i < MAX_SKILL; i++) {
 			if (b_skill[i].id != 0 && sd->status.skill[i].id == 0)
-				clif_deleteskill(sd, b_skill[i].id, true);
+				clif_deleteskill(*sd, b_skill[i].id, true);
 		}
 #endif
 		clif_skillinfoblock(sd);