This plugin is one that I made as a replacement for Macrodox for detecting player bhop methods. It uses some coding from his plugin, but has been changed in quite a lot of ways (detailed below).
Bhop hacks - Flags players with perfect jump ratios above a value, configurable by cvar (0.9, i.e. 90%, by default).
Pattern Jumps - Flags players with over 15 jumps out of their last 30, having the exact same number of jump commands sent to the server. This is detection for auto-hotkeys and will only triggered if their average number of jumps is above 15 as well.
Hyperscroll - This is likely allowed in most servers, but has been included for communities that dont allow it. Hyperscroll is a feature of some mice that allows them to unlock a near-frictionless mouse wheel, and spin it. It will keep spinning, sending massive amounts of jump commands to the server. Many who use this feature actually do worse, but if used properly, can easily be used to reach rediculous perfect ratios (~0.7).
fps_max'ing - Detects players who put their fps_max value below a CVar defined value (60 by default), allowing them to hit really high perf rates.
If set by cvar, this plugin will auto-notify every admin (with the "ban" flag) in the server if a player is flagged for any of the above. The notification is in all red so that it is hard to miss, and will list what the player is flagged for. These notifications are given a configurable cooldown period, to avoid chat spamming the admins.
The hyperscroll detection is pretty configurable. By default, it only flags players who have perfect jump ratios above 60% (I only set this so that I dont waste my time with hyperscrollers who cant even do it well), who have at least 16 (configurable) jumps with 16 (configurable) or more jump commands sent to the server between jumps. Additionally, to further prevent false positives, you can set it to only log stats and notify admins if the player is detected 3 rounds in a row.
All three of the above detections log to separate files inside of a subfolder in SM logs.
You can reset a players (or all players) jump stats. This can be used if a player is asked to turn something off, and you want to start fresh on their stats to see if they did.
This plugin has full admin menu integration. This is especially useful when you want to target one specific player, but their name is all special characters (and you're too lazy to copy/paste). Simply pick from player lists.
Flagged players will only be logged once per map, unless they exceed their previous perf by the value set by tjs_flag_relogdiff (5% by default). No need to flood the logs.
The jump stats output is formatted so that player names are not at the beginning. This is so that an admin can quickly scroll through stats for all players and the values they are looking for (e.g. perfect ratios, or average jumps) are all in the same place.
Note: The current version has the admin menu functionality removed. To add it back, you can put a setup in adminmenu_custom.txt (addons/sourcemod/configs/):
Adjust these in the auto-generated cfg located in cstrike/cfg/sourcemod/togsjumpstats.cfg
tjs_flag_relogdiff - Players are re-logged in the same map if they are flagged with a perf that is this much higher than the previous one.
tjs_fpsmax_minvalue - Minimum value of fps_max to enforce. Players below this will be flagged.
tjs_gen_cooldown - Cooldown time between chat notifications to admins for any given clients that is flagged.
tjs_gen_flag - Players with this flag will be able to check stats. Set to "public" to let everyone use it.
tjs_gen_log - Enable logging player jump stats if a player is flagged (0 = Disabled, 1 = Enabled).
tjs_gen_notifications - Enable admin chat notifications when a player is flagged (0 = Disabled, 1 = Enabled).
tjs_hyp_mult_rounds - Clients will not be flagged (in logs and admin notifications) for hyperscrolling until they are noted 3 rounds in a row (0 = Disabled, 1 = Enabled).
tjs_hyp_numjumps - Number of jump commands to use as a threshold for flagging hyperscrollers.
tjs_hyp_perf - Above this perf ratio (in combination with the other hyperscroll cvars), players will be flagged for hyperscrolling.
tjs_hacks_perf - Above this perf ratio (ratios range between 0.0 - 1.0), players will be flagged for hacks.
tjs_hyp_threshold - Out of the last 30 jumps, the number of jumps that must be above tjs_numjumps to flag player for hyperscrolling.
tjs_pat_count - Number of jump out of the last 30 that must match to be flagged for pattern jumps (scripts).
tjs_adm_flag - Players with this flag will see notifications when players are flagged. Set to "public" to let everyone use it.
tjs_sbban_hacks - Ban length in minutes (0 = perm, -1 = disabled) for hacks detection.
tjs_sbban_pat - Ban length in minutes (0 = perm, -1 = disabled) for pattern jumps detection.
tjs_sbban_hyp - Ban length in minutes (0 = perm, -1 = disabled) for hyperscroll detection.
tjs_sbban_fpsmax - Ban length in minutes (0 = perm, -1 = disabled) for FPS Max abuse detection.
sm_jumps <target> - Prints to console the jump stats for the target.
sm_stopmsgs - [Admins] Disables admin notifications and logging for the rest of the map. This can be used if a map provides false positives (particularly for hyperscroll).
sm_enablemsgs - [Admins] Re-enables admin notifications and stats logging, after it has been disabled.
sm_msgstatus - [Admins] Checks the status of admin notifications (enabled or disabled). This is not really needed, since they can just check the admin menu and see if the text to disable it reads 'Enable" instead, but nonetheless, it is currently coded in.
sm_resetjumps <target> - [Admins] Resets jump stats for a player.
The first part will be either 0 (if unflagged), or 1 (if flagged).
The next number ranges from 0 to 100%. It is the ratio of jumps that are perfect (jump command sent to server exactly when the player touches the ground). A stat of 65% would mean 65% of the time they have "perfect jumps" (which is pretty good). Most players using their spacebar (the above examples) wont have perfect ratios much higher than 20%...but dont assume hacks if they somehow have a good day and are at 50% or something that is normal for mouse wheel jumpers.
The next two numbers are the 'average number of jump commands sent to the server between jumps', and the 'average speed'. Low numbers (0-3) for 'average jump commands sent' typically indicate that the player is using a keyboard. Mid-ranged numbers (3-13 ish) typically indicate the player is using a mouse wheel. High numbers typically indicate hyperscroll, or can be auto-hotkeys (if repeating numbers).
Next section is all the player info, followed by the map name.
The final section is the 'number of jump commands sent to the server between jumps' for the last 30 jumps. This provides a more in-depth look into what is going on. Do not be surprised by random, outlying numbers that are large, as that is typically from jumping off some high place in a map, giving the player time to send a lot more jump commands while in air. Pay attention to the patterns and trends, and what they indicate.
Sample Stats for mouse wheel jumps
These players are legit. Their perfect ratios might range from 0 up to about 70% or so (if theyre extremely good). Most wont get above 65% or so.
Note the first one is NOT flagged, although it IS a hyperscroll. I pulled this one from a player in the server, and the others from my logs. As stated above, often players do worse (4% perf in the example below) when using hyperscroll. However, If used right, they can reach 65% - 75% perfect ratio. Since I didnt want to bother with telling all the bad bhoppers to stop hyperscrolling, I made it so only ones with perf above 60% (configurable) would be flagged (or rather, whatever tjs_hyp_perf is set to).
Note the repeating numbers, occasionally with an extra spacebar in there. These indicate that their computer is automatically sending the same number of jump commands every time (auto-hotkey), something that would not happen with natural timing.
* Initial release.
* Changelog started.
* Fixed issue with players still being flagged for hyperscroll after rejoining server (due to not clearing the "3 rounds in a row" booleans).
* Made sm_jumps command public so that regular players can use it (per request).
* Removed commands to target all and converted to multi-target filters.
* Converted all commands to console commands and to use the "HasFlags" filter.
* Added a few lines to ignore bots.
* Added a cvar for the number of identical jump numbers required to flag someone for pattern jumps. It was hard coded at 15 before.
* Added cvar to set required flags for using stats commands.
* When players are flagged and admins get the chat message, it now prints the stats to chat as well.
* Added code to make it so that after players are logged, it will add another log if they make it to higher perf rates, although there will still be a small cooldown time (10 sec).
* Made a parallel version with no admin menu, since the admin menu can be made through the adminmenu_custom.txt file from sourcemod.
* Reformatted stats output.
* Removed cool down time on re-log functionality, converting it to a cvar of what amount of a higher perf it must be to re-log.
* Added CS:GO Support (chat colors, etc).
* Added tag at the end of logs if they were already flagged, and the log is just due to higher perf while still passing threshold.
* Added check on round start for all players fps_max values to be above or equal to a set threshold (60 by default).
* Fixed opposite sign needed for relogging if perf higher than when logged + cvar tolerance.
* Added notifications for admins 30 seconds after connect to tell them if a player was flagged before they joined.
* Removed <tog> include.
* Changed g_iDisableAdminMsgs to boolean, since it was being used like one (only two options).
* Replaced global cache of game folder name (for checking if CS:GO) with global cached boolean, thus not needing to check the game name each time, but rather check boolean value.
* Cleaned up variable names all throughout the plugin and did general cleanup, deleting unneccesary code (havent touched this plugin in a long time).
* Broke apart GetClientStats formatting function to enforce 32 arg max (it had 35).
* Converted to new syntax.
* Made admin notification after connecting only show if a player has been flagged.
* Added code to create log folder if it doesn't exist.
* Fixed logs indication regarding whether a player has "already been flagged this map".
* Changed console stats output from using %d to use %i for the "flagged" boolean output. Shouldn't make a difference as I can see, but made the change due to a report of the flag not functioning properly.
* Added cvar for admin notification flags.
* Minor edit to low fps_max detection - zero values were supposed to be allowed, but slipped through due to float decimals extending past string compared against. Fixed.
* Added options to use sourcebans to ban for detections (defaults to bans for hacks only - scripts, hyperscroll, and fps_max abuse default to no ban). 4 new CVars.
* Added alternative if sourcebans is not enabled. Renamed ban length CVars to no longer imply sourcebans (SB).
Install contents of zip folder in your cstrike/addons/sourcemod directory.