diff options
Diffstat (limited to 'src/char')
-rw-r--r-- | src/char/char.c | 30 | ||||
-rw-r--r-- | src/char/char.h | 2 | ||||
-rw-r--r-- | src/char/geoip.c | 5 | ||||
-rw-r--r-- | src/char/int_guild.c | 2 | ||||
-rw-r--r-- | src/char/int_party.c | 7 |
5 files changed, 27 insertions, 19 deletions
diff --git a/src/char/char.c b/src/char/char.c index c5afc0f63..66bfdd4ee 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -120,8 +120,6 @@ char char_achievement_db[256] = "char_achievements"; static struct char_interface char_s; struct char_interface *chr; -char db_path[1024] = "db"; - static char wisp_server_name[NAME_LENGTH] = "Server"; static char login_ip_str[128]; static uint32 login_ip = 0; @@ -3149,7 +3147,7 @@ static void char_parse_frommap_map_names(int fd, int id) static void char_send_scdata(int fd, int aid, int cid) { #ifdef ENABLE_SC_SAVING - if( SQL_ERROR == SQL->Query(inter->sql_handle, "SELECT `type`, `tick`, `val1`, `val2`, `val3`, `val4` " + if( SQL_ERROR == SQL->Query(inter->sql_handle, "SELECT `type`, `tick`, `total_tick`, `val1`, `val2`, `val3`, `val4` " "FROM `%s` WHERE `account_id` = '%d' AND `char_id`='%d'", scdata_db, aid, cid) ) { @@ -3170,10 +3168,11 @@ static void char_send_scdata(int fd, int aid, int cid) { SQL->GetData(inter->sql_handle, 0, &data, NULL); scdata.type = atoi(data); SQL->GetData(inter->sql_handle, 1, &data, NULL); scdata.tick = atoi(data); - SQL->GetData(inter->sql_handle, 2, &data, NULL); scdata.val1 = atoi(data); - SQL->GetData(inter->sql_handle, 3, &data, NULL); scdata.val2 = atoi(data); - SQL->GetData(inter->sql_handle, 4, &data, NULL); scdata.val3 = atoi(data); - SQL->GetData(inter->sql_handle, 5, &data, NULL); scdata.val4 = atoi(data); + SQL->GetData(inter->sql_handle, 2, &data, NULL); scdata.total_tick = atoi(data); + SQL->GetData(inter->sql_handle, 3, &data, NULL); scdata.val1 = atoi(data); + SQL->GetData(inter->sql_handle, 4, &data, NULL); scdata.val2 = atoi(data); + SQL->GetData(inter->sql_handle, 5, &data, NULL); scdata.val3 = atoi(data); + SQL->GetData(inter->sql_handle, 6, &data, NULL); scdata.val4 = atoi(data); memcpy(WFIFOP(fd, 14+count*sizeof(struct status_change_data)), &scdata, sizeof(struct status_change_data)); } if (count >= 50) @@ -3743,14 +3742,14 @@ static void char_parse_frommap_save_status_change_data(int fd) int i; StrBuf->Init(&buf); - StrBuf->Printf(&buf, "INSERT INTO `%s` (`account_id`, `char_id`, `type`, `tick`, `val1`, `val2`, `val3`, `val4`) VALUES ", scdata_db); + StrBuf->Printf(&buf, "INSERT INTO `%s` (`account_id`, `char_id`, `type`, `tick`, `total_tick`, `val1`, `val2`, `val3`, `val4`) VALUES ", scdata_db); for( i = 0; i < count; ++i ) { memcpy (&data, RFIFOP(fd, 14+i*sizeof(struct status_change_data)), sizeof(struct status_change_data)); if( i > 0 ) StrBuf->AppendStr(&buf, ", "); - StrBuf->Printf(&buf, "('%d','%d','%hu','%d','%d','%d','%d','%d')", aid, cid, - data.type, data.tick, data.val1, data.val2, data.val3, data.val4); + StrBuf->Printf(&buf, "('%d','%d','%hu','%d','%d','%d','%d','%d','%d')", aid, cid, + data.type, data.tick, data.total_tick, data.val1, data.val2, data.val3, data.val4); } if( SQL_ERROR == SQL->QueryStr(inter->sql_handle, StrBuf->Value(&buf)) ) Sql_ShowDebug(inter->sql_handle); @@ -3883,9 +3882,9 @@ static void char_parse_frommap_scdata_update(int fd) short type = RFIFOW(fd, 10); if (SQL_ERROR == SQL->Query(inter->sql_handle, "REPLACE INTO `%s`" - " (`account_id`,`char_id`,`type`,`tick`,`val1`,`val2`,`val3`,`val4`)" - " VALUES ('%d','%d','%d','%d','%d','%d','%d','%d')", - scdata_db, account_id, char_id, type, INFINITE_DURATION, val1, val2, val3, val4) + " (`account_id`,`char_id`,`type`,`tick`,`total_tick`,`val1`,`val2`,`val3`,`val4`)" + " VALUES ('%d','%d','%d','%d','%d','%d','%d','%d','%d')", + scdata_db, account_id, char_id, type, INFINITE_DURATION, INFINITE_DURATION, val1, val2, val3, val4) ) { Sql_ShowDebug(inter->sql_handle); } @@ -5791,7 +5790,8 @@ static bool char_config_read_database(const char *filename, const struct config_ if (autosave_interval <= 0) autosave_interval = DEFAULT_AUTOSAVE_INTERVAL; } - libconfig->setting_lookup_mutable_string(setting, "db_path", db_path, sizeof(db_path)); + libconfig->setting_lookup_mutable_string(setting, "db_path", chr->db_path, sizeof(chr->db_path)); + libconfig->set_db_path(chr->db_path); libconfig->setting_lookup_bool_real(setting, "log_char", &chr->enable_logs); return true; } @@ -6453,6 +6453,8 @@ void char_defaults(void) chr = &char_s; memset(chr->server, 0, sizeof(chr->server)); + sprintf(chr->db_path, "db"); + libconfig->set_db_path(chr->db_path); chr->login_fd = 0; chr->char_fd = -1; diff --git a/src/char/char.h b/src/char/char.h index 5de3e2a80..3b8bcff2e 100644 --- a/src/char/char.h +++ b/src/char/char.h @@ -124,6 +124,8 @@ struct char_interface { bool show_save_log; ///< Show loading/saving messages. bool enable_logs; ///< Whether to log char server operations. + char db_path[256]; //< Database directory (db) + int (*waiting_disconnect) (int tid, int64 tick, int id, intptr_t data); int (*delete_char_sql) (int char_id); struct DBData (*create_online_char_data) (union DBKey key, va_list args); diff --git a/src/char/geoip.c b/src/char/geoip.c index 2870e5f0c..67c057aff 100644 --- a/src/char/geoip.c +++ b/src/char/geoip.c @@ -23,6 +23,7 @@ #include "geoip.h" #include "common/cbasetypes.h" +#include "common/conf.h" #include "common/memmgr.h" #include "common/showmsg.h" @@ -141,7 +142,9 @@ static void geoip_init(void) geoip->data->active = true; - db = fopen("./db/GeoIP.dat","rb"); + char file_path[256]; + libconfig->format_db_path("GeoIP.dat", file_path, sizeof(file_path)); + db = fopen(file_path, "rb"); if (db == NULL) { ShowError("geoip_readdb: Error reading GeoIP.dat!\n"); geoip->final(false); diff --git a/src/char/int_guild.c b/src/char/int_guild.c index 87cb3bee0..3e9d50f8d 100644 --- a/src/char/int_guild.c +++ b/src/char/int_guild.c @@ -747,7 +747,7 @@ static int inter_guild_sql_init(void) inter_guild->castle_db = idb_alloc(DB_OPT_RELEASE_DATA); //Read exp file - sv->readdb("db", DBPATH"exp_guild.txt", ',', 1, 1, MAX_GUILDLEVEL, inter_guild->exp_parse_row); + sv->readdb(chr->db_path, DBPATH"exp_guild.txt", ',', 1, 1, MAX_GUILDLEVEL, inter_guild->exp_parse_row); timer->add_func_list(inter_guild->save_timer, "inter_guild->save_timer"); timer->add(timer->gettick() + 10000, inter_guild->save_timer, 0, 0); diff --git a/src/char/int_party.c b/src/char/int_party.c index c27d708f2..bf680c816 100644 --- a/src/char/int_party.c +++ b/src/char/int_party.c @@ -118,7 +118,6 @@ static void inter_party_calc_state(struct party_data *p) p->party.exp = 0; //Set off even share. mapif->party_optionchanged(0, &p->party, 0, 0); } - return; } // Save party to mysql @@ -472,8 +471,11 @@ static bool inter_party_leave(int party_id, int account_id, int char_id) mapif->party_withdraw(party_id, account_id, char_id); j = p->party.member[i].lv; - if (p->party.member[i].online > 0) + if (p->party.member[i].online > 0) { + p->party.member[i].online = 0; p->party.count--; + } + inter_party->tosql(&p->party, PS_DELMEMBER, i); memset(&p->party.member[i], 0, sizeof(struct party_member)); p->size--; if (j == p->min_lv || j == p->max_lv || p->family) { @@ -482,7 +484,6 @@ static bool inter_party_leave(int party_id, int account_id, int char_id) } if (inter_party->check_empty(p) == 0) { - inter_party->tosql(&p->party, PS_DELMEMBER, i); mapif->party_info(-1, &p->party, 0); } return true; |