diff options
author | Smokexyz <sagunkho@hotmail.com> | 2017-04-28 05:57:39 +0800 |
---|---|---|
committer | Smokexyz <sagunkho@hotmail.com> | 2017-05-22 17:55:49 +0800 |
commit | e8affc41f106503b530abaa7faa20d6e63b727b8 (patch) | |
tree | 4e4418da2e850e9ae89f357d8b396da5ec739ac4 /src/char/char.c | |
parent | 109661e3d5fb4cc6ddde9b32f8c99012c8d17bce (diff) | |
download | hercules-e8affc41f106503b530abaa7faa20d6e63b727b8.tar.gz hercules-e8affc41f106503b530abaa7faa20d6e63b727b8.tar.bz2 hercules-e8affc41f106503b530abaa7faa20d6e63b727b8.tar.xz hercules-e8affc41f106503b530abaa7faa20d6e63b727b8.zip |
Add storage_data reception, parsing and sending to/from the map-server.
Remove loading and saving of storage_data through char.c
Re-declaration of structure storage_data as a vector.
Re-code of portions in the map-server using storage_data.
A new approach is taken by saving the loaded storage data from sql into memory for the duration of the session, thereby removing the need of querying the database to re-load all items everytime a storage save routine is issued from the map-server.
Saving of storage items is done through a new function that significantly reduces the number of queries compared to char_memitemdata_tosql(), and therefore run-time speed. This method potentially reduces the number of update and delete queries from MAX_STORAGE (which could be >= 600) times to literally 1.
Storage items are stored in a dynamically allocated array and handled accordingly.
struct mmo_charstatus size reduces by 34,800 bytes.
Update pc_checkitem() with masks for item checks.
`sd->state.itemcheck` has been changed to `sd->itemcheck` of type `enum pc_checkitem_types`
`battle/items.conf` has been updated to reflect configuration changes.
Further updates to assert a successful reception of storage data in related functions.
Diffstat (limited to 'src/char/char.c')
-rw-r--r-- | src/char/char.c | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/src/char/char.c b/src/char/char.c index 93078f8ee..487bec763 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -287,11 +287,17 @@ void char_set_char_offline(int char_id, int account_id) } else { - struct mmo_charstatus* cp = (struct mmo_charstatus*)idb_get(chr->char_db_,char_id); + struct mmo_charstatus* cp = (struct mmo_charstatus*) idb_get(chr->char_db_,char_id); + struct storage_data *stor = (struct storage_data *) idb_get(inter_storage->account_storage, account_id); + inter_guild->CharOffline(char_id, cp?cp->guild_id:-1); + if (cp) idb_remove(chr->char_db_,char_id); + if (stor) /* Remove inter-storage data. */ + idb_remove(inter_storage->account_storage, account_id); + if( SQL_ERROR == SQL->Query(inter->sql_handle, "UPDATE `%s` SET `online`='0' WHERE `char_id`='%d' LIMIT 1", char_db, char_id) ) Sql_ShowDebug(inter->sql_handle); } @@ -442,14 +448,6 @@ int char_mmo_char_tosql(int char_id, struct mmo_charstatus* p) errors++; } - //map storage data - if( memcmp(p->storage.items, cp->storage.items, sizeof(p->storage.items)) ) { - if (!chr->memitemdata_to_sql(p->storage.items, MAX_STORAGE, p->account_id, TABLE_STORAGE)) - strcat(save_status, " storage"); - else - errors++; - } - if ( (p->base_exp != cp->base_exp) || (p->base_level != cp->base_level) || (p->job_level != cp->job_level) || (p->job_exp != cp->job_exp) || @@ -1284,10 +1282,6 @@ int char_mmo_char_fromsql(int char_id, struct mmo_charstatus* p, bool load_every strcat(t_msg, " cart"); - //read storage - inter_storage->fromsql(p->account_id, &p->storage); - strcat(t_msg, " storage"); - //read skill //`skill` (`char_id`, `id`, `lv`) memset(&tmp_skill, 0, sizeof(tmp_skill)); |