Removed the wtf-y mmo_char_fromsql_short() from r2527

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@10578 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
ultramage
2007-05-19 11:19:35 +00:00
parent 7f756c7581
commit 6e24df08ec
4 changed files with 87 additions and 211 deletions

View File

@@ -870,108 +870,100 @@ int memitemdata_to_sql(struct itemtmp mapitem[], int count, int char_id, int tab
}
return 0;
}
#ifndef TXT_SQL_CONVERT
//=====================================================================================================
int mmo_char_fromsql(int char_id, struct mmo_charstatus *p){
int mmo_char_fromsql(int char_id, struct mmo_charstatus* p, bool load_everything)
{
int i,j, n;
double exp;
char t_msg[128];
char *str_p = tmp_sql;
struct mmo_charstatus *cp;
char t_msg[128] = "";
char* str_p = tmp_sql;
struct mmo_charstatus* cp;
memset(p, 0, sizeof(struct mmo_charstatus));
t_msg[0]= '\0';
p->char_id = char_id;
if (save_log)
ShowInfo("Char load request (%d)\n", char_id);
//`char`( `char_id`,`account_id`,`char_num`,`name`,`class`,`base_level`,`job_level`,`base_exp`,`job_exp`,`zeny`, //9
//`str`,`agi`,`vit`,`int`,`dex`,`luk`, //15
//`max_hp`,`hp`,`max_sp`,`sp`,`status_point`,`skill_point`, //21
//`option`,`karma`,`manner`,`party_id`,`guild_id`,`pet_id`, //27
//`hair`,`hair_color`,`clothes_color`,`weapon`,`shield`,`head_top`,`head_mid`,`head_bottom`, //35
//`last_map`,`last_x`,`last_y`,`save_map`,`save_x`,`save_y`)
//splite 2 parts. cause veeeery long SQL syntax
if (save_log) ShowInfo("Char load request (%d)\n", char_id);
sprintf(tmp_sql, "SELECT `char_id`,`account_id`,`char_num`,`name`,`class`,`base_level`,`job_level`,`base_exp`,`job_exp`,`zeny`,"
"`str`,`agi`,`vit`,`int`,`dex`,`luk`, `max_hp`,`hp`,`max_sp`,`sp`,`status_point`,`skill_point` FROM `%s` WHERE `char_id` = '%d'",char_db, char_id); // TBR
// read char data
sprintf(tmp_sql, "SELECT "
"`char_id`,`account_id`,`char_num`,`name`,`class`,`base_level`,`job_level`,`base_exp`,`job_exp`,`zeny`,"
"`str`,`agi`,`vit`,`int`,`dex`,`luk`,`max_hp`,`hp`,`max_sp`,`sp`,"
"`status_point`,`skill_point`,`option`,`karma`,`manner`,`party_id`,`guild_id`,`pet_id`,`homun_id`,`hair`,"
"`hair_color`,`clothes_color`,`weapon`,`shield`,`head_top`,`head_mid`,`head_bottom`,`last_map`,`last_x`,`last_y`,"
"`save_map`,`save_x`,`save_y`,`partner_id`,`father`,`mother`,`child`,`fame`"
" FROM `%s` WHERE `char_id` = '%d'", char_db, char_id);
if (mysql_query(&mysql_handle, tmp_sql)) {
ShowSQL("DB error - %s\n",mysql_error(&mysql_handle));
ShowDebug("at %s:%d - %s\n", __FILE__,__LINE__,tmp_sql);
return 0;
}
sql_res = mysql_store_result(&mysql_handle);
if (!sql_res) {
ShowError("Load char failed (%d - table %s).\n", char_id, char_db);
return 0;
}
if (sql_res) {
sql_row = mysql_fetch_row(sql_res);
if (!sql_row)
{ //Just how does this happens? [Skotlex]
ShowError("Requested non-existant character id: %d!\n", char_id);
return 0;
}
p->char_id = char_id;
p->account_id = atoi(sql_row[1]);
p->char_num = atoi(sql_row[2]);
strcpy(p->name, sql_row[3]);
p->class_ = atoi(sql_row[4]);
p->base_level = atoi(sql_row[5]);
p->job_level = atoi(sql_row[6]);
exp = atof(sql_row[7]);
p->base_exp = exp<0?0:(exp>UINT_MAX?UINT_MAX:(unsigned int)exp);
exp = atof(sql_row[8]);
p->job_exp = exp<0?0:(exp>UINT_MAX?UINT_MAX:(unsigned int)exp);
p->zeny = atoi(sql_row[9]);
p->str = atoi(sql_row[10]);
p->agi = atoi(sql_row[11]);
p->vit = atoi(sql_row[12]);
p->int_ = atoi(sql_row[13]);
p->dex = atoi(sql_row[14]);
p->luk = atoi(sql_row[15]);
p->max_hp = atoi(sql_row[16]);
p->hp = atoi(sql_row[17]);
p->max_sp = atoi(sql_row[18]);
p->sp = atoi(sql_row[19]);
p->status_point = atoi(sql_row[20]) > USHRT_MAX ? USHRT_MAX : atoi(sql_row[20]);
p->skill_point = atoi(sql_row[21]) > USHRT_MAX ? USHRT_MAX : atoi(sql_row[21]);
//free mysql result.
sql_row = mysql_fetch_row(sql_res);
if (!sql_row) { //Just how does this happens? [Skotlex]
ShowError("Requested non-existant character id: %d!\n", char_id);
mysql_free_result(sql_res);
strcat (t_msg, " status");
} else
ShowError("Load char failed (%d - table %s).\n", char_id, char_db); //Error?! ERRRRRR WHAT THAT SAY!?
sprintf(tmp_sql, "SELECT `option`,`karma`,`manner`,`party_id`,`guild_id`,`pet_id`,`hair`,`hair_color`,"
"`clothes_color`,`weapon`,`shield`,`head_top`,`head_mid`,`head_bottom`,"
"`last_map`,`last_x`,`last_y`,`save_map`,`save_x`,`save_y`, `partner_id`, `father`, `mother`, `child`, `fame`, `homun_id`" //[orn] homun_id
"FROM `%s` WHERE `char_id` = '%d'",char_db, char_id); // TBR
if (mysql_query(&mysql_handle, tmp_sql)) {
ShowSQL("DB error - %s\n",mysql_error(&mysql_handle));
ShowDebug("at %s:%d - %s\n", __FILE__,__LINE__,tmp_sql);
return 0;
}
sql_res = mysql_store_result(&mysql_handle);
sql_row = sql_res?mysql_fetch_row(sql_res):NULL;
if (sql_row) {
p->option = atoi(sql_row[0]); p->karma = atoi(sql_row[1]); p->manner = atoi(sql_row[2]);
p->party_id = atoi(sql_row[3]); p->guild_id = atoi(sql_row[4]); p->pet_id = atoi(sql_row[5]);
p->hair = atoi(sql_row[6]); p->hair_color = atoi(sql_row[7]); p->clothes_color = atoi(sql_row[8]);
p->weapon = atoi(sql_row[9]); p->shield = atoi(sql_row[10]);
p->head_top = atoi(sql_row[11]); p->head_mid = atoi(sql_row[12]); p->head_bottom = atoi(sql_row[13]);
p->last_point.map = mapindex_name2id(sql_row[14]); p->last_point.x = atoi(sql_row[15]); p->last_point.y = atoi(sql_row[16]);
p->save_point.map = mapindex_name2id(sql_row[17]); p->save_point.x = atoi(sql_row[18]); p->save_point.y = atoi(sql_row[19]);
p->partner_id = atoi(sql_row[20]); p->father = atoi(sql_row[21]); p->mother = atoi(sql_row[22]); p->child = atoi(sql_row[23]);
p->fame = atoi(sql_row[24]);
p->hom_id = atoi(sql_row[25]); //[orn] homunculus id
strcat (t_msg, " status2");
} else
ShowError("Char load failed (%d - table %s)\n", char_id, char_db); //Error?! ERRRRRR WHAT THAT SAY!?
p->char_id = char_id;
p->account_id = atoi(sql_row[1]);
p->char_num = atoi(sql_row[2]);
strncpy(p->name, sql_row[3], NAME_LENGTH-1);
p->class_ = atoi(sql_row[4]);
p->base_level = atoi(sql_row[5]);
p->job_level = atoi(sql_row[6]);
p->base_exp = (unsigned int)cap_value(atof(sql_row[7]), 0, UINT_MAX);
p->job_exp = (unsigned int)cap_value(atof(sql_row[8]), 0, UINT_MAX);
p->zeny = atoi(sql_row[9]);
p->str = atoi(sql_row[10]);
p->agi = atoi(sql_row[11]);
p->vit = atoi(sql_row[12]);
p->int_ = atoi(sql_row[13]);
p->dex = atoi(sql_row[14]);
p->luk = atoi(sql_row[15]);
p->max_hp = atoi(sql_row[16]);
p->hp = atoi(sql_row[17]);
p->max_sp = atoi(sql_row[18]);
p->sp = atoi(sql_row[19]);
p->status_point = (unsigned short)cap_value(atoi(sql_row[20]), 0, USHRT_MAX);
p->skill_point = (unsigned short)cap_value(atoi(sql_row[21]), 0, USHRT_MAX);
p->option = atoi(sql_row[22]);
p->karma = atoi(sql_row[23]);
p->manner = atoi(sql_row[24]);
p->party_id = atoi(sql_row[25]);
p->guild_id = atoi(sql_row[26]);
p->pet_id = atoi(sql_row[27]);
p->hom_id = atoi(sql_row[28]);
p->hair = atoi(sql_row[29]);
p->hair_color = atoi(sql_row[30]);
p->clothes_color = atoi(sql_row[31]);
p->weapon = atoi(sql_row[32]);
p->shield = atoi(sql_row[33]);
p->head_top = atoi(sql_row[34]);
p->head_mid = atoi(sql_row[35]);
p->head_bottom = atoi(sql_row[36]);
p->last_point.map = mapindex_name2id(sql_row[37]); p->last_point.x = atoi(sql_row[38]); p->last_point.y = atoi(sql_row[39]);
p->save_point.map = mapindex_name2id(sql_row[40]); p->save_point.x = atoi(sql_row[41]); p->save_point.y = atoi(sql_row[42]);
p->partner_id = atoi(sql_row[43]);
p->father = atoi(sql_row[44]);
p->mother = atoi(sql_row[45]);
p->child = atoi(sql_row[46]);
p->fame = atoi(sql_row[47]);
//free mysql result.
if (sql_res)
mysql_free_result(sql_res);
mysql_free_result(sql_res);
strcat (t_msg, " status");
if (!load_everything) // For quick selection of data when displaying the char menu
return 1;
//read memo data
//`memo` (`memo_id`,`char_id`,`map`,`x`,`y`)
@@ -987,7 +979,6 @@ int mmo_char_fromsql(int char_id, struct mmo_charstatus *p){
p->memo_point[i].map = mapindex_name2id(sql_row[0]);
p->memo_point[i].x=atoi(sql_row[1]);
p->memo_point[i].y=atoi(sql_row[2]);
//i ++;
}
mysql_free_result(sql_res);
strcat (t_msg, " memo");
@@ -1023,14 +1014,11 @@ int mmo_char_fromsql(int char_id, struct mmo_charstatus *p){
strcat (t_msg, " inventory");
}
//read cart.
//read cart
//`cart_inventory` (`id`,`char_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`)
str_p = tmp_sql;
str_p += sprintf(str_p, "SELECT `id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`");
for (j=0; j<MAX_SLOTS; j++)
str_p += sprintf(str_p, ", `card%d`", j);
for (j = 0; j < MAX_SLOTS; j++) str_p += sprintf(str_p, ", `card%d`", j);
str_p += sprintf(str_p, " FROM `%s` WHERE `char_id`='%d'", cart_db, char_id);
if (mysql_query(&mysql_handle, tmp_sql)) {
@@ -1071,28 +1059,9 @@ int mmo_char_fromsql(int char_id, struct mmo_charstatus *p){
mysql_free_result(sql_res);
strcat (t_msg, " skills");
}
/* Global-reg loading is now handled by the inter-server.
//global_reg
//`global_reg_value` (`char_id`, `str`, `value`)
sprintf(tmp_sql, "SELECT `str`, `value` FROM `%s` WHERE `type`=3 AND `char_id`='%d'",reg_db, char_id); // TBR
if (mysql_query(&mysql_handle, tmp_sql)) {
ShowSQL("DB error - %s\n",mysql_error(&mysql_handle));
ShowDebug("at %s:%d - %s\n", __FILE__,__LINE__,tmp_sql);
}
i = 0;
sql_res = mysql_store_result(&mysql_handle);
if (sql_res) {
for(i=0;(sql_row = mysql_fetch_row(sql_res));i++){
strcpy (p->global_reg[i].str, sql_row[0]);
strcpy (p->global_reg[i].value, sql_row[1]);
}
mysql_free_result(sql_res);
strcat (t_msg, " reg_values");
}
p->global_reg_num=i;
*/
//Shamelessly stolen from its_sparky (ie: thanks) and then assimilated by [Skotlex]
//Friend list
//Shamelessly stolen from its_sparky (ie: thanks) and then assimilated by [Skotlex]
sprintf(tmp_sql, "SELECT f.friend_account, f.friend_id, c.name FROM `%s` f LEFT JOIN `%s` c ON f.friend_account=c.account_id AND f.friend_id=c.char_id WHERE f.char_id='%d'", friend_db, char_db, char_id);
if(mysql_query(&mysql_handle, tmp_sql)){
@@ -1117,108 +1086,13 @@ int mmo_char_fromsql(int char_id, struct mmo_charstatus *p){
strcat (t_msg, " friends");
}
if (save_log)
ShowInfo("Loaded char (%d - %s): %s\n", char_id, p->name, t_msg); //ok. all data load successfuly!
if (save_log) ShowInfo("Loaded char (%d - %s): %s\n", char_id, p->name, t_msg); //ok. all data load successfuly!
cp = idb_ensure(char_db_, char_id, create_charstatus);
memcpy(cp, p, sizeof(struct mmo_charstatus));
return 1;
}
// For quick selection of data when displaying the char menu. [Skotlex]
//
int mmo_char_fromsql_short(int char_id, struct mmo_charstatus *p){
char t_msg[128];
double exp;
memset(p, 0, sizeof(struct mmo_charstatus));
t_msg[0]= '\0';
p->char_id = char_id;
// ShowInfo("Quick Char load request (%d)\n", char_id);
//`char`( `char_id`,`account_id`,`char_num`,`name`,`class`,`base_level`,`job_level`,`base_exp`,`job_exp`,`zeny`, //9
//`str`,`agi`,`vit`,`int`,`dex`,`luk`, //15
//`max_hp`,`hp`,`max_sp`,`sp`,`status_point`,`skill_point`, //21
//`option`,`karma`,`manner`,`party_id`,`guild_id`,`pet_id`, //27
//`hair`,`hair_color`,`clothes_color`,`weapon`,`shield`,`head_top`,`head_mid`,`head_bottom`, //35
//`last_map`,`last_x`,`last_y`,`save_map`,`save_x`,`save_y`)
//splite 2 parts. cause veeeery long SQL syntax
sprintf(tmp_sql, "SELECT `char_id`,`account_id`,`char_num`,`name`,`class`,`base_level`,`job_level`,`base_exp`,`job_exp`,`zeny`,"
"`str`,`agi`,`vit`,`int`,`dex`,`luk`, `max_hp`,`hp`,`max_sp`,`sp`,`status_point`,`skill_point` FROM `%s` WHERE `char_id` = '%d'",char_db, char_id); // TBR
if (mysql_query(&mysql_handle, tmp_sql)) {
ShowSQL("DB error - %s\n",mysql_error(&mysql_handle));
ShowDebug("at %s:%d - %s\n", __FILE__,__LINE__,tmp_sql);
}
sql_res = mysql_store_result(&mysql_handle);
if (sql_res) {
sql_row = mysql_fetch_row(sql_res);
if (!sql_row)
{ //Just how does this happens? [Skotlex]
ShowError("Requested non-existant character id: %d!\n", char_id);
mysql_free_result(sql_res);
return 0;
}
p->char_id = char_id;
p->account_id = atoi(sql_row[1]);
p->char_num = atoi(sql_row[2]);
strcpy(p->name, sql_row[3]);
p->class_ = atoi(sql_row[4]);
p->base_level = atoi(sql_row[5]);
p->job_level = atoi(sql_row[6]);
exp = atof(sql_row[7]);
p->base_exp = exp<0?0:(exp>UINT_MAX?UINT_MAX:(unsigned int)exp);
exp = atof(sql_row[8]);
p->job_exp = exp<0?0:(exp>UINT_MAX?UINT_MAX:(unsigned int)exp);
p->zeny = atoi(sql_row[9]);
p->str = atoi(sql_row[10]);
p->agi = atoi(sql_row[11]);
p->vit = atoi(sql_row[12]);
p->int_ = atoi(sql_row[13]);
p->dex = atoi(sql_row[14]);
p->luk = atoi(sql_row[15]);
p->max_hp = atoi(sql_row[16]);
p->hp = atoi(sql_row[17]);
p->max_sp = atoi(sql_row[18]);
p->sp = atoi(sql_row[19]);
p->status_point = atoi(sql_row[20]) > USHRT_MAX ? USHRT_MAX : atoi(sql_row[20]);
p->skill_point = atoi(sql_row[21]) > USHRT_MAX ? USHRT_MAX : atoi(sql_row[21]);
//free mysql result.
mysql_free_result(sql_res);
strcat (t_msg, " status");
} else
ShowError("Load char failed (%d - table %s).\n", char_id, char_db); //Error?! ERRRRRR WHAT THAT SAY!?
sprintf(tmp_sql, "SELECT `option`,`karma`,`manner`,`hair`,`hair_color`,"
"`clothes_color`,`weapon`,`shield`,`head_top`,`head_mid`,`head_bottom`"
"FROM `%s` WHERE `char_id` = '%d'",char_db, char_id); // TBR
if (mysql_query(&mysql_handle, tmp_sql)) {
ShowSQL("DB error - %s\n",mysql_error(&mysql_handle));
ShowDebug("at %s:%d - %s\n", __FILE__,__LINE__,tmp_sql);
}
sql_res = mysql_store_result(&mysql_handle);
sql_row = sql_res?mysql_fetch_row(sql_res):NULL;
if (sql_row) {
p->option = atoi(sql_row[0]); p->karma = atoi(sql_row[1]); p->manner = atoi(sql_row[2]);
p->hair = atoi(sql_row[3]); p->hair_color = atoi(sql_row[4]); p->clothes_color = atoi(sql_row[5]);
p->weapon = atoi(sql_row[6]); p->shield = atoi(sql_row[7]);
p->head_top = atoi(sql_row[8]); p->head_mid = atoi(sql_row[9]); p->head_bottom = atoi(sql_row[10]);
strcat (t_msg, " status2");
} else
ShowError("Char load failed (%d - table %s)\n", char_id, char_db); //Error?! ERRRRRR WHAT THAT SAY!?
//free mysql result.
if (sql_res)
mysql_free_result(sql_res);
// if (save_log) //Too much spam :/
// ShowInfo("Quick Loaded char (%d - %s): %s\n", char_id, p->name, t_msg); //ok. all data load successfuly!
return 1;
}
//==========================================================================================================
int mmo_char_sql_init(void) {
ShowInfo("Begin Initializing.......\n");
@@ -1787,7 +1661,7 @@ int mmo_char_send006b(int fd, struct char_session_data *sd) {
memset(WFIFOP(fd,4), 0, 20);// unknown bytes
for(i = 0; i < found_num; i++)
{
mmo_char_fromsql_short(sd->found_char[i], &char_dat);
mmo_char_fromsql(sd->found_char[i], &char_dat, false);
j += mmo_char_tobuf(WFIFOP(fd,j), &char_dat);
}
WFIFOW(fd,2) = j;// packet len
@@ -2737,7 +2611,7 @@ int parse_frommap(int fd)
char_data = uidb_get(char_db_,RFIFOL(fd,14));
if (char_data == NULL)
{ //Really shouldn't happen.
mmo_char_fromsql(RFIFOL(fd,14), &char_dat);
mmo_char_fromsql(RFIFOL(fd,14), &char_dat, true);
char_data = &char_dat;
}
//Tell the new map server about this player using Kevin's new auth packet. [Skotlex]
@@ -3271,7 +3145,7 @@ int parse_char(int fd)
{
int char_id = atoi(sql_row[0]);
mysql_free_result(sql_res); //Free'd as soon as possible
mmo_char_fromsql(char_id, &char_dat);
mmo_char_fromsql(char_id, &char_dat, true);
char_dat.sex = sd->sex;
} else {
mysql_free_result(sql_res);
@@ -3419,7 +3293,7 @@ int parse_char(int fd)
int len;
WFIFOHEAD(fd,110);
WFIFOW(fd,0) = 0x6d;
mmo_char_fromsql_short(i, &char_dat); //Only the short data is needed.
mmo_char_fromsql(i, &char_dat, false); //Only the short data is needed.
len = 2 + mmo_char_tobuf(WFIFOP(fd,2), &char_dat);
WFIFOSET(fd,len);