]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/g_world.qc
Remove the precache function, mostly unused (playermodels now precache themselves...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / g_world.qc
index 07027875ee6c340f5c8e4106ec52f48b7c04e768..5ccfc97cc65fceb5cbac2ca9f0bcca40f208be63 100644 (file)
@@ -266,6 +266,7 @@ void cvar_changes_init()
                BADCVAR("g_domination");
                BADCVAR("g_domination_default_teams");
                BADCVAR("g_duel");
+               BADCVAR("g_duel_not_dm_maps");
                BADCVAR("g_freezetag");
                BADCVAR("g_freezetag_teams");
                BADCVAR("g_invasion_teams");
@@ -283,8 +284,10 @@ void cvar_changes_init()
                BADCVAR("g_race_qualifying_timelimit");
                BADCVAR("g_race_qualifying_timelimit_override");
                BADCVAR("g_runematch");
+               BADCVAR("g_shootfromeye");
                BADCVAR("g_snafu");
                BADCVAR("g_tdm");
+               BADCVAR("g_tdm_on_dm_maps");
                BADCVAR("g_tdm_teams");
                BADCVAR("g_vip");
                BADCVAR("leadlimit");
@@ -292,6 +295,8 @@ void cvar_changes_init()
                BADCVAR("teamplay");
                BADCVAR("timelimit");
                BADCVAR("g_mapinfo_ignore_warnings");
+               BADCVAR("g_maplist_ignore_sizes");
+               BADCVAR("g_maplist_sizes_count_bots");
 
                // long
                BADCVAR("hostname");
@@ -320,15 +325,18 @@ void cvar_changes_init()
                BADCVAR("captureleadlimit_override");
                BADCVAR("condump_stripcolors");
                BADCVAR("gameversion");
+               BADCVAR("fs_gamedir");
                BADCVAR("g_allow_oldvortexbeam");
                BADCVAR("g_balance_kill_delay");
                BADCVAR("g_buffs_pickup_anyway");
                BADCVAR("g_buffs_randomize");
+               BADCVAR("g_buffs_randomize_teamplay");
                BADCVAR("g_campcheck_distance");
                BADCVAR("g_ca_point_leadlimit");
                BADCVAR("g_ca_point_limit");
                BADCVAR("g_ctf_captimerecord_always");
                BADCVAR("g_ctf_flag_glowtrails");
+               BADCVAR("g_ctf_dynamiclights");
                BADCVAR("g_ctf_flag_pickup_verbosename");
                BADCVAR("g_domination_point_leadlimit");
                BADCVAR("g_forced_respawn");
@@ -339,10 +347,12 @@ void cvar_changes_init()
                BADCVAR("g_jump_grunt");
                BADCVAR("g_keyhunt_point_leadlimit");
                BADCVAR("g_nexball_goalleadlimit");
+               BADCVAR("g_new_toys_autoreplace");
                BADCVAR("g_new_toys_use_pickupsound");
                BADCVAR("g_physics_predictall");
                BADCVAR("g_piggyback");
                BADCVAR("g_playerclip_collisions");
+               BADCVAR("g_spawn_alloweffects");
                BADCVAR("g_tdm_point_leadlimit");
                BADCVAR("g_tdm_point_limit");
                BADCVAR("leadlimit_and_fraglimit");
@@ -352,6 +362,7 @@ void cvar_changes_init()
                BADCVAR("sv_damagetext");
                BADCVAR("sv_db_saveasdump");
                BADCVAR("sv_intermission_cdtrack");
+               BADCVAR("sv_mapchange_delay");
                BADCVAR("sv_minigames");
                BADCVAR("sv_namechangetimer");
                BADCVAR("sv_precacheplayermodels");
@@ -402,6 +413,7 @@ void cvar_changes_init()
                BADCVAR("g_ban_sync_uri");
                BADCVAR("g_buffs");
                BADCVAR("g_ca_teams_override");
+               BADCVAR("g_ctf_fullbrightflags");
                BADCVAR("g_ctf_ignore_frags");
                BADCVAR("g_ctf_leaderboard");
                BADCVAR("g_domination_point_limit");
@@ -421,6 +433,9 @@ void cvar_changes_init()
                BADCVAR("g_physics_clientselect");
                BADCVAR("g_pinata");
                BADCVAR("g_powerups");
+               BADCVAR("g_player_brightness");
+               BADCVAR("g_rocket_flying");
+               BADCVAR("g_rocket_flying_disabledelays");
                BADCVAR("g_spawnshieldtime");
                BADCVAR("g_start_delay");
                BADCVAR("g_superspectate");
@@ -474,6 +489,19 @@ void cvar_changes_init()
                BADCVAR("g_grappling_hook");
                BADCVAR("g_jetpack");
 
+               // temporary for testing
+               // TODO remove before 0.8.3 release
+               BADCVAR("g_ca_weaponarena");
+               BADCVAR("g_freezetag_weaponarena");
+               BADCVAR("g_lms_weaponarena");
+               BADCVAR("g_ctf_stalemate_time");
+
+               if(cvar_string("g_mod_balance") == "Testing")
+               {
+                       // (temporary) while using the Testing balance, any weapon balance cvars are allowed to be changed
+                       BADPREFIX("g_balance_");
+               }
+
 #undef BADPRESUFFIX
 #undef BADPREFIX
 #undef BADCVAR
@@ -785,8 +813,6 @@ spawnfunc(worldspawn)
                if(this.spawnflags & SPAWNFLAG_NO_WAYPOINTS_FOR_ITEMS)
                        bot_waypoints_for_items = 0;
 
-       precache();
-
        WaypointSprite_Init();
 
        GameLogInit(); // prepare everything
@@ -847,6 +873,12 @@ spawnfunc(worldspawn)
        MapInfo_Enumerate();
        MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 1);
 
