The Oryx bunnyhop anticheat for CS:S, CS:GO, and TF2.
Early warning: As it goes for every anticheat, there will be false positives. You need to decide if you want to ban someone and if you're sure they use cheats.
This thread is a manual conversion from the GitHub markdown to BBCode.
GitHub link: https://github.com/shavitush/Oryx-AC
Latest download: https://github.com/shavitush/Oryx-AC/releases/latest
All downloads + changelogs: https://github.com/shavitush/Oryx-AC/releases
This is a fork of Oryx, the bunnyhop anticheat written by Rusty/Nolan-O
. The README will be mostly left untouched unless I need to change anything.
The main differences from the original version are:
- I have supported CS:GO and TF2.
- I edited the plugin to work with bhoptimer. bTimes support has been dropped.
- smlib is not a dependency anymore.
- Optimizations have been applied.
- Cleaned the code where I could. Most plugins will look as if they were rewritten, as I don't like the way Rusty wrote them in first place.
- SourceMod 1.9 is the target version. Support for older versions of SourceMod will not be provided.
- More detection methods have been added.
This was written for SourceMod v1.7.
Few comments are provided because I never planned on releasing the code, however there are *some* comments.
The bulk of everything outside of oryx.sp is just pure game-mechanic-related logic anyway, so it just works because that's the way things work.
You need DHooks
to build. You also need DHooks
on your server for oryx-sanity
It depends on gamedata from SDKTools therefore shouldn't break unless your server is out of date.
All you need to do is make sure you've specified your timer in include/oryx.inc
by defining either notimer
. Build each file manually with the SourceMod compiler, like usual.
is defined, you will need bhoptimer
's include file.
Send a pull request if you want to support other timers.
A lot of this info is found in include/oryx.inc
(Tables are ugly in AlliedModders, sorry. I don't think we have a proper BBCode for it available either.)
Exported command | Action | Admin only? | From:
---------------- | ------ | ----------- | -----
sm_otest | Enables the TRIGGER_TEST detection level | yes | oryx
sm_lock \<player> | Disables movement for a player | yes | oryx
scroll_stats \<player> | Print the scroll stat buffer for a given player | no | oryx-scroll
strafe_stats \<player> | Print the strafe stat buffer for a given player | no | oryx-strafe
config_streak \<player> | Print the config stat buffer for a given player | yes | oryx-configcheck
Trigger type | Usage
------------ | -----
TRIGGER_LOW | Like an early warning system. Oryx has probably not found a cheater, but you should keep an eye out.
TRIGGER_MEDIUM | Also early warning.
TRIGGER_HIGH | Oryx is pretty sure someone is cheating, and this will kick them.
TRIGGER_HIGH_NOKICK | Just what it sounds like. High alert, but no automated consequences.
TRIGGER_DEFINITIVE | Used by only by oryx-sanity right now. This should be used on non-stat-based detections.
TRIGGER_TEST | Allows you to develop new detections on live servers with minimal side effects.
Detection type | Meaning | From
-------------- | ------- | ----
Acute TR formatter | The player's turn rate has been made perfect | oryx-strafe
+left/right bypasser | +left/right bitflags have been stripped from the client's buttons variable | oryx-strafe
Prestrafe tool | Player is using a static turnrate to get 289 walk speed. Same as +left/right bypassing, but for a specific value on the ground | oryx-strafe
Average strafe too close to 0 | The average strafe offset is suspiciously near 0 | oryx-strafe
Too many perfect strafes | The average strafe offset is not too close to 0, but there is a suspiciously high frequency of 0s | oryx-strafe
Movement config | Player exhibits behavior that is humanly possible, but movement configs would enforce it | oryx-configcheck
+klook usage | A movement config that disables +forward and +back in specific cases (such as LJ binds) | oryx-configcheck
Unsynchronised movement | Wish velocity does not align with with the player's buttons variable | oryx-sanity
Invalid wish velocity | Wish velocity can only be specific values | oryx-sanity
Wish velocity is too high | Wish velocity exceeds the default `cl_forwardspeed` or `cl_sidespeed` settings | oryx-sanity
Wrong mouse inputs | Raw input has discrepancies with the view angles' yaw delta | oryx-sanity
Scripted jumps (havg) | Too many perfect jumps indicates a potential jump script usage | oryx-scroll
Scripted jumps (havgp, patt1, patt2, wpatt, wpatt2) | Too many perfect jumps while maintaining obviously weird scroll stats | oryx-scroll
Scripted jumps (nobf, bf-af, noaf) | Inhuman stats for scrolls before touching the ground and after jumping | oryx-scroll
Scroll macro (highn) | Way too many scroll inputs per jump, giving away the player using some kind of jump macro | oryx-scroll
Scroll cheat (interval, ticks) | Analysis on interval between scrolls. These methods are at low detection level due to the nature of UDP. | oryx-scroll
: oryx-sanity will
cause false positives with gamepads and controllers.
: If using bhoptimer
, add oryx_bypass
to the special string. This setting will disable the sanity, strafe, and movement config anticheats from triggering on the style. For example:
"name" "Hack vs Hack"
Docs on natives are found in include/oryx.inc
, using the SourceMod self-documenting style.
The plugins have only been tested with bhoptimer v1.5b (as found here
Relevant information will be logged into addons/sourcemod/logs/oryx-ac.log
Scroll cheaters will be listed in addons/sourcemod/logs/oryx-ac-scroll.log
Strafe hackers will be listed in addons/sourcemod/logs/oryx-strafe-stats.log
Chat messages will be printed to admins with sm_ban
access, or the oryx_admin
override. Admins will hear a beep sound to grab their attention when needed.
- Key-transition: the changing of direction with keys (i.e. changing from `+moveleft` to `+moveright`)
- Angle-transition: the changing of direction in a player's camera along the x axis
- Strafe offset: the number of ticks that pass between a key-transition and angle-transition
- Wish velocity: Also called wishvel, this value is used for calculating movement direction, not the player buttons variable
- Movement config: Key bindings that prohibit the player from pressing opposing movement keys (i.e. `+moveleft` and `+moveright` can't be held at the same time
- TR: Turn-rate -- the rate of rotation of the client's camera along the x axis