summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/openttd.h3
-rw-r--r--src/saveload/afterload.cpp9
2 files changed, 12 insertions, 0 deletions
diff --git a/src/openttd.h b/src/openttd.h
index 7dc3f5579..35de45032 100644
--- a/src/openttd.h
+++ b/src/openttd.h
@@ -57,6 +57,9 @@ enum PauseMode {
PM_PAUSED_JOIN = 1 << 2, ///< A game paused for 'pause_on_join'
PM_PAUSED_ERROR = 1 << 3, ///< A game paused because a (critical) error
PM_PAUSED_ACTIVE_CLIENTS = 1 << 4, ///< A game paused for 'min_active_clients'
+
+ /* Pause mode bits when paused for network reasons */
+ PMB_PAUSED_NETWORK = PM_PAUSED_ACTIVE_CLIENTS | PM_PAUSED_JOIN,
};
DECLARE_ENUM_AS_BIT_SET(PauseMode);
typedef SimpleTinyEnumT<PauseMode, byte> PauseModeByte;
diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp
index 5b3e3f358..9b35c498b 100644
--- a/src/saveload/afterload.cpp
+++ b/src/saveload/afterload.cpp
@@ -411,6 +411,15 @@ bool AfterLoadGame()
/* Restore the signals */
ResetSignalHandlers();
return false;
+ } else if (!_networking || _network_server) {
+ /* If we are in single player, i.e. not networking, and loading the
+ * savegame or we are loading the savegame as network server we do
+ * not want to be bothered by being paused because of the automatic
+ * reason of a network server, e.g. joining clients or too few
+ * active clients. Note that resetting these values for a network
+ * client are very bad because then the client is going to execute
+ * the game loop when the server is not, i.e. it desyncs. */
+ _pause_mode &= ~PMB_PAUSED_NETWORK;
}
/* in very old versions, size of train stations was stored differently */