FPS & Shooter Game Integration

FPS

Step-by-step integration for First-Person Shooters: Raycasting line-of-sight, fire rate caps, and bullet reach.

# Overview

Competitive First-Person Shooters on Roblox are prime targets for silent aim, wallbangs, and rapid-fire exploits. Integrating RAC into your firearm damage pipeline ensures that every bullet trajectory and hit is validated by the server before any humanoid takes damage.


# The Secure Gun Damage Pipeline

In an insecure gun system, the client sends a RemoteEvent stating: "I shot player X in the head for 100 damage at position (0, 50, 0)".

With RAC, the server validates:

  1. Is the target actually within the weapon's effective range?
  2. Did enough time elapse since the last shot?
  3. Is there a concrete wall or obstacle between the shooter and the victim?
-- ServerScriptService/WeaponServer.luau
local RAC = require(game.ServerScriptService.RAC.Core.Engine)
local FireWeaponRemote = game.ReplicatedStorage.Remotes.FireWeapon

FireWeaponRemote.OnServerEvent:Connect(function(player: Player, victimCharacter: Model, hitPart: BasePart)
    if not victimCharacter or not victimCharacter:IsA("Model") then return end
    
    local victimHumanoid = victimCharacter:FindFirstChildOfClass("Humanoid")
    if not victimHumanoid or victimHumanoid.Health <= 0 then return end

    -- 1. Base Weapon Configuration
    local baseDamage = 35
    local isHeadshot = hitPart and hitPart.Name == "Head"
    local claimedDamage = if isHeadshot then baseDamage * 2.0 else baseDamage

    -- 2. Validate hit via RAC
    local isValid, approvedDamage = RAC:ValidateHit(player, victimCharacter, claimedDamage, "Rifle")
    if not isValid then
        -- Exploit attempt: Hit rejected by server
        return
    end

    -- 3. Apply validated damage
    victimHumanoid:TakeDamage(approvedDamage)
end)

Update ServerScriptService/RAC/config.luau:

Config.Detectors.Combat.MaxRangedReachStuds = 600
Config.Detectors.Combat.ValidateLineOfSight = true
Config.Detectors.Combat.MinAttackIntervalSeconds = 0.06 -- ~16 shots/second max
Config.Detectors.Combat.MaxDamagePerHit = 150

# Next Steps