summaryrefslogtreecommitdiff
path: root/network_server.c
diff options
context:
space:
mode:
authorDarkvater <darkvater@openttd.org>2006-01-31 22:16:15 +0000
committerDarkvater <darkvater@openttd.org>2006-01-31 22:16:15 +0000
commitf2448ebfd4324b0c914e36b81801fc1ffa04da94 (patch)
tree763ef198108c0320af48fbac22bf9c998430da2d /network_server.c
parent9d07426a29817fbaddcb8f8c726e16a32bb123d0 (diff)
downloadopenttd-f2448ebfd4324b0c914e36b81801fc1ffa04da94.tar.xz
(svn r3500) - Workaround the inaccurate count of spectators/companies that can happen in certain border-cases. For now just dynamically get this value when requested so it is always right. To do properly all player/client creation/destruction needs a hook for networking.
Diffstat (limited to 'network_server.c')
-rw-r--r--network_server.c14
1 files changed, 3 insertions, 11 deletions
diff --git a/network_server.c b/network_server.c
index ff94a461a..a8172f48f 100644
--- a/network_server.c
+++ b/network_server.c
@@ -74,12 +74,7 @@ DEF_SERVER_SEND_COMMAND(PACKET_SERVER_COMPANY_INFO)
Player *player;
Packet *p;
- byte active = 0;
-
- FOR_ALL_PLAYERS(player) {
- if (player->is_active)
- active++;
- }
+ byte active = ActivePlayerCount();
if (active == 0) {
Packet *p = NetworkSend_Init(PACKET_SERVER_COMPANY_INFO);
@@ -214,15 +209,12 @@ DEF_SERVER_SEND_COMMAND(PACKET_SERVER_WELCOME)
Packet *p;
const NetworkClientState *new_cs;
- const NetworkClientInfo *ci = DEREF_CLIENT_INFO(cs);
// Invalid packet when status is AUTH or higher
if (cs->status >= STATUS_AUTH) return;
cs->status = STATUS_AUTH;
_network_game_info.clients_on++;
- /* increment spectator; defer company addition for when player is actually created */
- if (ci->client_playas == OWNER_SPECTATOR) _network_game_info.spectators_on++;
p = NetworkSend_Init(PACKET_SERVER_WELCOME);
NetworkSend_uint16(p, cs->index);
@@ -615,13 +607,13 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_JOIN)
// join another company does not affect these values
switch (playas) {
case 0: /* New company */
- if (_network_game_info.companies_on >= _network_game_info.companies_max) {
+ if (ActivePlayerCount() >= _network_game_info.companies_max) {
SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_FULL);
return;
}
break;
case OWNER_SPECTATOR: /* Spectator */
- if (_network_game_info.spectators_on >= _network_game_info.spectators_max) {
+ if (NetworkSpectatorCount() >= _network_game_info.spectators_max) {
SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_FULL);
return;
}