Forum > Scripts >

Roblox Rivals Silent Aim

New Reply

Posts: 1

Threads: 1

Joined: Jan, 2026

Reputation: 0

Posted

I made Rivals Silent Aim and it seems to be detected.

If you put 150 damage, you have to die, but sometimes you don't die even if you put 200 damage

Does anyone know about this?

 

The script source is as follows

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local CollectionService = game:GetService("CollectionService")
local Camera = workspace.CurrentCamera
local LocalPlayer = Players.LocalPlayer


local Settings = {
    Enabled = true,
    FOV = 150,
    TargetPart = "Head",
}


local function GetClosestTarget()
    local closest, closestDist = nil, Settings.FOV
    local screenCenter = Camera.ViewportSize / 2


    for _, entity in ipairs(CollectionService:GetTagged("Entity")) do
        if entity == LocalPlayer.Character then continue end
        
        local hum = entity:FindFirstChildOfClass("Humanoid")
        local root = entity:FindFirstChild("HumanoidRootPart")
        local targetPart = entity:FindFirstChild(Settings.TargetPart)
        
        if not hum or hum.Health <= 0 or not targetPart then continue end


        local pos, onScreen = Camera:WorldToViewportPoint(targetPart.Position)
        if onScreen then
            local dist = (Vector2.new(pos.X, pos.Y) - screenCenter).Magnitude
            if dist < closestDist then
                closest = entity
                closestDist = dist
            end
        end
    end
    return closest
end


local Utility = require(ReplicatedStorage:WaitForChild("Modules"):WaitForChild("Utility"))
local oldRaycast;


oldRaycast = hookfunction(Utility.Raycast, function(self, origin, target, distance, filter, ...)
    if not checkcaller() and Settings.Enabled and (distance == 999 or distance == 400) then
        local targetEntity = GetClosestTarget()
        if targetEntity then
            local targetPart = targetEntity:FindFirstChild(Settings.TargetPart)
            if targetPart then
                return oldRaycast(self, origin, targetPart.Position, distance, filter, ...)
            end
        end
    end
    
    return oldRaycast(self, origin, target, distance, filter, ...)
end)
  • 0

  • Comment

YourBot

YourBot

Posts: 19

Threads: 0

Joined: Jun, 2023

Reputation: 0

Replied

Probably The server is rejecting or correcting the hit.

that's Why silent aim gets detected faster than normal aim

Silent aim usually alters hit registration, not player view.

That creates mismatches like:

Camera is not pointing at the target

Ray direction doesn’t match aim direction

Hit occurs without proper screen alignment

Headshots at impossible angles or through partial cover

 

Servers detect this via:

Ray-angle delta checks

Hitbox plausibility checks

Statistical headshot analysis

Temporal consistency (reaction time)

So even if it "works somtimes," it becomes statistically obvious very fast.

Raising damage makes it more suspicious, not stronger.

That’s why 200 damage doesn’t always kill — the server corrected or denied it.

 

try this script:

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local CollectionService = game:GetService("CollectionService")
local Camera = workspace.CurrentCamera
local LocalPlayer = Players.LocalPlayer

local Settings = {
    Enabled = true,
    FOV = 150,
    TargetPart = "Head", -- Head ensures 150+ damage for a 1-shot
}

-- Improved target selector with basic visibility check.
local function GetClosestTarget()
    local closest, closestDist = nil, Settings.FOV
    local screenCenter = Camera.ViewportSize / 2

    for _, entity in ipairs(CollectionService:GetTagged("Entity")) do
        if entity == LocalPlayer.Character then continue end
        
        local hum = entity:FindFirstChildOfClass("Humanoid")
        local targetPart = entity:FindFirstChild(Settings.TargetPart)
        
        -- Check if player is alive and exists.
        if not hum or hum.Health <= 0 or not targetPart then continue end

        local pos, onScreen = Camera:WorldToViewportPoint(targetPart.Position)
        if onScreen then
            local dist = (Vector2.new(pos.X, pos.Y) - screenCenter).Magnitude
            if dist < closestDist then
                -- Visibility Check: Prevents "0 damage" wallbangs that get rejected by the server.
                local ray = Ray.new(Camera.CFrame.Position, (targetPart.Position - Camera.CFrame.Position).Unit * 500)
                local hit = workspace:FindPartOnRayWithIgnoreList(ray, {LocalPlayer.Character, entity})
                
                if not hit then
                    closest = entity
                    closestDist = dist
                end
            end
        end
    end
    return closest
end

local Utility = require(ReplicatedStorage:WaitForChild("Modules"):WaitForChild("Utility"))
local oldRaycast;

-- Fix: Ensuring the raycast redirection is perfectly aligned for server validation
oldRaycast = hookfunction(Utility.Raycast, function(self, origin, target, distance, filter, ...)
    -- Rivals uses 999 or 400 for weapon raycasts
    if not checkcaller() and Settings.Enabled and (distance == 999 or distance == 400) then
        local targetEntity = GetClosestTarget()
        if targetEntity then
            local targetPart = targetEntity:FindFirstChild(Settings.TargetPart)
            if targetPart then
                -- The Fix: We pass the exact Position to the original raycast
                -- This forces the game to register a hit on the specific hitbox bone
                return oldRaycast(self, origin, targetPart.Position, distance, filter, ...)
            end
        end
    end
    
    return oldRaycast(self, origin, target, distance, filter, ...)
end)

 

 

 

  • 0

  • Comment

I Help People, Ask me.

Login to unlock the reply editor

Add your reply

Users viewing this thread:

( Members: 0, Guests: 1, Total: 1 )