Anti No Recoil

Early Access Anti No Recoil 1.0.0

Analyzes player spray patterns and flags unusually accurate recoil control
Dependencies
Recoil Tracker (Required)
AntiNoRecoil.png

giphy.gif



This plugin helps you spot players with suspicious recoil control by monitoring their weapon spray accuracy. Using Recoil Tracker, each shot is recorded and evaluated based on how closely it matches the expected spray angle. When accuracy gets too high or patterns deviate too little, players are flagged. Admins can review detailed shot breakdowns via a built-in UI with shot-by-shot playback, body hit zones, and full spray metrics. Supports configurable thresholds, per-weapon blacklisting, and optional Discord alerts.

Not Proof of Cheating

Anti No Recoil shows you players who may be controlling recoil too well, but that doesn't mean they're cheating. Some players are just very good. The plugin provides data and context to help you investigate, not to make accusations. Always review manually and take player skill into account before taking action.

Recoil Tracker Required

Anti No Recoil uses recoil patterns generated by the Recoil Tracker plugin to evaluate how accurate a player's spray is. These patterns are not built-in, you must manually generate and save recoil data for each weapon you want to track.

If a weapon doesn't have a pattern saved in Recoil Tracker, this plugin will not evaluate or flag that weapon's spray patterns.
I have shared some recoil patterns in this thread.

Generating Recoil Patterns

  1. Equip the weapon you want to record (no infinite ammo or recoil control).
  2. Crouch, aim, and shoot a full magazine without moving your mouse.
  3. Use the Recoil Tracker command:
    • /rt.record start - Start recording.
    • /rt.record save - Save the pattern after shooting.
Patterns are saved to oxide/data/Recoils and used automatically by Anti No Recoil when comparing player recoil behavior.

Permissions

  • antinorecoil.admin - Allows access to review commands and UI.
  • antinorecoil.ignore - Exempts the player from being tracked or flagged.

Commands

  • anr.review <playerNameOrId> - Starts a review session for a specific player.
  • anr.track add <playerNameOrId> - Adds a player to the whitelist if tracking is restricted.
  • anr.track remove <playerNameOrId> - Removes a player from the whitelist.
  • anr.track list - Shows the list of currently tracked players.

Configuration

JSON:
{
  "Version": "1.0.0",
  "Shots Required Before Recoil Analysis": 10,
  "Accuracy Percentage Required To Flag As Suspicious (0 - 100)": 95.0,
  "Allowed Deviation From Expected Recoil Pattern": 5.0,
  "Ignore Hits Closer Than This Distance": 30.0,
  "Count NPC Hits": false,
  "Track Only Whitelisted Players": false,
  "Weapon Blacklist (short‑names)": [
    "pistol.python",
    "pistol.semiauto",
    "pistol.revolver",
    "pistol.nailgun"
  ],
  "Maximum Suspicious Records Stored Per Player": 10,
  "Wipe Data On New Save": true,
  "Auto Open Review Ui On New Violation": false,
  "Discord Webhook Url (Leave blank to disable)": ""
}
  • Shots Required Before Recoil Analysis - Minimum number of shots before evaluating accuracy and pattern.
  • Accuracy Percentage Required To Flag As Suspicious - Accuracy threshold that must be reached to consider a spray suspicious.
  • Allowed Deviation From Expected Recoil Pattern - How far a shot can deviate from the expected pattern before it's no longer considered a match.
  • Ignore Hits Closer Than This Distance - Minimum distance for a shot to be counted (helps reduce false flags from close-range fights).
  • Count NPC Hits - Whether hits on npcs should be considered valid when evaluating suspicious behavior.
  • Track Only Whitelisted Players - Only players explicitly added to the tracking list will be monitored.
  • Weapon Blacklist - List of weapon short names that will be excluded from tracking.
  • Maximum Suspicious Records Stored Per Player - How many violation records to store per player before older ones are deleted.
  • Wipe Data On New Save - If true, clears all stored violation data on new map save.
  • Auto Open Review Ui On New Violation - Automatically opens the review UI for admins when a new suspicious spray is recorded.
  • Discord Webhook Url - Discord Webhook to send alerts to; leave blank to disable integration.

