X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fanticheat.qc;fp=qcsrc%2Fserver%2Fanticheat.qc;h=85bed044fb171d7569ecc0c8ed396b8991da24d9;hb=08e08edf26f99cfb6da0470c75bb7d0cbd452958;hp=4861fe2a79c25cb75ca100e3ddc6b1545870d863;hpb=f70debf2f155e50a7de2981c93bbb37ee5392d0e;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/anticheat.qc b/qcsrc/server/anticheat.qc index 4861fe2a7..85bed044f 100644 --- a/qcsrc/server/anticheat.qc +++ b/qcsrc/server/anticheat.qc @@ -6,6 +6,7 @@ #include "miscfunctions.qh" #include "command/common.qh" +#include #include .float anticheat_jointime; @@ -158,67 +159,68 @@ void anticheat_prethink(entity this) CS(this).anticheat_div0_evade_offset = 0; } -string anticheat_display(float f, float tmin, float mi, float ma) +string anticheat_display(float f, float t, float tmin, float mi, float ma) { string s; s = ftos(f); - if(f <= mi) - return strcat(s, ":N"); - if(f >= ma) - return strcat(s, ":Y"); + if (t >= tmin) { + if(f <= mi) + return strcat(s, ":N"); + if(f >= ma) + return strcat(s, ":Y"); + } return strcat(s, ":-"); } -void anticheat_report(entity this) -{ +#define ANTICHEATS(this, f) \ + f(this, "speedhack", MEAN_EVALUATE(CS(this), anticheat_speedhack), 240, 0, 9999); /* Actually this one seems broken. */ \ + f(this, "speedhack_m1", MEAN_EVALUATE(CS(this), anticheat_speedhack_m1), 240, 1.01, 1.25); \ + f(this, "speedhack_m2", MEAN_EVALUATE(CS(this), anticheat_speedhack_m2), 240, 1.01, 1.25); \ + f(this, "speedhack_m3", MEAN_EVALUATE(CS(this), anticheat_speedhack_m3), 240, 1.01, 1.25); \ + f(this, "speedhack_m4", MEAN_EVALUATE(CS(this), anticheat_speedhack_m4), 240, 1.01, 1.25); \ + f(this, "speedhack_m5", MEAN_EVALUATE(CS(this), anticheat_speedhack_m5), 240, 1.01, 1.25); \ + f(this, "div0_strafebot_old", MEAN_EVALUATE(CS(this), anticheat_div0_strafebot_old), 120, 0.15, 0.4); \ + f(this, "div0_strafebot_new", MEAN_EVALUATE(CS(this), anticheat_div0_strafebot_new), 120, 0.25, 0.8); \ + f(this, "div0_evade", MEAN_EVALUATE(CS(this), anticheat_div0_evade), 120, 0.2, 0.5); \ + f(this, "idle_snapaim", MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_signal) - MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_noise), 120, 0, 9999); \ + f(this, "idle_snapaim_signal", MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_signal), 120, 0, 9999); \ + f(this, "idle_snapaim_noise", MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_noise), 120, 0, 9999); \ + f(this, "idle_snapaim_m2", MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m2), 120, 0, 9999); \ + f(this, "idle_snapaim_m3", MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m3), 120, 0, 9999); \ + f(this, "idle_snapaim_m4", MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m4), 120, 0, 9999); \ + f(this, "idle_snapaim_m7", MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m7), 120, 0, 9999); \ + f(this, "idle_snapaim_m10", MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m10), 120, 0, 9999) + +void anticheat_report_one_to_eventlog(entity this, string name, float f, float tmin, float mi, float ma) { + GameLogEcho(strcat(":anticheat:", name, ":", anticheat_display(f, servertime - CS(this).anticheat_jointime, tmin, mi, ma))); +} + +void anticheat_report_to_eventlog(entity this) { if(!autocvar_sv_eventlog) return; - // TODO(divVerent): Use xonstat to acquire good thresholds. GameLogEcho(strcat(":anticheat:_time:", ftos(this.playerid), ":", ftos(servertime - CS(this).anticheat_jointime))); - GameLogEcho(strcat(":anticheat:speedhack:", ftos(this.playerid), ":", anticheat_display(MEAN_EVALUATE(CS(this), anticheat_speedhack), 240, 0, 9999))); // Actually this one seems broken. - GameLogEcho(strcat(":anticheat:speedhack_m1:", ftos(this.playerid), ":", anticheat_display(MEAN_EVALUATE(CS(this), anticheat_speedhack_m1), 240, 1.01, 1.25))); - GameLogEcho(strcat(":anticheat:speedhack_m2:", ftos(this.playerid), ":", anticheat_display(MEAN_EVALUATE(CS(this), anticheat_speedhack_m2), 240, 1.01, 1.25))); - GameLogEcho(strcat(":anticheat:speedhack_m3:", ftos(this.playerid), ":", anticheat_display(MEAN_EVALUATE(CS(this), anticheat_speedhack_m3), 240, 1.01, 1.25))); - GameLogEcho(strcat(":anticheat:speedhack_m4:", ftos(this.playerid), ":", anticheat_display(MEAN_EVALUATE(CS(this), anticheat_speedhack_m4), 240, 1.01, 1.25))); - GameLogEcho(strcat(":anticheat:speedhack_m5:", ftos(this.playerid), ":", anticheat_display(MEAN_EVALUATE(CS(this), anticheat_speedhack_m5), 240, 1.01, 1.25))); - GameLogEcho(strcat(":anticheat:div0_strafebot_old:", ftos(this.playerid), ":", anticheat_display(MEAN_EVALUATE(CS(this), anticheat_div0_strafebot_old), 120, 0.15, 0.4))); - GameLogEcho(strcat(":anticheat:div0_strafebot_new:", ftos(this.playerid), ":", anticheat_display(MEAN_EVALUATE(CS(this), anticheat_div0_strafebot_new), 120, 0.25, 0.8))); - GameLogEcho(strcat(":anticheat:div0_evade:", ftos(this.playerid), ":", anticheat_display(MEAN_EVALUATE(CS(this), anticheat_div0_evade), 120, 0.2, 0.5))); - GameLogEcho(strcat(":anticheat:idle_snapaim:", ftos(this.playerid), ":", anticheat_display(MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_signal) - MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_noise), 120, 0, 9999))); - GameLogEcho(strcat(":anticheat:idle_snapaim_signal:", ftos(this.playerid), ":", anticheat_display(MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_signal), 120, 0, 9999))); - GameLogEcho(strcat(":anticheat:idle_snapaim_noise:", ftos(this.playerid), ":", anticheat_display(MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_noise), 120, 0, 9999))); - GameLogEcho(strcat(":anticheat:idle_snapaim_m2:", ftos(this.playerid), ":", anticheat_display(MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m2), 120, 0, 9999))); - GameLogEcho(strcat(":anticheat:idle_snapaim_m3:", ftos(this.playerid), ":", anticheat_display(MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m3), 120, 0, 9999))); - GameLogEcho(strcat(":anticheat:idle_snapaim_m4:", ftos(this.playerid), ":", anticheat_display(MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m4), 120, 0, 9999))); - GameLogEcho(strcat(":anticheat:idle_snapaim_m7:", ftos(this.playerid), ":", anticheat_display(MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m7), 120, 0, 9999))); - GameLogEcho(strcat(":anticheat:idle_snapaim_m10:", ftos(this.playerid), ":", anticheat_display(MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m10), 120, 0, 9999))); + ANTICHEATS(this, anticheat_report_one_to_eventlog); } -float anticheat_getvalue(entity this, string id) -{ - switch(id) { - case "_time": return servertime - CS(this).anticheat_jointime; - case "speedhack": return MEAN_EVALUATE(CS(this), anticheat_speedhack); - case "speedhack_m1": return MEAN_EVALUATE(CS(this), anticheat_speedhack_m1); - case "speedhack_m2": return MEAN_EVALUATE(CS(this), anticheat_speedhack_m2); - case "speedhack_m3": return MEAN_EVALUATE(CS(this), anticheat_speedhack_m3); - case "speedhack_m4": return MEAN_EVALUATE(CS(this), anticheat_speedhack_m4); - case "speedhack_m5": return MEAN_EVALUATE(CS(this), anticheat_speedhack_m5); - case "div0_strafebot_old": return MEAN_EVALUATE(CS(this), anticheat_div0_strafebot_old); - case "div0_strafebot_new": return MEAN_EVALUATE(CS(this), anticheat_div0_strafebot_new); - case "div0_evade": return MEAN_EVALUATE(CS(this), anticheat_div0_evade); - case "idle_snapaim": return MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_signal) - MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_noise); - case "idle_snapaim_signal": return MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_signal); - case "idle_snapaim_noise": return MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_noise); - case "idle_snapaim_m2": return MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m2); - case "idle_snapaim_m3": return MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m3); - case "idle_snapaim_m4": return MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m4); - case "idle_snapaim_m7": return MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m7); - case "idle_snapaim_m10": return MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m10); - } - return -1; +void anticheat_report_one_to_playerstats(entity this, string name, float f, float tmin, float mi, float ma) { + PS_GR_P_ADDVAL(this, strcat(PLAYERSTATS_ANTICHEAT, name), f); } +void anticheat_report_to_playerstats(entity this) { + PS_GR_P_ADDVAL(this, strcat(PLAYERSTATS_ANTICHEAT, "_time"), servertime - CS(this).anticheat_jointime); + ANTICHEATS(this, anticheat_report_one_to_playerstats); +} + +#define ANTICHEAT_REGISTER_ONE_TO_PLAYERSTATS(unused_this, name, unused_f, unused_tmin, unused_mi, unused_ma) \ + PlayerStats_GameReport_AddEvent(strcat(PLAYERSTATS_ANTICHEAT, name)) +void anticheat_register_to_playerstats() { + PlayerStats_GameReport_AddEvent(strcat(PLAYERSTATS_ANTICHEAT, "_time")); + ANTICHEATS(world, ANTICHEAT_REGISTER_ONE_TO_PLAYERSTATS); +} + +#undef ANTICHEAT_REGISTER_ONE_TO_PLAYERSTATS +#undef ANTICHEATS + void anticheat_startframe() { anticheat_div0_evade_evasion_delta += frametime * (0.5 + random());