63 return 0.5 - 0.5 *
cos(cosangle * cosangle * (4 *
M_PI));
77 CS(
this).anticheat_div0_evade_v_angle = this.
v_angle;
78 CS(
this).anticheat_div0_evade_forward_initial =
v_forward;
84 CS(
this).anticheat_div0_evade_v_angle = this.
v_angle;
89 CS(
this).anticheat_div0_strafebot_movement_prev =
CS(
this).movement;
93 float cosangle =
CS(
this).anticheat_div0_strafebot_forward_prev *
v_forward;
94 float angle = cosangle < -1 ?
M_PI : cosangle > 1 ? 0 : acos(cosangle);
107 float anglespeed =
angle / dt;
117 float f =
bound(0, dt * 4, 1);
119 vector snapback_prev =
CS(
this).anticheat_div0_snapback_prev;
120 float snapback_len =
vlen(snapback_prev);
121 if (snapback_len != 0) {
122 float aim_snap =
max(0, (aim_move * snapback_prev) / -snapback_len);
126 CS(
this).anticheat_div0_snapback_prev = snapback_prev * (1 - f) + aim_move * f;
129 CS(
this).anticheat_div0_strafebot_forward_prev =
v_forward;
132 CS(
this).anticheat_speedhack_movetime_frac +=
frametime;
134 CS(
this).anticheat_speedhack_movetime_frac -= f;
135 CS(
this).anticheat_speedhack_movetime_count += f;
136 CS(
this).anticheat_speedhack_movetime =
CS(
this).anticheat_speedhack_movetime_frac +
CS(
this).anticheat_speedhack_movetime_count;
139 CS(
this).anticheat_speedhack_offset = f;
143 CS(
this).anticheat_speedhack_offset += (f -
CS(
this).anticheat_speedhack_offset) *
frametime * 0.1;
148 float dt =
servertime -
CS(
this).anticheat_speedhack_lasttime;
150 CS(
this).anticheat_speedhack_accu *=
exp(-dt *
falloff);
161 CS(
this).anticheat_speedhack_accu = 1;
169 this.
angles =
CS(spectatee).anticheat_div0_evade_v_angle;
175 CS(
this).anticheat_div0_evade_offset = 0;
191#define ANTICHEATS(ANTICHEAT) \
192 ANTICHEAT("speedhack", MEAN_EVALUATE(CS(this), anticheat_speedhack), 240, 0, 9999); \
193 ANTICHEAT("speedhack_m1", MEAN_EVALUATE(CS(this), anticheat_speedhack_m1), 240, 1.01, 1.25); \
194 ANTICHEAT("speedhack_m2", MEAN_EVALUATE(CS(this), anticheat_speedhack_m2), 240, 1.01, 1.25); \
195 ANTICHEAT("speedhack_m3", MEAN_EVALUATE(CS(this), anticheat_speedhack_m3), 240, 1.01, 1.25); \
196 ANTICHEAT("speedhack_m4", MEAN_EVALUATE(CS(this), anticheat_speedhack_m4), 240, 1.01, 1.25); \
197 ANTICHEAT("speedhack_m5", MEAN_EVALUATE(CS(this), anticheat_speedhack_m5), 240, 1.01, 1.25); \
198 ANTICHEAT("div0_strafebot_old", MEAN_EVALUATE(CS(this), anticheat_div0_strafebot_old), 120, 0.15, 0.4); \
199 ANTICHEAT("div0_strafebot_new", MEAN_EVALUATE(CS(this), anticheat_div0_strafebot_new), 120, 0.25, 0.8); \
200 ANTICHEAT("div0_evade", MEAN_EVALUATE(CS(this), anticheat_div0_evade), 120, 0.2, 0.5); \
201 ANTICHEAT("idle_snapaim", MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_signal) - MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_noise), 120, 0, 9999); \
202 ANTICHEAT("idle_snapaim_signal", MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_signal), 120, 0, 9999); \
203 ANTICHEAT("idle_snapaim_noise", MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_noise), 120, 0, 9999); \
204 ANTICHEAT("idle_snapaim_m2", MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m2), 120, 0, 9999); \
205 ANTICHEAT("idle_snapaim_m3", MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m3), 120, 0, 9999); \
206 ANTICHEAT("idle_snapaim_m4", MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m4), 120, 0, 9999); \
207 ANTICHEAT("idle_snapaim_m7", MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m7), 120, 0, 9999); \
208 ANTICHEAT("idle_snapaim_m10", MEAN_EVALUATE(CS(this), anticheat_idle_snapaim_m10), 120, 0, 9999); \
209 ANTICHEAT("div0_snapback", MEAN_EVALUATE(CS(this), anticheat_div0_snapback), 120, 0, 9999)
215#define ANTICHEAT_REPORT_ONE(name, f, tmin, mi, ma) \
216 GameLogEcho(strcat(":anticheat:", name, ":", anticheat_display(f, servertime - CS(this).anticheat_jointime, tmin, mi, ma)))
218#undef ANTICHEAT_REPORT_ONE
224#define ANTICHEAT_REPORT_ONE(name, f, tmin, mi, ma) \
225 PlayerStats_GameReport_Event_Player(this, strcat(PLAYERSTATS_ANTICHEAT, name), f)
227#undef ANTICHEAT_REPORT_ONE
232#define ANTICHEAT_REGISTER_ONE(name, unused_f, unused_tmin, unused_mi, unused_ma) \
233 PlayerStats_GameReport_AddEvent(strcat(PLAYERSTATS_ANTICHEAT, name))
235#undef ANTICHEAT_REGISTER_ONE
258 CS(
this).anticheat_speedhack_offset = 0;
void anticheat_fixangle(entity this)
float anticheat_div0_evade_offset
float anticheat_div0_evade_evasion_delta
vector anticheat_div0_strafebot_forward_prev
vector anticheat_div0_evade_v_angle
float anticheat_speedhack_accu
float anticheat_speedhack_lasttime
void anticheat_init(entity this)
vector anticheat_div0_strafebot_movement_prev
string anticheat_display(float f, float t, float tmin, float mi, float ma)
void anticheat_report_to_playerstats(entity this)
#define ANTICHEAT_REGISTER_ONE(name, unused_f, unused_tmin, unused_mi, unused_ma)
float anticheat_speedhack_movetime_count
vector anticheat_div0_evade_forward_initial
void anticheat_spectatecopy(entity this, entity spectatee)
void anticheat_startframe()
#define ANTICHEAT_REPORT_ONE(name, f, tmin, mi, ma)
float anticheat_fixangle_endtime
void anticheat_physics(entity this)
void anticheat_report_to_eventlog(entity this)
void anticheat_prethink(entity this)
void anticheat_register_to_playerstats()
vector anticheat_div0_snapback_prev
void anticheat_endframe()
float anticheat_speedhack_movetime_frac
float movement_oddity(vector m0, vector m1)
float anticheat_speedhack_offset
#define ANTICHEATS(ANTICHEAT)
float anticheat_speedhack_movetime
#define ANTILAG_LATENCY(e)
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
void GameLogEcho(string s)
bool autocvar_sv_eventlog
#define MEAN_DECLARE(prefix, m)
#define MEAN_ACCUMULATE(s, prefix, v, w)
strcat(_("^F4Countdown stopped!"), "\n^BG", _("Teams are too unbalanced."))
void PlayerStats_GameReport_AddEvent(string event_id)
const string PLAYERSTATS_ANTICHEAT
#define PlayerStats_GameReport_Event_Player(ent, eventid, val)
ClientState CS(Client this)
#define FOREACH_CLIENT(cond, body)