Fixes script command resetskill
* Follow up to dca3797. * Resolves a missing skill index lookup during skill reset. Thanks to @mmanlapat!
This commit is contained in:
parent
201d6c4c5b
commit
ecd2a9af87
@ -7721,8 +7721,8 @@ int pc_resetskill(struct map_session_data* sd, int flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (const auto &skill : skill_db) {
|
for (const auto &skill : skill_db) {
|
||||||
uint8 lv = sd->status.skill[i].lv;
|
uint16 skill_id = skill.second->nameid, idx = skill_get_index(skill_id);
|
||||||
uint16 skill_id = skill.second->nameid;
|
uint8 lv = sd->status.skill[idx].lv;
|
||||||
|
|
||||||
if (lv == 0 || skill_id == 0)
|
if (lv == 0 || skill_id == 0)
|
||||||
continue;
|
continue;
|
||||||
@ -7733,8 +7733,8 @@ int pc_resetskill(struct map_session_data* sd, int flag)
|
|||||||
// Don't reset trick dead if not a novice/baby
|
// Don't reset trick dead if not a novice/baby
|
||||||
if( skill_id == NV_TRICKDEAD && (sd->class_&MAPID_UPPERMASK) != MAPID_NOVICE )
|
if( skill_id == NV_TRICKDEAD && (sd->class_&MAPID_UPPERMASK) != MAPID_NOVICE )
|
||||||
{
|
{
|
||||||
sd->status.skill[i].lv = 0;
|
sd->status.skill[idx].lv = 0;
|
||||||
sd->status.skill[i].flag = SKILL_FLAG_PERMANENT;
|
sd->status.skill[idx].flag = SKILL_FLAG_PERMANENT;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7742,7 +7742,7 @@ int pc_resetskill(struct map_session_data* sd, int flag)
|
|||||||
if (skill_id == NV_BASIC && (sd->class_&MAPID_UPPERMASK) != MAPID_NOVICE )
|
if (skill_id == NV_BASIC && (sd->class_&MAPID_UPPERMASK) != MAPID_NOVICE )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if( sd->status.skill[i].flag == SKILL_FLAG_PERM_GRANTED )
|
if( sd->status.skill[idx].flag == SKILL_FLAG_PERM_GRANTED )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if( flag&4 && !skill_ischangesex(skill_id) )
|
if( flag&4 && !skill_ischangesex(skill_id) )
|
||||||
@ -7752,21 +7752,21 @@ int pc_resetskill(struct map_session_data* sd, int flag)
|
|||||||
{ //Only handle quest skills in a special way when you can't learn them manually
|
{ //Only handle quest skills in a special way when you can't learn them manually
|
||||||
if( battle_config.quest_skill_reset && !(flag&2) )
|
if( battle_config.quest_skill_reset && !(flag&2) )
|
||||||
{ //Wipe them
|
{ //Wipe them
|
||||||
sd->status.skill[i].lv = 0;
|
sd->status.skill[idx].lv = 0;
|
||||||
sd->status.skill[i].flag = SKILL_FLAG_PERMANENT;
|
sd->status.skill[idx].flag = SKILL_FLAG_PERMANENT;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if( sd->status.skill[i].flag == SKILL_FLAG_PERMANENT )
|
if( sd->status.skill[idx].flag == SKILL_FLAG_PERMANENT )
|
||||||
skill_point += lv;
|
skill_point += lv;
|
||||||
else
|
else
|
||||||
if( sd->status.skill[i].flag >= SKILL_FLAG_REPLACED_LV_0 )
|
if( sd->status.skill[idx].flag >= SKILL_FLAG_REPLACED_LV_0 )
|
||||||
skill_point += (sd->status.skill[i].flag - SKILL_FLAG_REPLACED_LV_0);
|
skill_point += (sd->status.skill[idx].flag - SKILL_FLAG_REPLACED_LV_0);
|
||||||
|
|
||||||
if( !(flag&2) )
|
if( !(flag&2) )
|
||||||
{// reset
|
{// reset
|
||||||
sd->status.skill[i].lv = 0;
|
sd->status.skill[idx].lv = 0;
|
||||||
sd->status.skill[i].flag = SKILL_FLAG_PERMANENT;
|
sd->status.skill[idx].flag = SKILL_FLAG_PERMANENT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user