From 6f36f3d714a02a764e505335f8e6af79a7f4814a Mon Sep 17 00:00:00 2001 From: merni-ns <66267867+merni-ns@users.noreply.github.com> Date: Mon, 1 Apr 2024 22:27:03 +0530 Subject: [PATCH] Fix #11055: Make saveload failure error messages consistent with others (#12247) The save/load error messages were combined using string parameters, rather than using the built-in functionality of error dialogs. --- src/lang/english.txt | 4 ++-- src/openttd.cpp | 9 +++------ src/saveload/saveload.cpp | 23 ++++++++++++----------- src/saveload/saveload.h | 3 ++- 4 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index c2a4755d59..0142ed31d4 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -4899,9 +4899,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Estimate STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Saving still in progress,{}please wait until it is finished! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autosave failed STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Unable to read drive -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Game Save Failed{}{STRING1} +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Game save failed... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Unable to delete file -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Game Load Failed{}{STRING1} +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Game load failed... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Internal error: {RAW_STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Broken savegame - {RAW_STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Savegame is made with newer version diff --git a/src/openttd.cpp b/src/openttd.cpp index e4b540c45e..31b9220bbb 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1132,8 +1132,7 @@ void SwitchToMode(SwitchMode new_mode) ResetWindowSystem(); if (!SafeLoad(_file_to_saveload.name, _file_to_saveload.file_op, _file_to_saveload.detail_ftype, GM_NORMAL, NO_DIRECTORY)) { - SetDParamStr(0, GetSaveLoadErrorString()); - ShowErrorMessage(STR_JUST_RAW_STRING, INVALID_STRING_ID, WL_CRITICAL); + ShowErrorMessage(GetSaveLoadErrorType(), GetSaveLoadErrorMessage(), WL_CRITICAL); } else { if (_file_to_saveload.abstract_ftype == FT_SCENARIO) { OnStartScenario(); @@ -1175,8 +1174,7 @@ void SwitchToMode(SwitchMode new_mode) /* Cancel the saveload pausing */ Command::Post(PM_PAUSED_SAVELOAD, false); } else { - SetDParamStr(0, GetSaveLoadErrorString()); - ShowErrorMessage(STR_JUST_RAW_STRING, INVALID_STRING_ID, WL_CRITICAL); + ShowErrorMessage(GetSaveLoadErrorType(), GetSaveLoadErrorMessage(), WL_CRITICAL); } UpdateSocialIntegration(GM_EDITOR); @@ -1211,8 +1209,7 @@ void SwitchToMode(SwitchMode new_mode) case SM_SAVE_GAME: // Save game. /* Make network saved games on pause compatible to singleplayer mode */ if (SaveOrLoad(_file_to_saveload.name, SLO_SAVE, DFT_GAME_FILE, NO_DIRECTORY) != SL_OK) { - SetDParamStr(0, GetSaveLoadErrorString()); - ShowErrorMessage(STR_JUST_RAW_STRING, INVALID_STRING_ID, WL_ERROR); + ShowErrorMessage(GetSaveLoadErrorType(), GetSaveLoadErrorMessage(), WL_ERROR); } else { CloseWindowById(WC_SAVELOAD, 0); } diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index af4dfc63a6..6c7f68c49c 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -2760,22 +2760,23 @@ void SetSaveLoadError(StringID str) _sl.error_str = str; } -/** Get the string representation of the error message */ -const char *GetSaveLoadErrorString() +/** Return the appropriate initial string for an error depending on whether we are saving or loading. */ +StringID GetSaveLoadErrorType() { - SetDParam(0, _sl.error_str); - SetDParamStr(1, _sl.extra_msg); + return _sl.action == SLA_SAVE ? STR_ERROR_GAME_SAVE_FAILED : STR_ERROR_GAME_LOAD_FAILED; +} - static std::string err_str; - err_str = GetString(_sl.action == SLA_SAVE ? STR_ERROR_GAME_SAVE_FAILED : STR_ERROR_GAME_LOAD_FAILED); - return err_str.c_str(); +/** Return the description of the error. **/ +StringID GetSaveLoadErrorMessage() +{ + SetDParamStr(0, _sl.extra_msg); + return _sl.error_str; } /** Show a gui message when saving has failed */ static void SaveFileError() { - SetDParamStr(0, GetSaveLoadErrorString()); - ShowErrorMessage(STR_JUST_RAW_STRING, INVALID_STRING_ID, WL_ERROR); + ShowErrorMessage(GetSaveLoadErrorType(), GetSaveLoadErrorMessage(), WL_ERROR); SaveFileDone(); } @@ -2810,7 +2811,7 @@ static SaveOrLoadResult SaveFileToDisk(bool threaded) * cancelled due to a client disconnecting. */ if (_sl.error_str != STR_NETWORK_ERROR_LOSTCONNECTION) { /* Skip the "colour" character */ - Debug(sl, 0, "{}", GetSaveLoadErrorString() + 3); + Debug(sl, 0, "{}", GetString(GetSaveLoadErrorType()).substr(3) + GetString(GetSaveLoadErrorMessage())); asfp = SaveFileError; } @@ -3128,7 +3129,7 @@ SaveOrLoadResult SaveOrLoad(const std::string &filename, SaveLoadOperation fop, ClearSaveLoadState(); /* Skip the "colour" character */ - if (fop != SLO_CHECK) Debug(sl, 0, "{}", GetSaveLoadErrorString() + 3); + if (fop != SLO_CHECK) Debug(sl, 0, "{}", GetString(GetSaveLoadErrorType()).substr(3) + GetString(GetSaveLoadErrorMessage())); /* A saver/loader exception!! reinitialize all variables to prevent crash! */ return (fop == SLO_LOAD) ? SL_REINIT : SL_ERROR; diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 4349f038fb..05ffac1c04 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -416,7 +416,8 @@ extern FileToSaveLoad _file_to_saveload; std::string GenerateDefaultSaveName(); void SetSaveLoadError(StringID str); -const char *GetSaveLoadErrorString(); +StringID GetSaveLoadErrorType(); +StringID GetSaveLoadErrorMessage(); SaveOrLoadResult SaveOrLoad(const std::string &filename, SaveLoadOperation fop, DetailedFileType dft, Subdirectory sb, bool threaded = true); void WaitTillSaved(); void ProcessAsyncSaveFinish();