Radical change (please test): allow sv_cmd commands in server.cfg; automatically...
authordiv0 <div0@f962a42d-fe04-0410-a3ab-8c8b0445ebaa>
Fri, 6 Mar 2009 09:40:41 +0000 (09:40 +0000)
committerdiv0 <div0@f962a42d-fe04-0410-a3ab-8c8b0445ebaa>
Fri, 6 Mar 2009 09:40:41 +0000 (09:40 +0000)
This is done by making a tiny bsp file _init/_init.bsp that causes server initialization to take place.

Result: aggressor is no longer forcefully loaded as first map, so servers should start up a little faster now.

git-svn-id: svn://svn.icculus.org/nexuiz/trunk@6053 f962a42d-fe04-0410-a3ab-8c8b0445ebaa

data/defaultNexuiz.cfg
data/maps/_init/_init.bsp [new file with mode: 0644]
data/maps/_init/_init.map [new file with mode: 0644]
data/qcsrc/server/g_world.qc
data/server.cfg [new file with mode: 0644]
server/server_havoc_linux.sh
server/server_havoc_mac.sh
server/server_havoc_windows.bat
server/server_linux.sh
server/server_mac.sh
server/server_windows.bat

index 87b9779..2f0e95d 100644 (file)
@@ -736,7 +736,7 @@ sv_sound_watersplash ""
 seta cl_hitsound 1
 
 // startmap_dm is used when running with the -listen or -dedicated commandline options
-alias startmap_dm "set _sv_init 1; map aggressor"
+alias startmap_dm "set _sv_init 0; map _init/_init; exec server.cfg; set _sv_init 1"
 
 // aliases:
 alias +attack2 +button3
diff --git a/data/maps/_init/_init.bsp b/data/maps/_init/_init.bsp
new file mode 100644 (file)
index 0000000..fc9e04c
Binary files /dev/null and b/data/maps/_init/_init.bsp differ
diff --git a/data/maps/_init/_init.map b/data/maps/_init/_init.map
new file mode 100644 (file)
index 0000000..2dcb4cb
--- /dev/null
@@ -0,0 +1,12 @@
+{
+"classname" "__init_dedicated_server"
+// brush 0
+{
+( 0 0 0 ) ( 0 1 0 ) ( 0 0 1 ) common/caulk 0 0 0 0.5 0.5 0 0 0
+( 0 0 0 ) ( 1 0 0 ) ( 0 1 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
+( 0 0 0 ) ( 0 0 1 ) ( 1 0 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
+( 1 1 1 ) ( 1 1 0 ) ( 1 0 1 ) common/caulk 0 0 0 0.5 0.5 0 0 0
+( 1 1 1 ) ( 1 0 1 ) ( 0 1 1 ) common/caulk 0 0 0 0.5 0.5 0 0 0
+( 1 1 1 ) ( 0 1 1 ) ( 1 1 0 ) common/caulk 0 0 0 0.5 0.5 0 0 0
+}
+}
index 3364c39..ae53d22 100644 (file)
@@ -131,27 +131,38 @@ void timeoutHandler_Think() {
        }
 }
 
-float GotoFirstMap()
+void GotoFirstMap()
 {
        if(cvar("_sv_init"))
        {
-               cvar_set("_sv_init", "0");
+               // cvar_set("_sv_init", "0");
+               // we do NOT set this to 0 any more, so someone "accidentally" changing
+               // to this "init" map on a dedicated server will cause no permanent
+               // harm
                if(cvar("g_maplist_shuffle"))
                        ShuffleMaplist();
                tokenizebyseparator(cvar_string("g_maplist"), " ");
-               {
-                       cvar_set("nextmap", argv(0));
 
-                       MapInfo_Enumerate();
-                       MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), 0, (g_maplist_allow_hidden ? MAPINFO_FLAG_HIDDEN : 0), 0);
+               cvar_set("nextmap", argv(0));
 
-                       if(!DoNextMapOverride())
-                               GotoNextMap();
+               MapInfo_Enumerate();
+               MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), 0, (g_maplist_allow_hidden ? MAPINFO_FLAG_HIDDEN : 0), 0);
 
