- NPC_POWERUP now gives +40% atk per level.
- Water elementals can be frozen again. - Fixed the sc_def equation in status_change_start - Fixed an extra semi-colon that broke win32 compiles. - Some rewriting of bounds checks in @baselvup, @joblvup and the # equivalents to prevent signed/unsigned comparisons. - Now slaves give exp/loot (exception: player slaves still stick to the old rules) git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@5267 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
@@ -1262,7 +1262,8 @@ int charcommand_baselevel(
|
||||
clif_displaymessage(fd, msg_table[91]); // Character's base level can't go any higher.
|
||||
return 0;
|
||||
} // End Addition
|
||||
if (level > pc_maxbaselv(pl_sd) || level > (pc_maxbaselv(pl_sd)- (int)pl_sd->status.base_level)) // fix positiv overflow
|
||||
if ((unsigned int)level > pc_maxbaselv(pl_sd) ||
|
||||
pl_sd->status.base_level > pc_maxbaselv(pl_sd) -level)
|
||||
level = pc_maxbaselv(pl_sd) - pl_sd->status.base_level;
|
||||
for (i = 1; i <= level; i++)
|
||||
pl_sd->status.status_point += (pl_sd->status.base_level + i + 14) / 5;
|
||||
@@ -1279,16 +1280,17 @@ int charcommand_baselevel(
|
||||
clif_displaymessage(fd, msg_table[193]); // Character's base level can't go any lower.
|
||||
return -1;
|
||||
}
|
||||
if (level < -(int)pc_maxbaselv(pl_sd) || level < (1 - (int)pl_sd->status.base_level)) // fix negativ overflow
|
||||
level = 1 - pl_sd->status.base_level;
|
||||
level *= -1;
|
||||
if ((unsigned int)level >= pl_sd->status.base_level)
|
||||
level = pl_sd->status.base_level -1;
|
||||
if (pl_sd->status.status_point > 0) {
|
||||
for (i = 0; i > level; i--)
|
||||
pl_sd->status.status_point -= (pl_sd->status.base_level + i + 14) / 5;
|
||||
for (i = 0; i > -level; i--)
|
||||
pl_sd->status.status_point -= (pl_sd->status.base_level +i + 14) / 5;
|
||||
if (pl_sd->status.status_point < 0)
|
||||
pl_sd->status.status_point = 0;
|
||||
clif_updatestatus(pl_sd, SP_STATUSPOINT);
|
||||
} // to add: remove status points from stats
|
||||
pl_sd->status.base_level += level;
|
||||
pl_sd->status.base_level -= level;
|
||||
clif_updatestatus(pl_sd, SP_BASELEVEL);
|
||||
clif_updatestatus(pl_sd, SP_NEXTBASEEXP);
|
||||
status_calc_pc(pl_sd, 0);
|
||||
@@ -1333,7 +1335,8 @@ int charcommand_joblevel(
|
||||
clif_displaymessage(fd, msg_table[67]); // Character's job level can't go any higher.
|
||||
return -1;
|
||||
}
|
||||
if ((int)pl_sd->status.job_level + level > pc_maxjoblv(pl_sd))
|
||||
if ((unsigned int)level > pc_maxjoblv(pl_sd) ||
|
||||
pl_sd->status.job_level > pc_maxjoblv(pl_sd) -level)
|
||||
level = pc_maxjoblv(pl_sd) - pl_sd->status.job_level;
|
||||
pl_sd->status.job_level += level;
|
||||
clif_updatestatus(pl_sd, SP_JOBLEVEL);
|
||||
@@ -1348,13 +1351,14 @@ int charcommand_joblevel(
|
||||
clif_displaymessage(fd, msg_table[194]); // Character's job level can't go any lower.
|
||||
return -1;
|
||||
}
|
||||
if (pl_sd->status.job_level + level < 1)
|
||||
level = 1 - pl_sd->status.job_level;
|
||||
pl_sd->status.job_level += level;
|
||||
level*=-1;
|
||||
if ((unsigned int)level >= pl_sd->status.job_level)
|
||||
level = pl_sd->status.job_level-1;
|
||||
pl_sd->status.job_level -= level;
|
||||
clif_updatestatus(pl_sd, SP_JOBLEVEL);
|
||||
clif_updatestatus(pl_sd, SP_NEXTJOBEXP);
|
||||
if (pl_sd->status.skill_point > 0) {
|
||||
pl_sd->status.skill_point += level;
|
||||
pl_sd->status.skill_point -= level;
|
||||
if (pl_sd->status.skill_point < 0)
|
||||
pl_sd->status.skill_point = 0;
|
||||
clif_updatestatus(pl_sd, SP_SKILLPOINT);
|
||||
|
||||
Reference in New Issue
Block a user