X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=host.c;h=c6b493c9bed114b7f2b71c90771d0642201c818f;hb=259805bfa4bc021a5d33c17f859e90941ad0ffdf;hp=385a1c2bbd20092067566345577d41eac7a172d1;hpb=c49d3bf46e9015474feea7c291b7f52c9095ae7c;p=xonotic%2Fdarkplaces.git diff --git a/host.c b/host.c index 385a1c2b..c6b493c9 100644 --- a/host.c +++ b/host.c @@ -166,49 +166,38 @@ void Host_ServerOptions (void) // COMMANDLINEOPTION: Server: -dedicated [playerlimit] starts a dedicated server (with a command console), default playerlimit is 8 // COMMANDLINEOPTION: Server: -listen [playerlimit] starts a multiplayer server with graphical client, like singleplayer but other players can connect, default playerlimit is 8 - if (cl_available) + // if no client is in the executable or -dedicated is specified on + // commandline, start a dedicated server + i = COM_CheckParm ("-dedicated"); + if (i || !cl_available) { - // client exists, check what mode the user wants - i = COM_CheckParm ("-dedicated"); + cls.state = ca_dedicated; + // check for -dedicated specifying how many players + if (i && i + 1 < com_argc && atoi (com_argv[i+1]) >= 1) + svs.maxclients = atoi (com_argv[i+1]); + if (COM_CheckParm ("-listen")) + Sys_Error ("Only one of -dedicated or -listen can be specified"); + // default sv_public on for dedicated servers (often hosted by serious administrators), off for listen servers (often hosted by clueless users) + Cvar_SetValue("sv_public", 1); + } + else if (cl_available) + { + // client exists and not dedicated, check if -listen is specified + cls.state = ca_disconnected; + i = COM_CheckParm ("-listen"); if (i) { - cls.state = ca_dedicated; // default players unless specified if (i + 1 < com_argc && atoi (com_argv[i+1]) >= 1) svs.maxclients = atoi (com_argv[i+1]); - if (COM_CheckParm ("-listen")) - Sys_Error ("Only one of -dedicated or -listen can be specified"); } else { - cls.state = ca_disconnected; - i = COM_CheckParm ("-listen"); - if (i) - { - // default players unless specified - if (i + 1 < com_argc && atoi (com_argv[i+1]) >= 1) - svs.maxclients = atoi (com_argv[i+1]); - } - else - { - // default players in some games, singleplayer in most - if (gamemode != GAME_GOODVSBAD2 && gamemode != GAME_NEXUIZ && gamemode != GAME_BATTLEMECH) - svs.maxclients = 1; - } + // default players in some games, singleplayer in most + if (gamemode != GAME_GOODVSBAD2 && gamemode != GAME_NEXUIZ && gamemode != GAME_BATTLEMECH) + svs.maxclients = 1; } } - else - { - // no client in the executable, always start dedicated server - if (COM_CheckParm ("-listen")) - Sys_Error ("-listen not available in a dedicated server executable"); - cls.state = ca_dedicated; - // check for -dedicated specifying how many players - i = COM_CheckParm ("-dedicated"); - // default players unless specified - if (i && i + 1 < com_argc && atoi (com_argv[i+1]) >= 1) - svs.maxclients = atoi (com_argv[i+1]); - } svs.maxclients = bound(1, svs.maxclients, MAX_SCOREBOARD); @@ -681,7 +670,7 @@ void Host_ServerFrame (void) } sv.timer += host_realframetime; - + // run the world state // don't allow simulation to run too fast or too slow or logic glitches can occur for (framecount = 0;framecount < framelimit && sv.timer > 0;framecount++) @@ -1051,6 +1040,26 @@ void Host_Init (void) Cbuf_Execute(); } + // check for special demo mode +// COMMANDLINEOPTION: Client: -demo runs a playdemo and quits + i = COM_CheckParm("-demo"); + if (i && i + 1 < com_argc) + if (!sv.active && !cls.demoplayback && !cls.connect_trying) + { + Cbuf_AddText(va("playdemo %s\n", com_argv[i + 1])); + Cbuf_Execute(); + } + + // check for special demolooponly mode +// COMMANDLINEOPTION: Client: -demolooponly runs a playdemo and quits + i = COM_CheckParm("-demolooponly"); + if (i && i + 1 < com_argc) + if (!sv.active && !cls.demoplayback && !cls.connect_trying) + { + Cbuf_AddText(va("playdemo %s\n", com_argv[i + 1])); + Cbuf_Execute(); + } + if (cls.state == ca_dedicated || COM_CheckParm("-listen")) if (!sv.active && !cls.demoplayback && !cls.connect_trying) {