X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fanticheat.qc;h=32742d82d9555e41330fa559acbee64314a1b7f3;hb=a97b89297fa91ae42b9d56c262662eb34ede3e45;hp=958504be04ab07c22bc65eec41f065f2282a47a7;hpb=7c46d29ba4098441f430f20d2bb6f76a49b0ec68;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/anticheat.qc b/qcsrc/server/anticheat.qc index 958504be0..32742d82d 100644 --- a/qcsrc/server/anticheat.qc +++ b/qcsrc/server/anticheat.qc @@ -1,29 +1,17 @@ -.float anticheat_jointime; +#include "anticheat.qh" -void mean_accumulate(entity e, .float a, .float c, float mean, float value, float weight) -{ - if(weight == 0) - return; - if(mean == 0) - e.a *= pow(value, weight); - else - e.a += pow(value, mean) * weight; - e.c += weight; -} +#include "antilag.qh" +#include "autocvars.qh" +#include "defs.qh" +#include "miscfunctions.qh" + +#include "../dpdefs/progsdefs.qh" +#include "../dpdefs/dpextensions.qh" -float mean_evaluate(entity e, .float a, .float c, float mean) -{ - if(e.c == 0) - return 0; - if(mean == 0) - return pow(e.a, 1.0 / e.c); - else - return pow(e.a / e.c, 1.0 / mean); -} -#define MEAN_ACCUMULATE(prefix,v,w) mean_accumulate(self,prefix##_accumulator,prefix##_count,prefix##_mean,v,w) -#define MEAN_EVALUATE(prefix) mean_evaluate(self,prefix##_accumulator,prefix##_count,prefix##_mean) -#define MEAN_DECLARE(prefix,m) float prefix##_mean = m; .float prefix##_count, prefix##_accumulator +#include "command/common.qh" + +.float anticheat_jointime; .float anticheat_fixangle_endtime; @@ -75,9 +63,8 @@ float movement_oddity(vector m0, vector m1) } void anticheat_physics() -{ - float f, wishspeed; - vector wishvel; +{SELFPARAM(); + float f; // div0_evade -> SPECTATORS makevectors(self.v_angle); @@ -160,62 +147,16 @@ void anticheat_physics() self.anticheat_speedhack_accu = 1; self.anticheat_speedhack_lasttime = servertime; } - - // race/CTS: force kbd movement for fairness - if(g_race || g_cts) - { - // if record times matter - // ensure nothing EVIL is being done (i.e. div0_evade) - // this hinders joystick users though - // but it still gives SOME analog control - wishvel_x = fabs(self.movement_x); - wishvel_y = fabs(self.movement_y); - if(wishvel_x != 0 && wishvel_y != 0 && wishvel_x != wishvel_y) - { - wishvel_z = 0; - wishspeed = vlen(wishvel); - if(wishvel_x >= 2 * wishvel_y) - { - // pure X motion - if(self.movement_x > 0) - self.movement_x = wishspeed; - else - self.movement_x = -wishspeed; - self.movement_y = 0; - } - else if(wishvel_y >= 2 * wishvel_x) - { - // pure Y motion - self.movement_x = 0; - if(self.movement_y > 0) - self.movement_y = wishspeed; - else - self.movement_y = -wishspeed; - } - else - { - // diagonal - if(self.movement_x > 0) - self.movement_x = M_SQRT1_2 * wishspeed; - else - self.movement_x = -M_SQRT1_2 * wishspeed; - if(self.movement_y > 0) - self.movement_y = M_SQRT1_2 * wishspeed; - else - self.movement_y = -M_SQRT1_2 * wishspeed; - } - } - } } void anticheat_spectatecopy(entity spectatee) -{ +{SELFPARAM(); // div0_evade -> SPECTATORS self.angles = spectatee.anticheat_div0_evade_v_angle; } void anticheat_prethink() -{ +{SELFPARAM(); // div0_evade -> SPECTATORS self.anticheat_div0_evade_offset = 0; } @@ -232,7 +173,7 @@ string anticheat_display(float f, float tmin, float mi, float ma) } void anticheat_report() -{ +{SELFPARAM(); if(!autocvar_sv_eventlog) return; // TODO(divVerent): Use xonstat to acquire good thresholds. @@ -257,7 +198,7 @@ void anticheat_report() } float anticheat_getvalue(string id) -{ +{SELFPARAM(); switch(id) { case "_time": return servertime - self.anticheat_jointime; case "speedhack": return MEAN_EVALUATE(anticheat_speedhack); @@ -287,22 +228,22 @@ void anticheat_startframe() } void anticheat_fixangle() -{ +{SELFPARAM(); self.anticheat_fixangle_endtime = servertime + ANTILAG_LATENCY(self) + 0.2; } void anticheat_endframe() -{ - entity oldself = self; - FOR_EACH_CLIENT(self) - if (self.fixangle) - anticheat_fixangle(); - self = oldself; +{SELFPARAM(); + entity e; + FOR_EACH_CLIENT(e) + if (e.fixangle) { + WITH(entity, self, e, anticheat_fixangle()); + } anticheat_div0_evade_evasion_delta += frametime * (0.5 + random()); } void anticheat_init() -{ +{SELFPARAM(); self.anticheat_speedhack_offset = 0; self.anticheat_jointime = servertime; }