]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'terencehill/race_cleanups' into 'master'
authorterencehill <piuntn@gmail.com>
Sat, 13 Mar 2021 00:24:56 +0000 (01:24 +0100)
committerterencehill <piuntn@gmail.com>
Sat, 13 Mar 2021 00:30:30 +0000 (01:30 +0100)
qcsrc/common/gamemodes/gamemode/ctf/sv_ctf.qc
qcsrc/common/gamemodes/gamemode/cts/sv_cts.qc
qcsrc/common/gamemodes/gamemode/race/sv_race.qc
qcsrc/server/race.qc
qcsrc/server/race.qh
qcsrc/server/world.qc
qcsrc/server/world.qh

index 83f9d2fb644a056156fe0b3374267d1352639b1b..8ec8613cc2951428ea5bfbea15f4ba2e2e62c011 100644 (file)
@@ -2300,15 +2300,7 @@ MUTATOR_HOOKFUNCTION(ctf, ClientConnect)
 
        entity player = M_ARGV(0, entity);
 
-       if(IS_REAL_CLIENT(player))
-       {
-               int m = min(RANKINGS_CNT, autocvar_g_cts_send_rankings_cnt);
-               race_send_rankings_cnt(MSG_ONE);
-               for (int i = 1; i <= m; ++i)
-               {
-                       race_SendRankings(i, 0, 0, MSG_ONE);
-               }
-       }
+       race_SendAll(player, true);
 }
 
 MUTATOR_HOOKFUNCTION(ctf, GetPressedKeys)
@@ -2318,16 +2310,7 @@ MUTATOR_HOOKFUNCTION(ctf, GetPressedKeys)
 
        entity player = M_ARGV(0, entity);
 
-       if(CS_CVAR(player).cvar_cl_allow_uidtracking == 1 && CS_CVAR(player).cvar_cl_allow_uid2name == 1)
-       {
-               if (!player.stored_netname)
-                       player.stored_netname = strzone(uid2name(player.crypto_idfp));
-               if(player.stored_netname != player.netname)
-               {
-                       db_put(ServerProgsDB, strcat("/uid2name/", player.crypto_idfp), player.netname);
-                       strcpy(player.stored_netname, player.netname);
-               }
-       }
+       race_checkAndWriteName(player);
 }
 
 MUTATOR_HOOKFUNCTION(ctf, PortalTeleport)
@@ -2843,6 +2826,7 @@ void ctf_DelayedInit(entity this) // Do this check with a delay so we can wait f
 
 void ctf_Initialize()
 {
+       record_type = CTF_RECORD;
        ctf_captimerecord = stof(db_get(ServerProgsDB, strcat(GetMapname(), "/captimerecord/time")));
 
        ctf_captureshield_min_negscore = autocvar_g_ctf_shield_min_negscore;
index bca0d1077dd31590472242102fd478b394265c06..458465faaa260587a60563407fa72630d228c21e 100644 (file)
@@ -179,26 +179,7 @@ MUTATOR_HOOKFUNCTION(cts, ClientConnect)
        race_PreparePlayer(player);
        player.race_checkpoint = -1;
 
-       if(IS_REAL_CLIENT(player))
-       {
-               string rr = CTS_RECORD;
-
-               msg_entity = player;
-               race_send_recordtime(MSG_ONE);
-               race_send_speedaward(MSG_ONE);
-
-               speedaward_alltimebest = stof(db_get(ServerProgsDB, strcat(GetMapname(), rr, "speed/speed")));
-               speedaward_alltimebest_holder = uid2name(db_get(ServerProgsDB, strcat(GetMapname(), rr, "speed/crypto_idfp")));
-               race_send_speedaward_alltimebest(MSG_ONE);
-
-               float i;
-               int m = min(RANKINGS_CNT, autocvar_g_cts_send_rankings_cnt);
-               race_send_rankings_cnt(MSG_ONE);
-               for (i = 1; i <= m; ++i)
-               {
-                       race_SendRankings(i, 0, 0, MSG_ONE);
-               }
-       }
+       race_SendAll(player, false);
 }
 
 MUTATOR_HOOKFUNCTION(cts, AbortSpeedrun)
