Movement Detection Modules
5 ModulesServer-authoritative physics, velocity, displacement, collision, and jump trajectory detectors.
# Overview
Because Roblox grants client physics authority over character models, movement exploits are the most common cheat vector. RAC counters this using a suite of 5 dedicated server-side movement validators:
SpeedDetector: Horizontal displacement monitor (XZ plane).FlyDetector: Airtime thresholding and downward floor raycasting.TeleportDetector: Sudden large-distance positional delta tracker.NoclipDetector: Continuous spatial raycasting against collidable geometry.JumpDetector: Vertical velocity spikes and multi-jump counting.
# 1. SpeedDetector
Monitors horizontal displacement between consecutive server ticks.
# Detection Logic
- Isolates movement to the horizontal plane ($\text{XZ}$) to avoid penalizing players for gravity-assisted falls.
- Computes measured speed: $$v_{\text{measured}} = \frac{\sqrt{\Delta X^2 + \Delta Z^2}}{\Delta t}$$
- Dynamically calculates the threshold: $$v_{\text{max}} = \max(\text{Humanoid.WalkSpeed}, \text{MaxWalkSpeedTolerance}) + \text{PingBuffer}$$
- If $v_{\text{measured}} > v_{\text{max}}$, a violation is reported.
# Anti-False-Positive Protections
- Seat Exemption: Automatically skipped if
humanoid.Sitistrueor if the player is attached to aVehicleSeat. - Ping Buffering: Dynamically grants up to $10.0$ studs/s buffer based on the player's round-trip latency (
playerState.ping * 12.0).
# 2. FlyDetector
Detects unauthorized levitation, CFrame hovering, and upward velocity injection.
# Detection Logic
- On each tick, checks if the player is in the
Freefallstate or airborne. - Casts a downward raycast from
HumanoidRootPart.Position($8.0$ studs length) usingWorkspace:Raycastto detect solid terrain or parts beneath the player. - If no floor is hit, increments
playerState.continuousAirTime. - If airtime exceeds
Config.Detectors.Fly.MaxAirTimeSeconds(default $2.8\text{s}$), a Flight anomaly is flagged.
# 3. TeleportDetector
Catches instantaneous jumps across maps, stage skipping, and exploit-driven CFrame overwrites.
# Detection Logic
- Calculates total 3D displacement: $$\Delta d = |\mathbf{p}t - \mathbf{p}{t-1}|$$
- If $\Delta d > (\text{MaxDistancePerSecond} \cdot \Delta t)$, the move is flagged as a teleport.
- Server Teleport Exemption: When the server legitimately teleports a player via
Engine:TeleportPlayer(player, targetCFrame), aTeleportGracePeriodtag is granted, preventing false flags.
# 4. NoclipDetector
Prevents players from passing through walls, security doors, or terrain boundaries.
# Detection Logic
- Performs a line raycast between the player's previous verified position ($\mathbf{p}_{t-1}$) and their current position ($\mathbf{p}_t$).
- Filters out non-collidable parts (
CanCollide == false), character accessories, and parts with transparency $> 0.9$ (cosmetic glass or water). - If a solid barrier was crossed without collision, the detector flags Noclip and immediately triggers a position rollback to $\mathbf{p}_{t-1}$.
# 5. JumpDetector
Prevents infinite jumping, high-jumping, and moon-gravity exploits.
# Detection Logic
- Monitors vertical velocity spikes: $$v_Y = \frac{\Delta Y}{\Delta t}$$
- Tracks jump count within a 2-second sliding window (
MaxJumpsPerTwoSeconds = 3). - If a player initiates an upward jump impulse while already in mid-air (without touching a ladder or truss), Infinite Jump is flagged.
# Next Steps
- Explore Combat Detectors for reach and hit validation.
- Learn about Player State Detectors for WalkSpeed and health tampering.