Expanded range for cached and stored-in-db guild member exp (devotion) from uint32 to uint64. (bugreport:3983)
Capped value when sending to client to INT_MAX to prevent confusion. git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@14242 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
be4fc45134
commit
dde953ee4a
@ -3,6 +3,9 @@ Date Added
|
|||||||
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
|
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
|
||||||
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||||
|
|
||||||
|
2010/02/09
|
||||||
|
* Expanded range for cached and stored-in-db guild member exp (devotion) from uint32 to uint64. (bugreport:3983) [Paradox924X]
|
||||||
|
* Capped value when sending to client to INT_MAX to prevent confusion. [Paradox924X]
|
||||||
2010/02/07
|
2010/02/07
|
||||||
* Bleeding doesn't kill non-player characters. [Inkfish]
|
* Bleeding doesn't kill non-player characters. [Inkfish]
|
||||||
2010/02/06
|
2010/02/06
|
||||||
|
@ -182,7 +182,7 @@ CREATE TABLE IF NOT EXISTS `guild` (
|
|||||||
`connect_member` tinyint(6) unsigned NOT NULL default '0',
|
`connect_member` tinyint(6) unsigned NOT NULL default '0',
|
||||||
`max_member` tinyint(6) unsigned NOT NULL default '0',
|
`max_member` tinyint(6) unsigned NOT NULL default '0',
|
||||||
`average_lv` smallint(6) unsigned NOT NULL default '1',
|
`average_lv` smallint(6) unsigned NOT NULL default '1',
|
||||||
`exp` int(11) unsigned NOT NULL default '0',
|
`exp` bigint(20) unsigned NOT NULL default '0',
|
||||||
`next_exp` int(11) unsigned NOT NULL default '0',
|
`next_exp` int(11) unsigned NOT NULL default '0',
|
||||||
`skill_point` tinyint(11) unsigned NOT NULL default '0',
|
`skill_point` tinyint(11) unsigned NOT NULL default '0',
|
||||||
`mes1` varchar(60) NOT NULL default '',
|
`mes1` varchar(60) NOT NULL default '',
|
||||||
|
1
sql-files/upgrade_svn14241.sql
Normal file
1
sql-files/upgrade_svn14241.sql
Normal file
@ -0,0 +1 @@
|
|||||||
|
ALTER TABLE `guild` MODIFY COLUMN `exp` bigint(20) unsigned NOT NULL default '0';
|
@ -49,7 +49,7 @@ int inter_guild_tostr(char* str, struct guild* g)
|
|||||||
for(i = 0; i < g->max_member; i++)
|
for(i = 0; i < g->max_member; i++)
|
||||||
{
|
{
|
||||||
struct guild_member *m = &g->member[i];
|
struct guild_member *m = &g->member[i];
|
||||||
len += sprintf(str + len, "%d,%d,%d,%d,%d,%d,%d,%u,%d,%d\t%s\t",
|
len += sprintf(str + len, "%d,%d,%d,%d,%d,%d,%d,%llu,%d,%d\t%s\t",
|
||||||
m->account_id, m->char_id,
|
m->account_id, m->char_id,
|
||||||
m->hair, m->hair_color, m->gender,
|
m->hair, m->hair_color, m->gender,
|
||||||
m->class_, m->lv, m->exp, m->exp_payper, m->position,
|
m->class_, m->lv, m->exp, m->exp_payper, m->position,
|
||||||
@ -150,7 +150,7 @@ int inter_guild_fromstr(char* str, struct guild* g)
|
|||||||
int charid;
|
int charid;
|
||||||
int hair, hair_color, gender;
|
int hair, hair_color, gender;
|
||||||
int class_, lv;
|
int class_, lv;
|
||||||
unsigned int exp;
|
uint64 exp;
|
||||||
int exp_payper;
|
int exp_payper;
|
||||||
int position;
|
int position;
|
||||||
char name[256]; // only 24 used
|
char name[256]; // only 24 used
|
||||||
@ -160,7 +160,7 @@ int inter_guild_fromstr(char* str, struct guild* g)
|
|||||||
for( i = 0; i < g->max_member; i++ )
|
for( i = 0; i < g->max_member; i++ )
|
||||||
{
|
{
|
||||||
struct guild_member* m = &g->member[i];
|
struct guild_member* m = &g->member[i];
|
||||||
if (sscanf(str, "%d,%d,%d,%d,%d,%d,%d,%u,%d,%d\t%[^\t]\t%n",
|
if (sscanf(str, "%d,%d,%d,%d,%d,%d,%d,%llu,%d,%d\t%[^\t]\t%n",
|
||||||
&accountid, &charid, &hair, &hair_color, &gender,
|
&accountid, &charid, &hair, &hair_color, &gender,
|
||||||
&class_, &lv, &exp, &exp_payper, &position,
|
&class_, &lv, &exp, &exp_payper, &position,
|
||||||
name, &len) < 11)
|
name, &len) < 11)
|
||||||
|
@ -265,7 +265,7 @@ int inter_guild_tosql(struct guild *g,int flag)
|
|||||||
//Since nothing references guild member table as foreign keys, it's safe to use REPLACE INTO
|
//Since nothing references guild member table as foreign keys, it's safe to use REPLACE INTO
|
||||||
Sql_EscapeStringLen(sql_handle, esc_name, m->name, strnlen(m->name, NAME_LENGTH));
|
Sql_EscapeStringLen(sql_handle, esc_name, m->name, strnlen(m->name, NAME_LENGTH));
|
||||||
if( SQL_ERROR == Sql_Query(sql_handle, "REPLACE INTO `%s` (`guild_id`,`account_id`,`char_id`,`hair`,`hair_color`,`gender`,`class`,`lv`,`exp`,`exp_payper`,`online`,`position`,`name`) "
|
if( SQL_ERROR == Sql_Query(sql_handle, "REPLACE INTO `%s` (`guild_id`,`account_id`,`char_id`,`hair`,`hair_color`,`gender`,`class`,`lv`,`exp`,`exp_payper`,`online`,`position`,`name`) "
|
||||||
"VALUES ('%d','%d','%d','%d','%d','%d','%d','%d','%u','%d','%d','%d','%s')",
|
"VALUES ('%d','%d','%d','%d','%d','%d','%d','%d','%llu','%d','%d','%d','%s')",
|
||||||
guild_member_db, g->guild_id, m->account_id, m->char_id,
|
guild_member_db, g->guild_id, m->account_id, m->char_id,
|
||||||
m->hair, m->hair_color, m->gender,
|
m->hair, m->hair_color, m->gender,
|
||||||
m->class_, m->lv, m->exp, m->exp_payper, m->online, m->position, esc_name) )
|
m->class_, m->lv, m->exp, m->exp_payper, m->online, m->position, esc_name) )
|
||||||
@ -455,7 +455,7 @@ struct guild * inter_guild_fromsql(int guild_id)
|
|||||||
Sql_GetData(sql_handle, 4, &data, NULL); m->gender = atoi(data);
|
Sql_GetData(sql_handle, 4, &data, NULL); m->gender = atoi(data);
|
||||||
Sql_GetData(sql_handle, 5, &data, NULL); m->class_ = atoi(data);
|
Sql_GetData(sql_handle, 5, &data, NULL); m->class_ = atoi(data);
|
||||||
Sql_GetData(sql_handle, 6, &data, NULL); m->lv = atoi(data);
|
Sql_GetData(sql_handle, 6, &data, NULL); m->lv = atoi(data);
|
||||||
Sql_GetData(sql_handle, 7, &data, NULL); m->exp = (unsigned int)strtoul(data, NULL, 10);
|
Sql_GetData(sql_handle, 7, &data, NULL); m->exp = (uint64)strtoull(data, NULL, 10);
|
||||||
Sql_GetData(sql_handle, 8, &data, NULL); m->exp_payper = (unsigned int)atoi(data);
|
Sql_GetData(sql_handle, 8, &data, NULL); m->exp_payper = (unsigned int)atoi(data);
|
||||||
Sql_GetData(sql_handle, 9, &data, NULL); m->online = atoi(data);
|
Sql_GetData(sql_handle, 9, &data, NULL); m->online = atoi(data);
|
||||||
Sql_GetData(sql_handle, 10, &data, NULL); m->position = atoi(data);
|
Sql_GetData(sql_handle, 10, &data, NULL); m->position = atoi(data);
|
||||||
|
@ -425,7 +425,7 @@ struct map_session_data;
|
|||||||
struct guild_member {
|
struct guild_member {
|
||||||
int account_id, char_id;
|
int account_id, char_id;
|
||||||
short hair,hair_color,gender,class_,lv;
|
short hair,hair_color,gender,class_,lv;
|
||||||
unsigned int exp;
|
uint64 exp;
|
||||||
int exp_payper;
|
int exp_payper;
|
||||||
short online,position;
|
short online,position;
|
||||||
char name[NAME_LENGTH];
|
char name[NAME_LENGTH];
|
||||||
|
@ -6616,7 +6616,7 @@ int clif_guild_memberlist(struct map_session_data *sd)
|
|||||||
WFIFOW(fd,c*104+16)=m->gender;
|
WFIFOW(fd,c*104+16)=m->gender;
|
||||||
WFIFOW(fd,c*104+18)=m->class_;
|
WFIFOW(fd,c*104+18)=m->class_;
|
||||||
WFIFOW(fd,c*104+20)=m->lv;
|
WFIFOW(fd,c*104+20)=m->lv;
|
||||||
WFIFOL(fd,c*104+22)=m->exp;
|
WFIFOL(fd,c*104+22)=cap_value(m->exp,0,INT_MAX);
|
||||||
WFIFOL(fd,c*104+26)=m->online;
|
WFIFOL(fd,c*104+26)=m->online;
|
||||||
WFIFOL(fd,c*104+30)=m->position;
|
WFIFOL(fd,c*104+30)=m->position;
|
||||||
memset(WFIFOP(fd,c*104+34),0,50); // ƒ<>ƒ‚<C692>H
|
memset(WFIFOP(fd,c*104+34),0,50); // ƒ<>ƒ‚<C692>H
|
||||||
|
@ -48,7 +48,7 @@ struct eventlist {
|
|||||||
// ƒMƒ‹ƒh‚ÌEXPƒLƒƒƒbƒVƒ…
|
// ƒMƒ‹ƒh‚ÌEXPƒLƒƒƒbƒVƒ…
|
||||||
struct guild_expcache {
|
struct guild_expcache {
|
||||||
int guild_id, account_id, char_id;
|
int guild_id, account_id, char_id;
|
||||||
unsigned int exp;
|
uint64 exp;
|
||||||
};
|
};
|
||||||
static struct eri *expcache_ers; //For handling of guild exp payment.
|
static struct eri *expcache_ers; //For handling of guild exp payment.
|
||||||
|
|
||||||
@ -343,8 +343,8 @@ int guild_payexp_timer_sub(DBKey dataid, void *data, va_list ap)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g->member[i].exp > UINT_MAX - c->exp)
|
if (g->member[i].exp > UINT64_MAX - c->exp)
|
||||||
g->member[i].exp = UINT_MAX;
|
g->member[i].exp = UINT64_MAX;
|
||||||
else
|
else
|
||||||
g->member[i].exp+= c->exp;
|
g->member[i].exp+= c->exp;
|
||||||
|
|
||||||
@ -1193,13 +1193,13 @@ unsigned int guild_payexp(struct map_session_data *sd,unsigned int exp)
|
|||||||
|
|
||||||
|
|
||||||
if (per < 100)
|
if (per < 100)
|
||||||
exp = (unsigned int) exp * per / 100;
|
exp = exp * per / 100;
|
||||||
//Otherwise tax everything.
|
//Otherwise tax everything.
|
||||||
|
|
||||||
c = (struct guild_expcache*)guild_expcache_db->ensure(guild_expcache_db, i2key(sd->status.char_id), create_expcache, sd);
|
c = (struct guild_expcache*)guild_expcache_db->ensure(guild_expcache_db, i2key(sd->status.char_id), create_expcache, sd);
|
||||||
|
|
||||||
if (c->exp > UINT_MAX - exp)
|
if (c->exp > UINT64_MAX - exp)
|
||||||
c->exp = UINT_MAX;
|
c->exp = UINT64_MAX;
|
||||||
else
|
else
|
||||||
c->exp += exp;
|
c->exp += exp;
|
||||||
|
|
||||||
@ -1217,8 +1217,8 @@ int guild_getexp(struct map_session_data *sd,int exp)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
c = (struct guild_expcache*)guild_expcache_db->ensure(guild_expcache_db, i2key(sd->status.char_id), create_expcache, sd);
|
c = (struct guild_expcache*)guild_expcache_db->ensure(guild_expcache_db, i2key(sd->status.char_id), create_expcache, sd);
|
||||||
if (c->exp > UINT_MAX - exp)
|
if (c->exp > UINT64_MAX - exp)
|
||||||
c->exp = UINT_MAX;
|
c->exp = UINT64_MAX;
|
||||||
else
|
else
|
||||||
c->exp += exp;
|
c->exp += exp;
|
||||||
return exp;
|
return exp;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user