@@ -282,42 +263,8 @@ MUTATOR_HOOKFUNCTION(cts, GetPressedKeys)
 {
        entity player = M_ARGV(0, entity);
 
-       if(CS_CVAR(player).cvar_cl_allow_uidtracking == 1 && CS_CVAR(player).cvar_cl_allow_uid2name == 1)
-       {
-               if (!player.stored_netname)
-                       player.stored_netname = strzone(uid2name(player.crypto_idfp));
-               if(player.stored_netname != player.netname)
-               {
-                       db_put(ServerProgsDB, strcat("/uid2name/", player.crypto_idfp), player.netname);
-                       strcpy(player.stored_netname, player.netname);
-               }
-       }
-
-       if (!IS_OBSERVER(player))
-       {
-               if(vdist(player.velocity - player.velocity_z * '0 0 1', >, speedaward_speed))
-               {
-                       speedaward_speed = vlen(player.velocity - player.velocity_z * '0 0 1');
-                       speedaward_holder = player.netname;
-                       speedaward_uid = player.crypto_idfp;
-                       speedaward_lastupdate = time;
-               }
-               if (speedaward_speed > speedaward_lastsent && (time - speedaward_lastupdate > 1 || intermission_running))
-               {
-                       string rr = CTS_RECORD;
-                       race_send_speedaward(MSG_ALL);
-                       speedaward_lastsent = speedaward_speed;
-                       if (speedaward_speed > speedaward_alltimebest && speedaward_uid != "")
-                       {
-                               speedaward_alltimebest = speedaward_speed;
-                               speedaward_alltimebest_holder = speedaward_holder;
-                               speedaward_alltimebest_uid = speedaward_uid;
-                               db_put(ServerProgsDB, strcat(GetMapname(), rr, "speed/speed"), ftos(speedaward_alltimebest));
-                               db_put(ServerProgsDB, strcat(GetMapname(), rr, "speed/crypto_idfp"), speedaward_alltimebest_uid);
-                               race_send_speedaward_alltimebest(MSG_ALL);
-                       }
-               }
-       }
+       race_checkAndWriteName(player);
+       race_SpeedAwardFrame(player);
 }
 
 MUTATOR_HOOKFUNCTION(cts, ForbidThrowCurrentWeapon)
@@ -418,5 +365,6 @@ MUTATOR_HOOKFUNCTION(cts, ForbidDropCurrentWeapon)
 
 void cts_Initialize()
 {
+       record_type = CTS_RECORD;
        cts_ScoreRules();
 }
index 8148dda2d39f6964a503a3bc8229a8d317673fc6..ecfd3660588cf91275a71f079d9994aa1bf1ab0f 100644 (file)
@@ -53,20 +53,18 @@ void havocbot_role_race(entity this)
 
 void race_ScoreRules()
 {
-    GameRules_score_enabled(false);
+       GameRules_score_enabled(false);
        GameRules_scoring(race_teams, 0, 0, {
-        if (race_teams) {
-            field_team(ST_RACE_LAPS, "laps", SFL_SORT_PRIO_PRIMARY);
-            field(SP_RACE_LAPS, "laps", SFL_SORT_PRIO_PRIMARY);
-            field(SP_RACE_TIME, "time", SFL_SORT_PRIO_SECONDARY | SFL_LOWER_IS_BETTER | SFL_TIME);
-            field(SP_RACE_FASTEST, "fastest", SFL_LOWER_IS_BETTER | SFL_TIME);
-        } else if (g_race_qualifying) {
-            field(SP_RACE_FASTEST, "fastest", SFL_SORT_PRIO_PRIMARY | SFL_LOWER_IS_BETTER | SFL_TIME);
-        } else {
-            field(SP_RACE_LAPS, "laps", SFL_SORT_PRIO_PRIMARY);
-            field(SP_RACE_TIME, "time", SFL_SORT_PRIO_SECONDARY | SFL_LOWER_IS_BETTER | SFL_TIME);
-            field(SP_RACE_FASTEST, "fastest", SFL_LOWER_IS_BETTER | SFL_TIME);
-        }
+               if (race_teams)
+                       field_team(ST_RACE_LAPS, "laps", SFL_SORT_PRIO_PRIMARY);
+               else if (g_race_qualifying)
+                       field(SP_RACE_FASTEST, "fastest", SFL_SORT_PRIO_PRIMARY | SFL_LOWER_IS_BETTER | SFL_TIME);
+               if (race_teams || !g_race_qualifying)
+               {
+                       field(SP_RACE_LAPS, "laps", SFL_SORT_PRIO_PRIMARY);
+                       field(SP_RACE_TIME, "time", SFL_SORT_PRIO_SECONDARY | SFL_LOWER_IS_BETTER | SFL_TIME);
+                       field(SP_RACE_FASTEST, "fastest", SFL_LOWER_IS_BETTER | SFL_TIME);
+               }
        });
 }
 
