@@ -1657,7 +1657,8 @@ static void pc_calc_skilltree_clear(struct map_session_data *sd)
1657
1657
1658
1658
for (i = 0 ; i < MAX_SKILL_DB ; i ++ ) {
1659
1659
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
1661
1662
continue ;
1662
1663
sd -> status .skill [i ].id = 0 ; //First clear skills.
1663
1664
/* permanent skills that must be re-checked */
@@ -1693,10 +1694,17 @@ static int pc_calc_skilltree(struct map_session_data *sd)
1693
1694
pc -> calc_skilltree_clear (sd );
1694
1695
1695
1696
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
+
1698
1703
// 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 ;
1700
1708
sd -> status .skill [i ].flag = SKILL_FLAG_PERMANENT ;
1701
1709
}
1702
1710
}
0 commit comments