From 8893ef1ccf2c6fd392da9c71952b2a94a0b902f7 Mon Sep 17 00:00:00 2001 From: Aleos Date: Mon, 9 Apr 2018 19:31:36 -0400 Subject: [PATCH] Resolved storage saving on server crash (#3028) * Fixes #3023. * Properly save inventory and cart when closing storage and premium storages for the save_settings config. Thanks to @Encon21! --- src/map/storage.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/map/storage.cpp b/src/map/storage.cpp index ee569aa562..fade48bf55 100644 --- a/src/map/storage.cpp +++ b/src/map/storage.cpp @@ -478,6 +478,7 @@ void storage_storagesaved(struct map_session_data *sd) if (&sd->storage) sd->storage.dirty = false; + if (sd->state.storage_flag == 1) { sd->state.storage_flag = 0; clif_storageclose(sd); @@ -497,7 +498,10 @@ void storage_storageclose(struct map_session_data *sd) return; if (sd->storage.dirty) { - storage_storagesave(sd); + if (save_settings&CHARSAVE_STORAGE) + chrif_save(sd, CSAVE_INVENTORY|CSAVE_CART); + else + storage_storagesave(sd); if (sd->state.storage_flag == 1) { sd->state.storage_flag = 0; clif_storageclose(sd); @@ -521,7 +525,10 @@ void storage_storage_quit(struct map_session_data* sd, int flag) if (!&sd->storage) return; - storage_storagesave(sd); + if (save_settings&CHARSAVE_STORAGE) + chrif_save(sd, CSAVE_INVENTORY|CSAVE_CART); + else + storage_storagesave(sd); } /** @@ -1086,7 +1093,10 @@ void storage_premiumStorage_close(struct map_session_data *sd) { return; if (sd->premiumStorage.dirty) { - storage_premiumStorage_save(sd); + if (save_settings&CHARSAVE_STORAGE) + chrif_save(sd, CSAVE_INVENTORY|CSAVE_CART); + else + storage_premiumStorage_save(sd); if (sd->state.storage_flag == 3) { sd->state.storage_flag = 0; clif_storageclose(sd); @@ -1107,5 +1117,8 @@ void storage_premiumStorage_quit(struct map_session_data *sd) { if (!&sd->premiumStorage) return; - storage_premiumStorage_save(sd); + if (save_settings&CHARSAVE_STORAGE) + chrif_save(sd, CSAVE_INVENTORY|CSAVE_CART); + else + storage_premiumStorage_save(sd); }