]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Start the dropped capture timer when the flag touches the ground rather than when...
authorMario <mario.mario@y7mail.com>
Mon, 14 Nov 2022 10:10:19 +0000 (20:10 +1000)
committerMario <mario.mario@y7mail.com>
Mon, 14 Nov 2022 10:10:19 +0000 (20:10 +1000)
qcsrc/common/gamemodes/gamemode/ctf/sv_ctf.qc
qcsrc/common/gamemodes/gamemode/ctf/sv_ctf.qh

index a1e1c59900ba4ac5ac435e8dcdc73d431f0bc57a..91952b2d15746ce085923c62007e35213717722d 100644 (file)
@@ -356,6 +356,7 @@ void ctf_Handle_Drop(entity flag, entity player, int droptype)
        flag.angles = '0 0 0';
        SetResourceExplicit(flag, RES_HEALTH, flag.max_health);
        flag.ctf_droptime = time;
+       flag.ctf_landtime = 0;
        flag.ctf_dropper = player;
        flag.ctf_status = FLAG_DROPPED;
 
@@ -473,6 +474,7 @@ void ctf_Handle_Throw(entity player, entity receiver, int droptype)
        flag.solid = SOLID_TRIGGER;
        flag.ctf_dropper = player;
        flag.ctf_droptime = time;
+       flag.ctf_landtime = 0;
 
        flag.flags = FL_ITEM | FL_NOTARGET; // clear FL_ONGROUND for MOVETYPE_TOSS
 
@@ -949,7 +951,7 @@ void ctf_FlagThink(entity this)
                                for(tmp_entity = ctf_worldflaglist; tmp_entity; tmp_entity = tmp_entity.ctf_worldflagnext)
                                        if(tmp_entity.ctf_status == FLAG_DROPPED)
                                        if(vdist(this.origin - tmp_entity.origin, <, autocvar_g_ctf_dropped_capture_radius))
-                                       if(time > tmp_entity.ctf_droptime + autocvar_g_ctf_dropped_capture_delay)
+                                       if((this.noalign || tmp_entity.ctf_landtime) && time > ((this.noalign) ? tmp_entity.ctf_droptime : tmp_entity.ctf_landtime) + autocvar_g_ctf_dropped_capture_delay)
                                                ctf_Handle_Capture(this, tmp_entity, CAPTURE_DROPPED);
                        }
                        return;
@@ -958,6 +960,8 @@ void ctf_FlagThink(entity this)
                case FLAG_DROPPED:
                {
                        this.angles = '0 0 0'; // reset flag angles in case warpzones adjust it
+                       if(IS_ONGROUND(this) && !this.ctf_landtime)
+                               this.ctf_landtime = time; // landtime is reset when thrown, and we don't want to restart the timer if the flag is pushed
 
                        if(autocvar_g_ctf_flag_dropped_floatinwater)
                        {
@@ -1210,6 +1214,7 @@ void ctf_RespawnFlag(entity flag)
        flag.ctf_dropper = NULL;
        flag.ctf_pickuptime = 0;
        flag.ctf_droptime = 0;
+       flag.ctf_landtime = 0;
        flag.ctf_flagdamaged_byworld = false;
        navigation_dynamicgoal_unset(flag);
 
index 519cbd0648f49eaaaffceb7863fc4f2abea24ed2..adb061809fe053f56c36f763e31fb7195e0e3928 100644 (file)
@@ -135,6 +135,7 @@ bool ctf_stalemate; // indicates that a stalemate is active
 float ctf_captimerecord; // record time for capturing the flag
 .float ctf_pickuptime;
 .float ctf_droptime;
+.float ctf_landtime;
 .int ctf_status; // status of the flag (FLAG_BASE, FLAG_DROPPED, FLAG_CARRY declared globally)
 .entity ctf_dropper; // don't allow spam of dropping the flag
 .float next_take_time;