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/map/pc.h | |
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/map/pc.h')
-rw-r--r-- | src/map/pc.h | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/map/pc.h b/src/map/pc.h index 482e30c41..af52f8946 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -94,6 +94,14 @@ enum pc_resetskill_flag { PCRESETSKILL_CHSEX = 0x4, // just reset the skills if the player class is a bard/dancer type (for changesex.) }; +enum pc_checkitem_types { + PCCHECKITEM_NONE = 0x0, + PCCHECKITEM_INVENTORY = 0x1, + PCCHECKITEM_CART = 0x2, + PCCHECKITEM_STORAGE = 0x4, + PCCHECKITEM_GSTORAGE = 0x8 +}; + struct weapon_data { int atkmods[3]; BEGIN_ZEROED_BLOCK; // all the variables within this block get zero'ed in each call of status_calc_pc @@ -225,7 +233,6 @@ struct map_session_data { unsigned int hold_recalc : 1; unsigned int snovice_call_flag : 3; //Summon Angel (stage 1~3) unsigned int hpmeter_visible : 1; - unsigned int itemcheck : 1; unsigned int standalone : 1;/* [Ind/Hercules <3] */ unsigned int loggingout : 1; unsigned int warp_clean : 1; @@ -251,7 +258,9 @@ struct map_session_data { unsigned int extra_temp_permissions; /* permissions from @addperm */ struct mmo_charstatus status; - struct item_data* inventory_data[MAX_INVENTORY]; // direct pointers to itemdb entries (faster than doing item_id lookups) + struct item_data *inventory_data[MAX_INVENTORY]; // direct pointers to itemdb entries (faster than doing item_id lookups) + struct storage_data storage; ///< Account Storage + enum pc_checkitem_types itemcheck; short equip_index[EQI_MAX]; unsigned int weight,max_weight; int cart_weight,cart_num,cart_weight_max; |