diff --git a/src/d_clisrv.c b/src/d_clisrv.c index cdfd1a064..099cd7269 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -98,6 +98,7 @@ boolean server = true; // true or false but !server == client #define client (!server) boolean nodownload = false; boolean serverrunning = false; +boolean connectedtodedicated = false; INT32 serverplayer = 0; char motd[254], server_context[8]; // Message of the Day, Unique Context (even without Mumble support) @@ -1141,6 +1142,7 @@ static boolean SV_SendServerConfig(INT32 node) netbuffer->u.servercfg.gamestate = (UINT8)gamestate; netbuffer->u.servercfg.gametype = (UINT8)gametype; netbuffer->u.servercfg.modifiedgame = (UINT8)modifiedgame; + netbuffer->u.servercfg.dedicated = (boolean)dedicated; netbuffer->u.servercfg.maxplayer = (UINT8)(min((dedicated ? MAXPLAYERS-1 : MAXPLAYERS), cv_maxplayers.value)); netbuffer->u.servercfg.allownewplayer = cv_allownewplayer.value; @@ -2569,6 +2571,8 @@ static void Command_connect(void) // we don't request a restart unless the filelist differs server = false; + connectedtodedicated = false; + /* if (!stricmp(COM_Argv(1), "self")) { @@ -2780,6 +2784,7 @@ void CL_Reset(void) multiplayer = false; servernode = 0; server = true; + connectedtodedicated = false; doomcom->numnodes = 1; doomcom->numslots = 1; SV_StopServer(); @@ -4058,6 +4063,11 @@ boolean Playing(void) return (server && serverrunning) || (client && cl_mode == CL_CONNECTED); } +boolean InADedicatedServer(void) +{ + return Playing() && (dedicated || connectedtodedicated); +} + boolean SV_SpawnServer(void) { // Screw Testers mode, worst idea ever. @@ -4124,6 +4134,7 @@ void SV_StartSinglePlayerServer(INT32 dogametype, boolean donetgame) INT32 lastgametype = gametype; server = true; multiplayer = (modeattacking == ATTACKING_NONE) && !grandprixinfo.gp; // G: no multiplayer in GP! + connectedtodedicated = false; netgame = false; // so setting timelimit works... (XD_NETVAR doesn't play nice with SV_StopServer) @@ -4696,6 +4707,7 @@ static void HandlePacketFromAwayNode(SINT8 node) G_SetGametype(netbuffer->u.servercfg.gametype); modifiedgame = netbuffer->u.servercfg.modifiedgame; + connectedtodedicated = netbuffer->u.servercfg.dedicated; memcpy(server_context, netbuffer->u.servercfg.server_context, 8); diff --git a/src/d_clisrv.h b/src/d_clisrv.h index d0799c1e2..a7943dace 100644 --- a/src/d_clisrv.h +++ b/src/d_clisrv.h @@ -207,6 +207,7 @@ struct serverconfig_pak UINT8 gametype; UINT8 modifiedgame; + boolean dedicated; char server_context[8]; // Unique context id, generated at server startup. @@ -443,6 +444,7 @@ extern boolean server; extern boolean serverrunning; #define client (!server) extern boolean dedicated; // For dedicated server +extern boolean connectedtodedicated; // Client that is connected to a dedicated server. extern UINT16 software_MAXPACKETLENGTH; extern boolean acceptnewnode; extern SINT8 servernode; @@ -544,6 +546,7 @@ void CL_UpdateServerList(void); void CL_TimeoutServerList(void); // Is there a game running boolean Playing(void); +boolean InADedicatedServer(void); void CopyCaretColors (char *p, const char *s, int n); diff --git a/src/d_main.cpp b/src/d_main.cpp index 382ab5d39..06fa3e4bd 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -928,6 +928,7 @@ void D_SRB2Loop(void) if (dedicated) server = true; + connectedtodedicated = dedicated; // Pushing of + parameters is now done back in D_SRB2Main, not here. @@ -1438,6 +1439,7 @@ void D_SRB2Main(void) // for dedicated server dedicated = M_CheckParm("-dedicated") != 0; + connectedtodedicated = dedicated; if (devparm) CONS_Printf(M_GetText("Development mode ON.\n")); diff --git a/src/i_tcp.c b/src/i_tcp.c index 5cc6940b5..3cfd7fee0 100644 --- a/src/i_tcp.c +++ b/src/i_tcp.c @@ -1682,6 +1682,7 @@ boolean I_InitTcpNetwork(void) if (M_CheckParm("-server") || dedicated) { server = true; + connectedtodedicated = dedicated; // If a number of clients (i.e. nodes) is specified, the server will wait for the clients // to connect before starting. diff --git a/src/k_bot.cpp b/src/k_bot.cpp index cc1755de8..dee535ab8 100644 --- a/src/k_bot.cpp +++ b/src/k_bot.cpp @@ -235,7 +235,7 @@ void K_UpdateMatchRaceBots(void) { const UINT16 defaultbotskin = K_BotDefaultSkin(); UINT8 difficulty; - UINT8 pmax = (dedicated ? MAXPLAYERS-1 : MAXPLAYERS); + UINT8 pmax = (InADedicatedServer() ? MAXPLAYERS-1 : MAXPLAYERS); UINT8 numplayers = 0; UINT8 numbots = 0; UINT8 numwaiting = 0; @@ -349,12 +349,7 @@ void K_UpdateMatchRaceBots(void) if (numbots < wantedbots) { // We require MORE bots! - UINT8 newplayernum = 0; - - if (dedicated) - { - newplayernum = 1; - } + UINT8 newplayernum = InADedicatedServer() ? 1 : 0; for (i = 0; i < usableskins; i++) { diff --git a/src/sdl/i_net.c b/src/sdl/i_net.c index ee4a34c13..9dd87e48d 100644 --- a/src/sdl/i_net.c +++ b/src/sdl/i_net.c @@ -363,6 +363,7 @@ boolean I_InitNetwork(void) if (M_CheckParm("-server") || dedicated) { server = true; + connectedtodedicated = dedicated; // If a number of clients (i.e. nodes) is specified, the server will wait for the clients // to connect before starting.