]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Record player race move time in PlayerPreThink so it can be recorded while inside...
authorMario <zacjardine@y7mail.com>
Mon, 7 Dec 2020 12:42:26 +0000 (22:42 +1000)
committerMario <zacjardine@y7mail.com>
Mon, 7 Dec 2020 12:42:26 +0000 (22:42 +1000)
qcsrc/common/gamemodes/gamemode/cts/sv_cts.qc
qcsrc/common/gamemodes/gamemode/race/sv_race.qc
qcsrc/server/race.qc

index 144788917415c2557d8fd5f5da7a81e3d803fb7b..7c83260d005376c01f72644c750369b08202e35b 100644 (file)
@@ -71,16 +71,26 @@ void cts_EventLog(string mode, entity actor) // use an alias for easy changing a
                GameLogEcho(strcat(":cts:", mode, ":", ((actor != NULL) ? (strcat(":", ftos(actor.playerid))) : "")));
 }
 
-MUTATOR_HOOKFUNCTION(cts, PlayerPhysics)
+MUTATOR_HOOKFUNCTION(cts, PlayerPreThink)
 {
        entity player = M_ARGV(0, entity);
-       float dt = M_ARGV(1, float);
 
+       if(!IS_PLAYER(player))
+               return;
+
+       // we need to perform this in PlayerPreThink as PlayerPhysics may not be called (vehicle support)
+       float dt = frametime;
        player.race_movetime_frac += dt;
        float f = floor(player.race_movetime_frac);
        player.race_movetime_frac -= f;
        player.race_movetime_count += f;
        player.race_movetime = player.race_movetime_frac + player.race_movetime_count;
+}
+
+MUTATOR_HOOKFUNCTION(cts, PlayerPhysics)
+{
+       entity player = M_ARGV(0, entity);
+       //float dt = M_ARGV(1, float);
 
        if(IS_PLAYER(player))
        {
index a69a435227785f7172f65558155049abaddbbc4e..c87384c94bc3377c45f27fa6d7ac422585c6657f 100644 (file)
@@ -128,16 +128,26 @@ MUTATOR_HOOKFUNCTION(rc, AbortSpeedrun)
                race_PreparePlayer(player); // nice try
 }
 
-MUTATOR_HOOKFUNCTION(rc, PlayerPhysics)
+MUTATOR_HOOKFUNCTION(rc, PlayerPreThink)
 {
        entity player = M_ARGV(0, entity);
-       float dt = M_ARGV(1, float);
 
+       if(!IS_PLAYER(player))
+               return;
+
+       // we need to perform this in PlayerPreThink as PlayerPhysics may not be called (vehicle support)
+       float dt = frametime;
        player.race_movetime_frac += dt;
        float f = floor(player.race_movetime_frac);
        player.race_movetime_frac -= f;
        player.race_movetime_count += f;
        player.race_movetime = player.race_movetime_frac + player.race_movetime_count;
+}
+
+MUTATOR_HOOKFUNCTION(rc, PlayerPhysics)
+{
+       entity player = M_ARGV(0, entity);
+       //float dt = M_ARGV(1, float);
 
 #ifdef SVQC
        if(IS_PLAYER(player))
index 70a98083efb22a03171f78a0adae0fe623c189ac..4e166214ca29ad0fa40a794b727dbd9c027b5144 100644 (file)
@@ -424,8 +424,6 @@ void race_deleteTime(string map, float pos)
 
 void race_SendTime(entity e, float cp, float t, float tvalid)
 {
-       float snew, l;
-
        if(g_race_qualifying)
                t += e.race_penalty_accumulator;
 
@@ -449,9 +447,9 @@ void race_SendTime(entity e, float cp, float t, float tvalid)
                                GameRules_scoring_add(e, RACE_FASTEST, t - s);
 
                        s = GameRules_scoring_add(e, RACE_TIME, 0);
-                       snew = TIME_ENCODE(time - game_starttime);
+                       float snew = TIME_ENCODE(time - game_starttime);
                        GameRules_scoring_add(e, RACE_TIME, snew - s);
-                       l = GameRules_scoring_add_team(e, RACE_LAPS, 1);
+                       float l = GameRules_scoring_add_team(e, RACE_LAPS, 1);
 
                        if(autocvar_fraglimit)
                                if(l >= autocvar_fraglimit)