+       if(fexists(strcat("scripts/", mapname, ".arena")))
+               cvar_settemp("sv_q3acompat_machineshotgunswap", "1");
+
+       if(fexists(strcat("scripts/", mapname, ".defi")))
+               cvar_settemp("sv_q3defragcompat", "1");
+
        if(whichpack(strcat("maps/", mapname, ".cfg")) != "")
        {
                int fd = fopen(strcat("maps/", mapname, ".cfg"), FILE_READ);
@@ -860,8 +892,14 @@ spawnfunc(worldspawn)
                                        continue;
                                if(argv(0) == "cd")
                                {
+                                       string trackname = argv(2);
                                        LOG_INFO("Found ^1UNSUPPORTED^7 cd loop command in .cfg file; put this line in mapinfo instead:");
-                                       LOG_INFO("  cdtrack ", argv(2));
+                                       LOG_INFO("  cdtrack ", trackname);
+                                       if (cvar_value_issafe(trackname))
+                                       {
+                                               string newstuff = strcat(clientstuff, "cd loop \"", trackname, "\"\n");
+                                               strcpy(clientstuff, newstuff);
+                                       }
                                }
                                else if(argv(0) == "fog")
                                {
@@ -947,7 +985,7 @@ spawnfunc(worldspawn)
        // physics/balance/config changes that count as mod
        if(cvar_string("g_mod_physics") != cvar_defstring("g_mod_physics"))
                modname = cvar_string("g_mod_physics");
-       if(cvar_string("g_mod_balance") != cvar_defstring("g_mod_balance"))
+       if(cvar_string("g_mod_balance") != cvar_defstring("g_mod_balance") && cvar_string("g_mod_balance") != "Testing")
                modname = cvar_string("g_mod_balance");
        if(cvar_string("g_mod_config") != cvar_defstring("g_mod_config"))
                modname = cvar_string("g_mod_config");
@@ -984,22 +1022,27 @@ float Map_Count, Map_Current;
 string Map_Current_Name;
 
 // NOTE: this now expects the map list to be already tokenized and the count in Map_Count
-float GetMaplistPosition()
+int GetMaplistPosition()
 {
-       float pos, idx;
-       string map;
-
-       map = GetMapname();
-       idx = autocvar_g_maplist_index;
+       string map = GetMapname();
+       int idx = autocvar_g_maplist_index;
 
        if(idx >= 0)
+       {
                if(idx < Map_Count)
+               {
                        if(map == argv(idx))
+                       {
                                return idx;
+                       }
+               }
+       }
 
-       for(pos = 0; pos < Map_Count; ++pos)
+       for(int pos = 0; pos < Map_Count; ++pos)
+       {
                if(map == argv(pos))
                        return pos;
+       }
 
        // resume normal maplist rotation if current map is not in g_maplist
        return idx;
@@ -1028,18 +1071,21 @@ bool MapHasRightSize(string map)
        // open map size restriction file
        string opensize_msg = strcat("opensize ", map);
        float fh = fopen(strcat("maps/", map, ".sizes"), FILE_READ);
+       int pcount = player_count;
+       if(!autocvar_g_maplist_sizes_count_bots)
+               pcount -= currentbots;
        if(fh >= 0)
        {
                opensize_msg = strcat(opensize_msg, ": ok, ");
                int mapmin = stoi(fgets(fh));
                int mapmax = stoi(fgets(fh));
                fclose(fh);
-               if(player_count < mapmin)
+               if(pcount < mapmin)
                {
                        LOG_TRACE(opensize_msg, "not enough");
                        return false;
                }
-               if(mapmax && player_count > mapmax)
+               if(mapmax && pcount > mapmax)
                {
                        LOG_TRACE(opensize_msg, "too many");
                        return false;
@@ -1202,18 +1248,25 @@ float MaplistMethod_Shuffle(float exponent) // more clever shuffling
 
 void Maplist_Init()
 {
-       Map_Count = tokenizebyseparator(autocvar_g_maplist, " ");
-       float i;
-       for (i = 0; i < Map_Count; ++i)
-               if (Map_Check(i, 2))
-                       break;
+       float i = Map_Count = 0;
+       if(autocvar_g_maplist != "")
+       {
+               Map_Count = tokenizebyseparator(autocvar_g_maplist, " ");
+               for (i = 0; i < Map_Count; ++i)
+               {
+                       if (Map_Check(i, 2))
+                               break;
+               }
+       }
+       
        if (i == Map_Count)
        {
                bprint( "Maplist contains no usable maps!  Resetting it to default map list.\n" );
                cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags() | MAPINFO_FLAG_NOAUTOMAPLIST));
                if(autocvar_g_maplist_shuffle)
                        ShuffleMaplist();
-               localcmd("\nmenu_cmd sync\n");
+               if(!server_is_dedicated)
+                       localcmd("\nmenu_cmd sync\n");
                Map_Count = tokenizebyseparator(autocvar_g_maplist, " ");
        }
        if(Map_Count == 0)
@@ -1227,10 +1280,8 @@ void Maplist_Init()
 
 string GetNextMap()
 {
-       float nextMap;
-
        Maplist_Init();
-       nextMap = -1;
+       float nextMap = -1;
 
        if(nextMap == -1)
                if(autocvar_g_maplist_shuffle > 0)
@@ -1325,9 +1376,7 @@ void GotoNextMap(float reinit)
                return;
        alreadychangedlevel = true;
 
-       string nextMap;
-
-       nextMap = GetNextMap();
+       string nextMap = GetNextMap();
        if(nextMap == "")
                error("Everything is broken - cannot find a next map. Please report this to the developers.");
        Map_Goto(reinit);
@@ -1367,54 +1416,6 @@ void IntermissionThink(entity this)
        MapVote_Start();
 }
 
-/*
-============
-FindIntermission
-
-Returns the entity to view from
-============
-*/
-/*
-entity FindIntermission()
-{
-       local   entity spot;
-       local   float cyc;
-
-// look for info_intermission first
-       spot = find(NULL, classname, "info_intermission");
-       if (spot)
-       {       // pick a random one
-               cyc = random() * 4;
-               while (cyc > 1)
-               {
-                       spot = find(spot, classname, "info_intermission");
-                       if (!spot)
-                               spot = find(spot, classname, "info_intermission");
-                       cyc = cyc - 1;
-               }
-               return spot;
-       }
-
-// then look for the start position
-       spot = find(NULL, classname, "info_player_start");
-       if (spot)
-               return spot;
-
-// testinfo_player_start is only found in regioned levels
-       spot = find(NULL, classname, "testplayerstart");
-       if (spot)
-               return spot;
-
-// then look for the start position
-       spot = find(NULL, classname, "info_player_deathmatch");
-       if (spot)
-               return spot;
-
-       //objerror ("FindIntermission: no spot");
-       return NULL;
-}
-*/
-
 /*
 ===============================================================================
 
@@ -2024,7 +2025,7 @@ string GotoMap(string m)
                return "Map switch will happen after scoreboard.";
 }
 
-bool autocvar_sv_gameplayfix_multiplethinksperframe;
+bool autocvar_sv_gameplayfix_multiplethinksperframe = true;
 void RunThink(entity this)
 {
        // don't let things stay in the past.
@@ -2053,13 +2054,13 @@ void RunThink(entity this)
 }
 
 bool autocvar_sv_freezenonclients;
-bool autocvar_sv_gameplayfix_delayprojectiles;
+bool autocvar_sv_gameplayfix_delayprojectiles = false;
 void Physics_Frame()
 {
        if(autocvar_sv_freezenonclients)
                return;
 
-       FOREACH_ENTITY_FLOAT(pure_data, false,
+       IL_EACH(g_moveables, true,
        {
                if(IS_CLIENT(it) || it.classname == "" || it.move_movetype == MOVETYPE_PUSH || it.move_movetype == MOVETYPE_FAKEPUSH || it.move_movetype == MOVETYPE_PHYSICS)
                        continue;
@@ -2085,7 +2086,7 @@ void Physics_Frame()
        if(autocvar_sv_gameplayfix_delayprojectiles >= 0)
                return;
 
-       FOREACH_ENTITY_FLOAT(move_qcphysics, true,
+       IL_EACH(g_moveables, it.move_qcphysics,
        {
                if(IS_CLIENT(it) || is_pure(it) || it.classname == "" || it.move_movetype == MOVETYPE_NONE)
                        continue;
@@ -2220,7 +2221,7 @@ void Shutdown()
                        else
                                db_save(ServerProgsDB, strcat("server.db", autocvar_sessionid));
                }
-               if(autocvar_developer)
+               if(autocvar_developer > 0)
                {
                        if(autocvar_sv_db_saveasdump)
                                db_dump(TemporaryDB, "server-temp.db");