]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/race.qc
Move some identical ctf / race / cts code to shared functions
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / race.qc
index c5a96b62a266509c42c327f6f862b7bed6c2b8ee..c09cd69ea83cb1db4316cb19936d9dd9a10fef8a 100644 (file)
@@ -260,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
@@ -298,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_SendRankings(i, 0, 0, MSG_ONE);
+}
+
 void race_SendStatus(float id, entity e)
 {
        if(!IS_REAL_CLIENT(e))