]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/accuracy.qc
Merge branch 'master' into terencehill/directmenu_options
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / accuracy.qc
index 4d63fd82002dcb9ea176cfabdedd43f3d4bd5db1..f17593af95c8cb54fc85ccb33073ddef8ce193d2 100644 (file)
@@ -1,8 +1,7 @@
-.entity accuracy;
 .float accuracy_hit[WEP_MAXCOUNT];
 .float accuracy_fired[WEP_MAXCOUNT];
-FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(accuracy_hit);
-FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(accuracy_fired);
+.float accuracy_cnt_hit[WEP_MAXCOUNT];
+.float accuracy_cnt_fired[WEP_MAXCOUNT];
 
 float accuracy_byte(float n, float d)
 {
@@ -63,31 +62,15 @@ void accuracy_resend(entity e)
 }
 
 // update accuracy stats
-void accuracy_set(entity e, float w, float fired, float hit)
-{
-       entity a;
-       float b;
-       a = e.accuracy;
-       if(!a)
-               return;
-       w -= WEP_FIRST;
-       b = accuracy_byte(a.(accuracy_hit[w]), a.(accuracy_fired[w]));
-       a.(accuracy_hit[w]) = hit;
-       a.(accuracy_fired[w]) = fired;
-       if(b == accuracy_byte(hit, fired))
-               return;
-       w = pow(2, w);
-       a.SendFlags |= w;
-       FOR_EACH_CLIENT(a)
-               if(a.classname == "spectator")
-                       if(a.enemy == e)
-                               a.SendFlags |= w;
-}
+.float hit_time;
+.float fired_time;
 
 void accuracy_add(entity e, float w, float fired, float hit)
 {
        entity a;
        float b;
+       if(IS_INDEPENDENT_PLAYER(e))
+               return;
        a = e.accuracy;
        if(!a || !(hit || fired))
                return;
@@ -97,6 +80,19 @@ void accuracy_add(entity e, float w, float fired, float hit)
                a.(accuracy_hit[w]) += hit;
        if(fired)
                a.(accuracy_fired[w]) += fired;
+
+    if(hit && a.hit_time != time) // only run this once per frame
+    {
+        a.(accuracy_cnt_hit[w]) += 1;
+        a.hit_time = time;
+    }
+
+    if(fired && a.fired_time != time) // only run this once per frame
+    {
+        a.(accuracy_cnt_fired[w]) += 1;
+        a.fired_time = time;
+    }
+
        if(b == accuracy_byte(a.(accuracy_hit[w]), a.(accuracy_fired[w])))
                return;
        w = pow(2, w);