Converted ZC_SKILLINFO_DELETE to struct (#8595)

Co-authored-by: Atemo <Atemo@users.noreply.github.com>
Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
This commit is contained in:
AoShinHo 2024-09-14 21:49:31 -03:00 committed by GitHub
parent 61b3f4a34d
commit 077f714e05
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 28 additions and 25 deletions

View File

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

View File

@ -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].id = 0;
sd->status.skill[idx].lv = 0; sd->status.skill[idx].lv = 0;
sd->status.skill[idx].flag = SKILL_FLAG_PERMANENT; 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 ) { 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].id = 0;
sd->status.skill[idx].lv = 0; sd->status.skill[idx].lv = 0;
sd->status.skill[idx].flag = SKILL_FLAG_PERMANENT; sd->status.skill[idx].flag = SKILL_FLAG_PERMANENT;
clif_deleteskill(sd,WE_CALLBABY); clif_deleteskill(*sd,WE_CALLBABY);
} }
return 0; return 0;

View File

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

View File

@ -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_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_skillinfo(map_session_data *sd,int skill_id, int inf);
void clif_addskill(map_session_data *sd, int skill_id); 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_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 ); void clif_skillcastcancel( block_list& bl );

View File

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

View File

@ -1118,6 +1118,12 @@ struct PACKET_ZC_SKILL_DISAPPEAR {
} __attribute__((packed)); } __attribute__((packed));
DEFINE_PACKET_HEADER(ZC_SKILL_DISAPPEAR, 0x120); 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 { struct PACKET_ZC_SKILL_UPDATE {
int16 packetType; int16 packetType;
uint32 GID; uint32 GID;

View File

@ -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; sd->status.skill[idx].flag = SKILL_FLAG_PERMANENT;
if (level == 0) { //Remove skill. if (level == 0) { //Remove skill.
sd->status.skill[idx].id = 0; sd->status.skill[idx].id = 0;
clif_deleteskill(sd,skill_id); clif_deleteskill(*sd,skill_id);
} else } else
clif_addskill(sd,skill_id); 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. 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; sd->status.skill[idx].flag = SKILL_FLAG_PERM_GRANTED;
if (level == 0) { //Remove skill. if (level == 0) { //Remove skill.
sd->status.skill[idx].id = 0; sd->status.skill[idx].id = 0;
clif_deleteskill(sd,skill_id); clif_deleteskill(*sd,skill_id);
} else } else
clif_addskill(sd,skill_id); 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. 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].id = 0;
sd.status.skill[idx].lv = 0; sd.status.skill[idx].lv = 0;
sd.status.skill[idx].flag = SKILL_FLAG_PERMANENT; sd.status.skill[idx].flag = SKILL_FLAG_PERMANENT;
clif_deleteskill(&sd, skill_id); clif_deleteskill(sd, skill_id);
if (type == 1) { if (type == 1) {
sd.cloneskill_idx = 0; sd.cloneskill_idx = 0;

View File

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

View File

@ -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. // Client doesn't delete unavailable skills even if we refresh the skill tree, individually delete them.
for (i = 0; i < MAX_SKILL; i++) { for (i = 0; i < MAX_SKILL; i++) {
if (b_skill[i].id != 0 && sd->status.skill[i].id == 0) 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 #endif
clif_skillinfoblock(sd); clif_skillinfoblock(sd);