Skip to content

Commit aec44c1

Browse files
Merge pull request #3322 from skyleo/fix-temporary-skills-not-clearing
Fix reproduceskill and cloneskill being used in checks when being zero
2 parents 71fc107 + 39f8bf7 commit aec44c1

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

src/map/pc.c

+12-4
Original file line numberDiff line numberDiff line change
@@ -1657,7 +1657,8 @@ static void pc_calc_skilltree_clear(struct map_session_data *sd)
16571657

16581658
for (i = 0; i < MAX_SKILL_DB; i++) {
16591659
if (sd->status.skill[i].flag == SKILL_FLAG_PLAGIARIZED || sd->status.skill[i].flag == SKILL_FLAG_PERM_GRANTED
1660-
|| sd->status.skill[i].id == sd->cloneskill_id || sd->status.skill[i].id == sd->reproduceskill_id) //Don't touch these
1660+
|| (sd->cloneskill_id != 0 && sd->status.skill[i].id == sd->cloneskill_id)
1661+
|| (sd->reproduceskill_id != 0 && sd->status.skill[i].id == sd->reproduceskill_id)) //Don't touch these
16611662
continue;
16621663
sd->status.skill[i].id = 0; //First clear skills.
16631664
/* permanent skills that must be re-checked */
@@ -1693,10 +1694,17 @@ static int pc_calc_skilltree(struct map_session_data *sd)
16931694
pc->calc_skilltree_clear(sd);
16941695

16951696
for (int i = 0; i < MAX_SKILL_DB; i++) {
1696-
if ((sd->status.skill[i].flag >= SKILL_FLAG_REPLACED_LV_0 && sd->status.skill[i].id != sd->cloneskill_id && sd->status.skill[i].id != sd->reproduceskill_id)
1697-
|| sd->status.skill[i].flag == SKILL_FLAG_TEMPORARY) {
1697+
if (sd->status.skill[i].flag >= SKILL_FLAG_REPLACED_LV_0) {
1698+
bool is_cloneskill = sd->cloneskill_id != 0 && sd->status.skill[i].id == sd->cloneskill_id;
1699+
bool is_reproduceskill = sd->reproduceskill_id != 0 && sd->status.skill[i].id == sd->reproduceskill_id;
1700+
if (is_cloneskill || is_reproduceskill)
1701+
continue; // Plagiarized and Reproduce Skills are kept.
1702+
16981703
// Restore original level of skills after deleting earned skills.
1699-
sd->status.skill[i].lv = (sd->status.skill[i].flag == SKILL_FLAG_TEMPORARY) ? 0 : sd->status.skill[i].flag - SKILL_FLAG_REPLACED_LV_0;
1704+
sd->status.skill[i].lv = sd->status.skill[i].flag - SKILL_FLAG_REPLACED_LV_0;
1705+
sd->status.skill[i].flag = SKILL_FLAG_PERMANENT;
1706+
} else if (sd->status.skill[i].flag == SKILL_FLAG_TEMPORARY) {
1707+
sd->status.skill[i].lv = 0;
17001708
sd->status.skill[i].flag = SKILL_FLAG_PERMANENT;
17011709
}
17021710
}

0 commit comments

Comments
 (0)