@@ -139,7 +137,6 @@ MUTATOR_HOOKFUNCTION(rc, PlayerPhysics)
        player.race_movetime_count += f;
        player.race_movetime = player.race_movetime_frac + player.race_movetime_count;
 
-#ifdef SVQC
        if(IS_PLAYER(player))
        {
                if (player.race_penalty)
@@ -152,7 +149,6 @@ MUTATOR_HOOKFUNCTION(rc, PlayerPhysics)
                        player.disableclientprediction = 2;
                }
        }
-#endif
 
        // force kbd movement for fairness
        float wishspeed;
@@ -238,26 +234,7 @@ MUTATOR_HOOKFUNCTION(rc, ClientConnect)
        race_PreparePlayer(player);
        player.race_checkpoint = -1;
 
-       string rr = RACE_RECORD;
-
-       if(IS_REAL_CLIENT(player))
-       {
-               msg_entity = player;
-               race_send_recordtime(MSG_ONE);
-               race_send_speedaward(MSG_ONE);
-
-               speedaward_alltimebest = stof(db_get(ServerProgsDB, strcat(GetMapname(), rr, "speed/speed")));
-               speedaward_alltimebest_holder = uid2name(db_get(ServerProgsDB, strcat(GetMapname(), rr, "speed/crypto_idfp")));
-               race_send_speedaward_alltimebest(MSG_ONE);
-
-               float i;
-               int m = min(RANKINGS_CNT, autocvar_g_cts_send_rankings_cnt);
-               race_send_rankings_cnt(MSG_ONE);
-               for (i = 1; i <= m; ++i)
-               {
-                       race_SendRankings(i, 0, 0, MSG_ONE);
-               }
-       }
+       race_SendAll(player, false);
 }
 
 MUTATOR_HOOKFUNCTION(rc, MakePlayerObserver)
@@ -328,42 +305,8 @@ MUTATOR_HOOKFUNCTION(rc, GetPressedKeys)
 {
        entity player = M_ARGV(0, entity);
 
-       if(CS_CVAR(player).cvar_cl_allow_uidtracking == 1 && CS_CVAR(player).cvar_cl_allow_uid2name == 1)
-       {
-               if (!player.stored_netname)
-                       player.stored_netname = strzone(uid2name(player.crypto_idfp));
-               if(player.stored_netname != player.netname)
-               {
-                       db_put(ServerProgsDB, strcat("/uid2name/", player.crypto_idfp), player.netname);
-                       strcpy(player.stored_netname, player.netname);
-               }
-       }
-
-       if (!IS_OBSERVER(player))
-       {
-               if(vdist(player.velocity - player.velocity_z * '0 0 1', >, speedaward_speed))
-               {
-                       speedaward_speed = vlen(player.velocity - player.velocity_z * '0 0 1');
-                       speedaward_holder = player.netname;
-                       speedaward_uid = player.crypto_idfp;
-                       speedaward_lastupdate = time;
-               }
-               if (speedaward_speed > speedaward_lastsent && (time - speedaward_lastupdate > 1 || intermission_running))
-               {
-                       string rr = RACE_RECORD;
-                       race_send_speedaward(MSG_ALL);
-                       speedaward_lastsent = speedaward_speed;
-                       if (speedaward_speed > speedaward_alltimebest && speedaward_uid != "")
-                       {
-                               speedaward_alltimebest = speedaward_speed;
-                               speedaward_alltimebest_holder = speedaward_holder;
-                               speedaward_alltimebest_uid = speedaward_uid;
-                               db_put(ServerProgsDB, strcat(GetMapname(), rr, "speed/speed"), ftos(speedaward_alltimebest));
-                               db_put(ServerProgsDB, strcat(GetMapname(), rr, "speed/crypto_idfp"), speedaward_alltimebest_uid);
-                               race_send_speedaward_alltimebest(MSG_ALL);
-                       }
-               }
-       }
+       race_checkAndWriteName(player);
+       race_SpeedAwardFrame(player);
 }
 
 MUTATOR_HOOKFUNCTION(rc, ForbidPlayerScore_Clear)
@@ -473,6 +416,8 @@ void rc_SetLimits()
 
        float want_qualifying = ((qualifying_override >= 0) ? qualifying_override : autocvar_g_race_qualifying_timelimit) > 0;
 
