summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lang/english.txt2
-rw-r--r--src/misc_cmd.cpp30
-rw-r--r--src/openttd.cpp2
3 files changed, 32 insertions, 2 deletions
diff --git a/src/lang/english.txt b/src/lang/english.txt
index c90dd01dc..23b1f7f35 100644
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -3116,6 +3116,8 @@ STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Matchin
STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}Compatible GRF(s) loaded for missing files
STR_NEWGRF_DISABLED_WARNING :{WHITE}Missing GRF file(s) have been disabled
STR_NEWGRF_NOT_FOUND_WARNING :{WHITE}Missing GRF file(s) to be able to load game
+STR_NEWGRF_UNPAUSE_WARNING_TITLE :{YELLOW}Missing GRF file(s)
+STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Unpausing can crash OpenTTD. Do not file bug reports for subsequent crashes.{}Do you really want to unpause?
STR_CURRENCY_WINDOW :{WHITE}Custom currency
STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Exchange rate: {ORANGE}{CURRENCY} = £ {COMMA}
diff --git a/src/misc_cmd.cpp b/src/misc_cmd.cpp
index dd7570d72..c30d62d61 100644
--- a/src/misc_cmd.cpp
+++ b/src/misc_cmd.cpp
@@ -294,6 +294,17 @@ CommandCost CmdChangePresidentName(TileIndex tile, uint32 flags, uint32 p1, uint
return CommandCost();
}
+/**
+ * In case of an unsafe unpause, we want the
+ * user to confirm that it might crash.
+ * @param w unused
+ * @param confirmed whether the user confirms his/her action
+ */
+static void AskUnsafeUnpauseCallback(Window *w, bool confirmed)
+{
+ DoCommandP(0, confirmed ? 0 : 1, 0, NULL, CMD_PAUSE);
+}
+
/** Pause/Unpause the game (server-only).
* Increase or decrease the pause counter. If the counter is zero,
* the game is unpaused. A counter is used instead of a boolean value
@@ -307,7 +318,24 @@ CommandCost CmdPause(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
if (flags & DC_EXEC) {
_pause_game += (p1 == 1) ? 1 : -1;
- if (_pause_game == (byte)-1) _pause_game = 0;
+
+ switch (_pause_game) {
+ case (byte)-4:
+ case (byte)-1:
+ _pause_game = 0;
+ break;
+ case (byte)-3:
+ ShowQuery(
+ STR_NEWGRF_UNPAUSE_WARNING_TITLE,
+ STR_NEWGRF_UNPAUSE_WARNING,
+ NULL,
+ AskUnsafeUnpauseCallback
+ );
+ break;
+
+ default: break;
+ }
+
InvalidateWindow(WC_STATUS_BAR, 0);
InvalidateWindow(WC_MAIN_TOOLBAR, 0);
}
diff --git a/src/openttd.cpp b/src/openttd.cpp
index 1e7d03ee6..6a431e629 100644
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -1357,7 +1357,7 @@ bool AfterLoadGame()
switch (gcf_res) {
case GLC_COMPATIBLE: _switch_mode_errorstr = STR_NEWGRF_COMPATIBLE_LOAD_WARNING; break;
- case GLC_NOT_FOUND: _switch_mode_errorstr = STR_NEWGRF_DISABLED_WARNING; break;
+ case GLC_NOT_FOUND: _switch_mode_errorstr = STR_NEWGRF_DISABLED_WARNING; _pause_game = (byte)-1; break;
default: break;
}