From e8affc41f106503b530abaa7faa20d6e63b727b8 Mon Sep 17 00:00:00 2001 From: Smokexyz Date: Fri, 28 Apr 2017 05:57:39 +0800 Subject: 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. --- src/char/int_storage.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/char/int_storage.h') diff --git a/src/char/int_storage.h b/src/char/int_storage.h index 8c6341e85..1f6c03f13 100644 --- a/src/char/int_storage.h +++ b/src/char/int_storage.h @@ -21,6 +21,7 @@ #ifndef CHAR_INT_STORAGE_H #define CHAR_INT_STORAGE_H +#include "common/db.h" #include "common/hercules.h" struct storage_data; @@ -30,8 +31,14 @@ struct guild_storage; * inter_storage interface **/ struct inter_storage_interface { - int (*tosql) (int account_id, struct storage_data* p); - int (*fromsql) (int account_id, struct storage_data* p); + /* */ + struct DBMap *account_storage; + /* */ + /* */ + struct DBData (*ensure_account_storage) (union DBKey key, va_list args); + int (*clear_account_storage) (union DBKey key, struct DBData *data, va_list args); + int (*tosql) (int account_id, struct storage_data *cp, const struct storage_data *p); + int (*fromsql) (int account_id, struct storage_data *p); int (*guild_storage_tosql) (int guild_id, const struct guild_storage *p); int (*guild_storage_fromsql) (int guild_id, struct guild_storage* p); int (*sql_init) (void); -- cgit v1.2.3-70-g09d2