-                       return 1;
-               }
+               if(!DoNextMapOverride())
+                       GotoNextMap();
+
+               return;
+       }
+
+       if(time < 5)
+       {
+               self.nextthink = time;
+       }
+       else
+       {
+               self.nextthink = time + 1;
+               print("Waiting for _sv_init being set to 1 by initialization scripts...\n");
        }
-       return 0;
 }
 
 void cvar_changes_init()
@@ -326,6 +337,25 @@ void RandomSeed_Spawn()
        self = oldself;
 }
 
+void spawnfunc___init_dedicated_server(void)
+{
+       // handler for _init/_init map (only for dedicated server initialization)
+
+       dprint_load(); // load dprint status from cvar
+       world_initialized = -1; // don't complain
+       remove = remove_unsafely;
+
+       entity e;
+       e = spawn();
+       e.think = GotoFirstMap;
+       e.nextthink = time; // this is usually 1 at this point
+
+       e = spawn();
+       e.classname = "info_player_deathmatch"; // safeguard against player joining
+
+       self.classname = "worldspawn"; // safeguard against various stuff ;)
+}
+
 void Map_MarkAsRecent(string m);
 float world_already_spawned;
 void RegisterWeapons();
@@ -367,12 +397,6 @@ void spawnfunc_worldspawn (void)
        // needs to be done so early as they would still spawn
        RegisterWeapons();
 
-       if(GotoFirstMap())
-       {
-               world_initialized = -1; // don't complain
-               return;
-       }
-
        if(sv_cheats)
                ServerProgsDB = db_create();
        else
diff --git a/data/server.cfg b/data/server.cfg
new file mode 100644 (file)
index 0000000..5cac170
--- /dev/null
@@ -0,0 +1,8 @@
+echo
+echo You have not written any server.cfg file yet.
+echo The server will therefore run at default settings.
+echo
+echo For information on how to set up a dedicated server,
+echo look at the files in the server/ subdirectory of your
+echo Nexuiz install.
+echo
index 6dd6d27..9ce82ac 100755 (executable)
@@ -6,4 +6,4 @@ case "$(uname -m)" in
 esac
 
 cd "`dirname "${0}"`"
-exec ./${executable} -game havoc +exec server.cfg "${@}"
+exec ./${executable} -game havoc "${@}"
index 7d6ed98..9c1819f 100755 (executable)
@@ -3,4 +3,4 @@
 executable="nexuiz-osx-dedicated"
 
 cd "`dirname "${0}"`"
-exec ./${executable} -game havoc +exec server.cfg "${@}"
+exec ./${executable} -game havoc "${@}"
index 7848422..3b51ae1 100644 (file)
@@ -5,4 +5,4 @@ set executable=nexuiz -dedicated
 \r
 %~d0\r
 cd "%~p0"\r
-.\%executable% -game havoc +exec server.cfg %*\r
+.\%executable% -game havoc %*\r
index 58b6a19..e2dee7a 100755 (executable)
@@ -6,4 +6,4 @@ case "$(uname -m)" in
 esac
 
 cd "`dirname "${0}"`"
-exec ./${executable} +exec server.cfg "${@}"
+exec ./${executable} "${@}"
index 5124012..c649493 100755 (executable)
@@ -3,4 +3,4 @@
 executable="nexuiz-osx-dedicated"
 
 cd "`dirname "${0}"`"
-exec ./${executable} +exec server.cfg "${@}"
+exec ./${executable} "${@}"
index 8850825..f5a1c68 100644 (file)
@@ -5,4 +5,4 @@ set executable=nexuiz -dedicated
 \r
 %~d0\r
 cd "%~p0"\r
-.\%executable% +exec server.cfg %*\r
+.\%executable% %*\r