Stored Data

JSON:
{
  "Tracked Players": [
    76561198000000000,
    76561198000000001
  ]
}
  • Tracked Players - List of Steam IDs currently whitelisted for tracking (used only if Track Only Whitelisted Players is enabled).
Each tracked player has a file named with their Steam ID, like AntiNoRecoil/76561198000000000.json.
JSON:
{
  "Player Id": 76561198000000000,
  "Recoil Records": [
    {
      "Recorded At": "2024-06-01T14:33:22Z",
      "Weapon Short Name": "rifle.ak",
      "Shots Fired": 30,
      "Shots Hit": 29,
      "Accuracy Percent": 96.7,
      "Grid": "J14",
      "Shots": [
        {
          "Shot Index": 0,
          "Actual Value": -0.3,
          "Expected Value": -0.2,
          "Was Hit": true,
          "Hit Area": "Chest",
          "Damage Dealt": 35.0,
          "Hit Target Name": "EnemyPlayer",
          "Hit Target Id": 76561198099999999,
          "Distance": 41.5
        }
      ]
    }
  ]
}
  • Player Id - The Steam ID of the player being tracked.
  • Recoil Records - List of individual violation entries detected for that player
Each Recoil Record contains:
  • Recorded At - Timestamp (UTC) of when the suspicious spray was recorded.
  • Weapon Short Name - Internal short name of the weapon used (e.g. rifle.ak).
  • Shots Fired - Total number of shots in the spray.
  • Shots Hit - Number of shots that hit a target.
  • Accuracy Percent – Percentage of shots that landed during this spray.
  • Grid - Approximate grid location where the spray occurred.
  • Shots - Full shot-by-shot breakdown for the entire spray.
Each Shot inside Shots includes:
  • Shot Index - Order of the shot in the spray.
  • Actual Value - The actual recorded recoil value for the shot.
  • Expected Value - The expected recoil value based on weapon pattern.
  • Was Hit - Whether the shot hit something.
  • Hit Area - Body part hit (e.g. Head, Chest, etc.)
  • Damage Dealt - How much damage this shot caused.
  • Hit Target Name - Player name of the target hit (if applicable).
  • Hit Target Id - Steam ID of the target hit.
  • Distance - Distance in meters between shooter and target.
Author
VisEntities
License duration
Unlimited
Price
30.00 USD
First release
Last update

Ratings

0.00 star(s) 0 reviews

Parent plugin

  • Recoil Tracker
    Recoil Tracker
    Records weapon recoils and analyzes player shot accuracy against them

Also by VisEntities

Back
Top
Chat commands start with a /, while console commands can be entered directly in the F1 console or server console. Use find <keyword> in console to search for available commands related to the plugin. Parameters in < > are required, while [ ] are optional.
This plugin uses Oxide's permission system. Grant or revoke permissions using oxide.grant and oxide.revoke. You can assign them to individual players or groups using their Steam id or group name.
Settings are stored in the config file found under the config/ directory. You can edit this file manually, then reload the plugin to apply your changes.
Persistent data is saved in the data/ directory. This includes things like saved settings, usage stats, or player progress depending on the plugin. Deleting a data file will reset stored progress or customizations.
Language files are located in the lang/ folder. To translate messages, copy the en.json file into your target language folder (e.g. fr, de) and edit the values. Reload the plugin after changes to apply new messages.
This section lists public methods exposed by the plugin for use in other plugins. You can call these via the CallHook method. Make sure the plugin is loaded before calling its API to avoid null reference errors.
These are custom hooks that other plugins can listen for. Simply define a method with the same name and expected parameters in your plugin to handle the event. Hooks are triggered at key moments and are useful for extending or reacting to plugin behavior.
These hooks are injected into the game's code using Harmony. They let the plugin run code at key points in the game's internal logic. You can return values to block or modify behavior. Use with caution — these are powerful and can affect core mechanics.
Cart