From c0896d581a8c46fee940eee571c233441a4e78c4 Mon Sep 17 00:00:00 2001 From: Paradox924X Date: Sun, 24 Jan 2010 01:13:48 +0000 Subject: Prevented pc_skill with a value of 2 for 'flag' from granting a skill level that surpasses MAX_SKILL_LEVEL. (bugreport:4022) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@14225 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/pc.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'src/map') diff --git a/src/map/pc.c b/src/map/pc.c index 56b3fd990..068e6ce8f 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -2954,6 +2954,10 @@ int pc_skill(TBL_PC* sd, int id, int level, int flag) ShowError("pc_skill: Skill level %d too high. Max lv supported is %d\n", level, MAX_SKILL_LEVEL); return 0; } + if( flag == 2 && sd->status.skill[id].lv + level > MAX_SKILL_LEVEL ) { + ShowError("pc_skill: Skill level bonus %d too high. Max lv supported is %d. Curr lv is %d\n", level, MAX_SKILL_LEVEL, sd->status.skill[id].lv); + return 0; + } switch( flag ){ case 0: //Set skill data overwriting whatever was there before. @@ -2970,16 +2974,6 @@ int pc_skill(TBL_PC* sd, int id, int level, int flag) if( !skill_get_inf(id) ) //Only recalculate for passive skills. status_calc_pc(sd, 0); break; - case 2: //Add skill bonus on top of what you had. - if( sd->status.skill[id].id == id ){ - if( !sd->status.skill[id].flag ) // Store previous level. - sd->status.skill[id].flag = sd->status.skill[id].lv + 2; - } else { - sd->status.skill[id].id = id; - sd->status.skill[id].flag = 1; //Set that this is a bonus skill. - } - sd->status.skill[id].lv += level; - break; case 1: //Item bonus skill. if( sd->status.skill[id].id == id ){ if( sd->status.skill[id].lv >= level ) @@ -2992,6 +2986,16 @@ int pc_skill(TBL_PC* sd, int id, int level, int flag) } sd->status.skill[id].lv = level; break; + case 2: //Add skill bonus on top of what you had. + if( sd->status.skill[id].id == id ){ + if( !sd->status.skill[id].flag ) // Store previous level. + sd->status.skill[id].flag = sd->status.skill[id].lv + 2; + } else { + sd->status.skill[id].id = id; + sd->status.skill[id].flag = 1; //Set that this is a bonus skill. + } + sd->status.skill[id].lv += level; + break; default: //Unknown flag? return 0; } -- cgit v1.2.3-60-g2f50