+       record_type = RACE_RECORD;
+
        if(autocvar_g_campaign)
        {
                g_race_qualifying = 1;
@@ -492,8 +437,8 @@ void rc_SetLimits()
        }
        else
                g_race_qualifying = 0;
-    GameRules_limit_score(fraglimit_override);
-    GameRules_limit_lead(leadlimit_override);
-    GameRules_limit_time(timelimit_override);
-    GameRules_limit_time_qualifying(qualifying_override);
+       GameRules_limit_score(fraglimit_override);
+       GameRules_limit_lead(leadlimit_override);
+       GameRules_limit_time(timelimit_override);
+       GameRules_limit_time_qualifying(qualifying_override);
 }
index 70a98083efb22a03171f78a0adae0fe623c189ac..472a8ec4f630d9c589cf7ed8991a2687e864bc48 100644 (file)
@@ -30,6 +30,8 @@
 #include <server/weapons/common.qh>
 #include <server/world.qh>
 
+.string stored_netname; // TODO: store this information independently of race-based gamemodes
+
 string uid2name(string myuid)
 {
        string s = db_get(ServerProgsDB, strcat("/uid2name/", myuid));
@@ -79,16 +81,12 @@ void race_InitSpectator()
 
 float race_readTime(string map, float pos)
 {
-       string rr = ((g_cts) ? CTS_RECORD : ((g_ctf) ? CTF_RECORD : RACE_RECORD));
-
-       return stof(db_get(ServerProgsDB, strcat(map, rr, "time", ftos(pos))));
+       return stof(db_get(ServerProgsDB, strcat(map, record_type, "time", ftos(pos))));
 }
 
 string race_readUID(string map, float pos)
 {
-       string rr = ((g_cts) ? CTS_RECORD : ((g_ctf) ? CTF_RECORD : RACE_RECORD));
-
-       return db_get(ServerProgsDB, strcat(map, rr, "crypto_idfp", ftos(pos)));
+       return db_get(ServerProgsDB, strcat(map, record_type, "crypto_idfp", ftos(pos)));
 }
 
 float race_readPos(string map, float t)
@@ -105,8 +103,6 @@ float race_readPos(string map, float t)
 
 void race_writeTime(string map, float t, string myuid)
 {
-       string rr = ((g_cts) ? CTS_RECORD : ((g_ctf) ? CTF_RECORD : RACE_RECORD));
-
        float newpos;
        newpos = race_readPos(map, t);
 
@@ -121,8 +117,8 @@ void race_writeTime(string map, float t, string myuid)
                // player improved his existing record, only have to iterate on ranks between new and old recs
                for (i = prevpos; i > newpos; --i)
                {
-                       db_put(ServerProgsDB, strcat(map, rr, "time", ftos(i)), ftos(race_readTime(map, i - 1)));
-                       db_put(ServerProgsDB, strcat(map, rr, "crypto_idfp", ftos(i)), race_readUID(map, i - 1));
+                       db_put(ServerProgsDB, strcat(map, record_type, "time", ftos(i)), ftos(race_readTime(map, i - 1)));
+                       db_put(ServerProgsDB, strcat(map, record_type, "crypto_idfp", ftos(i)), race_readUID(map, i - 1));
                }
        }
        else
@@ -132,22 +128,34 @@ void race_writeTime(string map, float t, string myuid)
                {
                        float other_time = race_readTime(map, i - 1);
                        if (other_time) {
-                               db_put(ServerProgsDB, strcat(map, rr, "time", ftos(i)), ftos(other_time));
-                               db_put(ServerProgsDB, strcat(map, rr, "crypto_idfp", ftos(i)), race_readUID(map, i - 1));
+                               db_put(ServerProgsDB, strcat(map, record_type, "time", ftos(i)), ftos(other_time));
+                               db_put(ServerProgsDB, strcat(map, record_type, "crypto_idfp", ftos(i)), race_readUID(map, i - 1));
                        }
                }
        }
 
        // store new time itself
-       db_put(ServerProgsDB, strcat(map, rr, "time", ftos(newpos)), ftos(t));
-       db_put(ServerProgsDB, strcat(map, rr, "crypto_idfp", ftos(newpos)), myuid);
+       db_put(ServerProgsDB, strcat(map, record_type, "time", ftos(newpos)), ftos(t));
+       db_put(ServerProgsDB, strcat(map, record_type, "crypto_idfp", ftos(newpos)), myuid);
 }
 
 string race_readName(string map, float pos)
 {
-       string rr = ((g_cts) ? CTS_RECORD : ((g_ctf) ? CTF_RECORD : RACE_RECORD));
+       return uid2name(db_get(ServerProgsDB, strcat(map, record_type, "crypto_idfp", ftos(pos))));
+}
 
