summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec>2009-03-08 17:51:13 +0000
committerultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec>2009-03-08 17:51:13 +0000
commit861b869b70a3424ab500f062bcd8f3c4cf4623ca (patch)
tree0d1a24a4d03f48d3d0a5b8ebc617d052ef026112
parent61f8a2a0670998c502684bb8ecf88e0fb4d256ab (diff)
downloadhercules-861b869b70a3424ab500f062bcd8f3c4cf4623ca.tar.gz
hercules-861b869b70a3424ab500f062bcd8f3c4cf4623ca.tar.bz2
hercules-861b869b70a3424ab500f062bcd8f3c4cf4623ca.tar.xz
hercules-861b869b70a3424ab500f062bcd8f3c4cf4623ca.zip
Fixed statpoint table-based stat reset code using 'short' instead of 'unsigned int' and messing up stat calculation (followup to r13541) (bugreport:2841).
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13573 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r--src/map/pc.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/src/map/pc.c b/src/map/pc.c
index afbbdf8bb..7de528cac 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -46,7 +46,7 @@
#define PVP_CALCRANK_INTERVAL 1000 // PVP順位計算の間隔
static unsigned int exp_table[CLASS_COUNT][2][MAX_LEVEL];
static unsigned int max_level[CLASS_COUNT][2];
-static short statp[MAX_LEVEL+1];
+static unsigned int statp[MAX_LEVEL+1];
// h-files are for declarations, not for implementations... [Shinomori]
struct skill_tree_entry skill_tree[CLASS_COUNT][MAX_SKILL_TREE];
@@ -4930,18 +4930,14 @@ int pc_resetstate(struct map_session_data* sd)
if (battle_config.use_statpoint_table)
{ // New statpoint table used here - Dexity
- int stat;
if (sd->status.base_level > MAX_LEVEL)
{ //statp[] goes out of bounds, can't reset!
ShowError("pc_resetstate: Can't reset stats of %d:%d, the base level (%d) is greater than the max level supported (%d)\n",
sd->status.account_id, sd->status.char_id, sd->status.base_level, MAX_LEVEL);
return 0;
}
- stat = statp[sd->status.base_level];
- if (sd->class_&JOBL_UPPER)
- stat+=52; // extra 52+48=100 stat points
- sd->status.status_point = stat;
+ sd->status.status_point = statp[sd->status.base_level] + ( sd->class_&JOBL_UPPER ? 52 : 0 ); // extra 52+48=100 stat points
}
else
{ //Use new stat-calculating equation [Skotlex]
@@ -4953,6 +4949,7 @@ int pc_resetstate(struct map_session_data* sd)
add += sumsp(sd->status.int_);
add += sumsp(sd->status.dex);
add += sumsp(sd->status.luk);
+
sd->status.status_point+=add;
}
@@ -7488,6 +7485,7 @@ int pc_split_atoui(char* str, unsigned int* val, char sep, int max)
int pc_readdb(void)
{
int i,j,k;
+ unsigned int stat;
FILE *fp;
char line[24000],*p;
@@ -7675,7 +7673,7 @@ int pc_readdb(void)
// スキルツリ?
memset(statp,0,sizeof(statp));
i=1;
- j=45; // base points
+ stat = 45; // base points
sprintf(line, "%s/statpoint.txt", db_path);
fp=fopen(line,"r");
if(fp == NULL){
@@ -7686,11 +7684,11 @@ int pc_readdb(void)
{
if(line[0]=='/' && line[1]=='/')
continue;
- if ((j=atoi(line))<0)
- j=0;
+ if ((stat=strtoul(line,NULL,10))<0)
+ stat=0;
if (i > MAX_LEVEL)
break;
- statp[i]=j;
+ statp[i]=stat;
i++;
}
fclose(fp);
@@ -7698,8 +7696,8 @@ int pc_readdb(void)
}
// generate the remaining parts of the db if necessary
for (; i <= MAX_LEVEL; i++) {
- j += (i+15)/5;
- statp[i] = j;
+ stat += (i+15)/5;
+ statp[i] = stat;
}
return 0;