summaryrefslogtreecommitdiff
path: root/src/network/network.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2009-05-06 15:06:57 +0000
committerrubidium <rubidium@openttd.org>2009-05-06 15:06:57 +0000
commit2664f2a2d95dbc2122ff1f9b96e8569ae401892f (patch)
treefb2112ce7a51edd259190186790bf00319a53510 /src/network/network.cpp
parentbb121a1510fbd3faea71b794b1f6bdaba1641665 (diff)
downloadopenttd-2664f2a2d95dbc2122ff1f9b96e8569ae401892f.tar.xz
(svn r16242) -Codechange: rework pausing
-Fix [FS#2864]: autopause and manual pausing conflict with eachother -Fix: new game + pause on new game + autopause make the game not unpause on the first join
Diffstat (limited to 'src/network/network.cpp')
-rw-r--r--src/network/network.cpp20
1 files changed, 7 insertions, 13 deletions
diff --git a/src/network/network.cpp b/src/network/network.cpp
index cb49c1ea0..dc025dad1 100644
--- a/src/network/network.cpp
+++ b/src/network/network.cpp
@@ -345,24 +345,20 @@ static uint NetworkCountActiveClients()
return count;
}
-static bool _min_active_clients_paused = false;
-
/* Check if the minimum number of active clients has been reached and pause or unpause the game as appropriate */
static void CheckMinActiveClients()
{
- if (!_network_dedicated) return;
+ if (!_network_dedicated || _settings_client.network.min_active_clients == 0) return;
if (NetworkCountActiveClients() < _settings_client.network.min_active_clients) {
- if (_min_active_clients_paused) return;
+ if ((_pause_mode & PM_PAUSED_NORMAL) != 0) return;
- _min_active_clients_paused = true;
- DoCommandP(0, 1, 0, CMD_PAUSE);
+ DoCommandP(0, PM_PAUSED_NORMAL, 1, CMD_PAUSE);
NetworkServerSendChat(NETWORK_ACTION_SERVER_MESSAGE, DESTTYPE_BROADCAST, 0, "", CLIENT_ID_SERVER, NETWORK_SERVER_MESSAGE_GAME_PAUSED_PLAYERS);
} else {
- if (!_min_active_clients_paused) return;
+ if (_pause_mode == PM_UNPAUSED) return;
- _min_active_clients_paused = false;
- DoCommandP(0, 0, 0, CMD_PAUSE);
+ DoCommandP(0, PM_PAUSED_NORMAL, 0, CMD_PAUSE);
NetworkServerSendChat(NETWORK_ACTION_SERVER_MESSAGE, DESTTYPE_BROADCAST, 0, "", CLIENT_ID_SERVER, NETWORK_SERVER_MESSAGE_GAME_UNPAUSED_PLAYERS);
}
}
@@ -464,8 +460,8 @@ void NetworkCloseClient(NetworkClientSocket *cs)
}
/* When the client was PRE_ACTIVE, the server was in pause mode, so unpause */
- if (cs->status == STATUS_PRE_ACTIVE && _settings_client.network.pause_on_join) {
- DoCommandP(0, 0, 0, CMD_PAUSE);
+ if (cs->status == STATUS_PRE_ACTIVE && _pause_mode & PM_PAUSED_JOIN) {
+ DoCommandP(0, PM_PAUSED_JOIN, 0, CMD_PAUSE);
NetworkServerSendChat(NETWORK_ACTION_SERVER_MESSAGE, DESTTYPE_BROADCAST, 0, "", CLIENT_ID_SERVER, NETWORK_SERVER_MESSAGE_GAME_UNPAUSED_CONNECT_FAIL);
}
@@ -794,8 +790,6 @@ bool NetworkServerStart()
/* if the server is dedicated ... add some other script */
if (_network_dedicated) IConsoleCmdExec("exec scripts/on_dedicated.scr 0");
- _min_active_clients_paused = false;
-
/* Try to register us to the master server */
_network_last_advertise_frame = 0;
_network_need_advertise = true;