-       return uid2name(db_get(ServerProgsDB, strcat(map, rr, "crypto_idfp", ftos(pos))));
+void race_checkAndWriteName(entity player)
+{
+       if(CS_CVAR(player).cvar_cl_allow_uidtracking == 1 && CS_CVAR(player).cvar_cl_allow_uid2name == 1)
+       {
+               if (!player.stored_netname)
+                       player.stored_netname = strzone(uid2name(player.crypto_idfp));
+               if(player.stored_netname != player.netname)
+               {
+                       db_put(ServerProgsDB, strcat("/uid2name/", player.crypto_idfp), player.netname);
+                       strcpy(player.stored_netname, player.netname);
+               }
+       }
 }
 
 
@@ -252,7 +260,6 @@ void race_send_recordtime(float msg)
        WriteInt24_t(msg, race_readTime(GetMapname(), 1));
 }
 
-
 void race_send_speedaward(float msg)
 {
        // send the best speed of the round
@@ -279,7 +286,7 @@ void race_send_rankings_cnt(float msg)
        WriteByte(msg, m);
 }
 
-void race_SendRankings(float pos, float prevpos, float del, float msg)
+void race_SendRanking(float pos, float prevpos, float del, float msg)
 {
        WriteHeader(msg, TE_CSQC_RACE);
        WriteByte(msg, RACE_NET_SERVER_RANKINGS);
@@ -290,6 +297,56 @@ void race_SendRankings(float pos, float prevpos, float del, float msg)
        WriteInt24_t(msg, race_readTime(GetMapname(), pos));
 }
 
+void race_SpeedAwardFrame(entity player)
+{
+       if (IS_OBSERVER(player))
+               return;
+
+       if(vdist(player.velocity - player.velocity_z * '0 0 1', >, speedaward_speed))
+       {
+               speedaward_speed = vlen(player.velocity - player.velocity_z * '0 0 1');
+               speedaward_holder = player.netname;
+               speedaward_uid = player.crypto_idfp;
+               speedaward_lastupdate = time;
+       }
+       if (speedaward_speed > speedaward_lastsent && (time - speedaward_lastupdate > 1 || intermission_running))
+       {
+               race_send_speedaward(MSG_ALL);
+               speedaward_lastsent = speedaward_speed;
+               if (speedaward_speed > speedaward_alltimebest && speedaward_uid != "")
+               {
+                       speedaward_alltimebest = speedaward_speed;
+                       speedaward_alltimebest_holder = speedaward_holder;
+                       speedaward_alltimebest_uid = speedaward_uid;
+                       db_put(ServerProgsDB, strcat(GetMapname(), record_type, "speed/speed"), ftos(speedaward_alltimebest));
+                       db_put(ServerProgsDB, strcat(GetMapname(), record_type, "speed/crypto_idfp"), speedaward_alltimebest_uid);
+                       race_send_speedaward_alltimebest(MSG_ALL);
+               }
+       }
+}
+
+void race_SendAll(entity player, bool only_rankings)
+{
+       if(!IS_REAL_CLIENT(player))
+               return;
+
+       msg_entity = player;
+       if (!only_rankings)
+       {
+               race_send_recordtime(MSG_ONE);
+               race_send_speedaward(MSG_ONE);
+
+               speedaward_alltimebest = stof(db_get(ServerProgsDB, strcat(GetMapname(), record_type, "speed/speed")));
+               speedaward_alltimebest_holder = uid2name(db_get(ServerProgsDB, strcat(GetMapname(), record_type, "speed/crypto_idfp")));
+               race_send_speedaward_alltimebest(MSG_ONE);
+       }
+
+       int m = min(RANKINGS_CNT, autocvar_g_cts_send_rankings_cnt);
+       race_send_rankings_cnt(MSG_ONE);
+       for (int i = 1; i <= m; ++i)
+               race_SendRanking(i, 0, 0, MSG_ONE);
+}
+
 void race_SendStatus(float id, entity e)
 {
        if(!IS_REAL_CLIENT(e))
@@ -370,7 +427,7 @@ void race_setTime(string map, float t, string myuid, string mynetname, entity e,
                race_send_recordtime(MSG_ALL);
        }
 
-       race_SendRankings(newpos, player_prevpos, 0, MSG_ALL);
+       race_SendRanking(newpos, player_prevpos, 0, MSG_ALL);
        strcpy(rankings_reply, getrankings());
 
        if(newpos == player_prevpos)
@@ -398,24 +455,22 @@ void race_setTime(string map, float t, string myuid, string mynetname, entity e,
 
 void race_deleteTime(string map, float pos)
 {
-       string rr = ((g_cts) ? CTS_RECORD : ((g_ctf) ? CTF_RECORD : RACE_RECORD));
-
        for(int i = pos; i <= RANKINGS_CNT; ++i)
        {
                string therank = ftos(i);
                if (i == RANKINGS_CNT)
                {
-                       db_remove(ServerProgsDB, strcat(map, rr, "time", therank));
-                       db_remove(ServerProgsDB, strcat(map, rr, "crypto_idfp", therank));
+                       db_remove(ServerProgsDB, strcat(map, record_type, "time", therank));
+                       db_remove(ServerProgsDB, strcat(map, record_type, "crypto_idfp", therank));
                }
                else
                {
-                       db_put(ServerProgsDB, strcat(map, rr, "time", therank), ftos(race_readTime(GetMapname(), i+1)));
-                       db_put(ServerProgsDB, strcat(map, rr, "crypto_idfp", therank), race_readUID(GetMapname(), i+1));
+                       db_put(ServerProgsDB, strcat(map, record_type, "time", therank), ftos(race_readTime(GetMapname(), i+1)));
+                       db_put(ServerProgsDB, strcat(map, record_type, "crypto_idfp", therank), race_readUID(GetMapname(), i+1));
                }
        }
 
-       race_SendRankings(pos, 0, 1, MSG_ALL);
+       race_SendRanking(pos, 0, 1, MSG_ALL);
        if(pos == 1)
                race_send_recordtime(MSG_ALL);
 
index 0bef0b59a66033d0f5fe436cbef7aad4f76393b7..acf35b2b0a89e09ed1a4e4634b85a50de6cb3e46 100644 (file)
@@ -2,8 +2,6 @@
 
 bool autocvar_g_allow_checkpoints;
 
-.string stored_netname; // TODO: store this information independently of race-based gamemodes
-
 float race_teams;
 
 // scores
@@ -47,11 +45,13 @@ float race_GetFractionalLapCount(entity e);
 float race_readTime(string map, float pos);
 string race_readUID(string map, float pos);
 string race_readName(string map, float pos);
+
+void race_checkAndWriteName(entity player);
 void race_ClearRecords();
 void race_SendNextCheckpoint(entity e, float spec);
 void race_PreparePlayer(entity this);
 void race_send_recordtime(float msg);
-void race_send_speedaward(float msg);
+
 void race_setTime(string map, float t, string myuid, string mynetname, entity e, bool showmessage);
 
 float speedaward_speed;
@@ -63,12 +63,12 @@ string speedaward_alltimebest_holder;
 string speedaward_alltimebest_uid;
 
 void race_send_speedaward(float msg);
-
 void race_send_speedaward_alltimebest(float msg);
+void race_SpeedAwardFrame(entity player);
 
 void race_send_rankings_cnt(float msg);
-
-void race_SendRankings(float pos, float prevpos, float del, float msg);
+void race_SendRanking(float pos, float prevpos, float del, float msg);
+void race_SendAll(entity player, bool only_rankings);
 
 void race_RetractPlayer(entity this);
 
index b61f75ceb7068f00bf85b76a05a88f04a016dac9..dff0f06bfa2a515122b6e82581b28650b084c3e9 100644 (file)
@@ -755,6 +755,9 @@ spawnfunc(worldspawn)
 
        cvar_changes_init(); // do this very early now so it REALLY matches the server config
 
+       // default to RACE_RECORD, can be overwritten by gamemodes
+       record_type = RACE_RECORD;
+
        // needs to be done so early because of the constants they create
        static_init();
 
index e79a6f9df3ac4dfaf3ee936b504f0e94293fb6aa..bdaac8c271e5ae08f79af6ba5f32e02fa8fb717c 100644 (file)
@@ -45,6 +45,8 @@ string modname;
 
 string gamemode_name;
 
+string record_type;
+
 string clientstuff;
 
 string matchid;