SOURCE | Silent Aim
Key Required Verified

SOURCE | Silent Aim

[🔥NEW SNIPER] Sniper Arenabinarybinary 11.6K views 4.6K executesUpdated Mar 3, 2026
5.0/ 5(3 votes)
30100% Positive
Lua Script•252 lines (6838 chars)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalPlayer = Players.LocalPlayer
local Camera = workspace.CurrentCamera

workspace:GetPropertyChangedSignal("CurrentCamera"):Connect(function()
	Camera = workspace.CurrentCamera
end)

local Settings = {
	SilentAimEnabled = true,
	HeadChance = 10,
	HitChance = 100,
	FOVRadius = 180,
}

local NonHeadParts = {"UpperTorso", "LowerTorso", "HumanoidRootPart", "RightUpperArm", "LeftUpperArm", "RightUpperLeg", "LeftUpperLeg"}

local FOVCircle = Drawing.new("Circle")
FOVCircle.Visible = true
FOVCircle.Thickness = 1
FOVCircle.Radius = Settings.FOVRadius
FOVCircle.Transparency = 0.7
FOVCircle.Color = Color3.fromRGB(255, 255, 255)
FOVCircle.Filled = false

local TargetDot = Drawing.new("Circle")
TargetDot.Visible = false
TargetDot.Thickness = 1
TargetDot.Radius = 4
TargetDot.Color = Color3.fromRGB(255, 0, 0)
TargetDot.Filled = true
TargetDot.Transparency = 1

local EntityService = require(ReplicatedStorage.Remote.EntityService)
local CameraController = require(ReplicatedStorage.Client.CameraController)
local ClientShootableComponent = require(ReplicatedStorage.Client.CombatController.ClientComponent.ClientShootableComponent)

local function GetEntityCharacter(Entity)
	local Inst = Entity.Instance
	if not Inst then
		return nil
	end
	if Inst:IsA("Player") then
		return Inst.Character
	end
	if Inst:IsA("Model") then
		return Inst
	end
	return nil
end

local function FindEntityPosition(EntityModel)
	local HRP = EntityModel:FindFirstChild("HumanoidRootPart")
	if HRP and HRP:IsA("BasePart") then
		return HRP.Position
	end
	local Head = EntityModel:FindFirstChild("Head")
	if Head and Head:IsA("BasePart") then
		return Head.Position
	end
	local Collider = EntityModel:FindFirstChild("Collider")
	if Collider then
		for _, Part in Collider:GetChildren() do
			if Part:IsA("BasePart") then
				return Part.Position
			end
		end
	end
	local Humanoid = EntityModel:FindFirstChildOfClass("Humanoid")
	if Humanoid and Humanoid.RootPart then
		return Humanoid.RootPart.Position
	end
	return nil
end

local function FindTargetPart(EntityModel, WantHead)
	if WantHead then
		local Head = EntityModel:FindFirstChild("Head")
		if not Head then
			Head = EntityModel:FindFirstChild("Head", true)
		end
		if Head and Head:IsA("BasePart") then
			return Head, true
		end
	end

	local Collider = EntityModel:FindFirstChild("Collider")
	if Collider then
		local Parts = {}
		for _, Part in Collider:GetChildren() do
			if Part:IsA("BasePart") then
				table.insert(Parts, Part)
			end
		end
		if #Parts > 0 then
			return Parts[math.random(1, #Parts)], false
		end
	end

	local Shuffled = table.clone(NonHeadParts)
	for I = #Shuffled, 2, -1 do
		local J = math.random(1, I)
		Shuffled[I], Shuffled[J] = Shuffled[J], Shuffled[I]
	end
	for _, PartName in Shuffled do
		local Part = EntityModel:FindFirstChild(PartName)
		if not Part then
			Part = EntityModel:FindFirstChild(PartName, true)
		end
		if Part and Part:IsA("BasePart") then
			return Part, false
		end
	end

	local HRP = EntityModel:FindFirstChild("HumanoidRootPart")
	if HRP and HRP:IsA("BasePart") then
		return HRP, false
	end
	return nil, false
end

local function IsInFOV(WorldPosition)
	if not Camera then
		return false, math.huge
	end
	local ScreenPos, OnScreen = Camera:WorldToViewportPoint(WorldPosition)
	if not OnScreen then
		return false, math.huge
	end
	local MousePos = UserInputService:GetMouseLocation()
	local Distance = (Vector2.new(ScreenPos.X, ScreenPos.Y) - MousePos).Magnitude
	return Distance <= Settings.FOVRadius, Distance
end

local function GetAllEnemyEntities()
	local Enemies = {}
	local LocalEntity = EntityService.GetLocalEntity()
	if not LocalEntity or not LocalEntity.World then
		return Enemies
	end

	local WorldEntities = LocalEntity.World.EntitiesByTeam
	if not WorldEntities then
		return Enemies
	end

	for _, TeamDict in pairs(WorldEntities) do
		local Items = TeamDict._items or TeamDict
		for _, Entity in pairs(Items) do
			if not EntityService.IsLocalEntity(Entity) and Entity:IsAlive() then
				local Character = GetEntityCharacter(Entity)
				if Character then
					local Humanoid = Character:FindFirstChildOfClass("Humanoid")
					if Humanoid and Humanoid.Health > 0 then
						table.insert(Enemies, Character)
					end
				end
			end
		end
	end

	return Enemies
end

local function GetClosestEnemy()
	local Enemies = GetAllEnemyEntities()
	local ClosestModel = nil
	local ClosestDistance = math.huge
	for _, Model in Enemies do
		local Position = FindEntityPosition(Model)
		if Position then
			local InFOV, Distance = IsInFOV(Position)
			if InFOV and Distance < ClosestDistance then
				ClosestModel = Model
				ClosestDistance = Distance
			end
		end
	end
	return ClosestModel
end

local SilentTarget = nil

RunService.RenderStepped:Connect(function()
	FOVCircle.Position = UserInputService:GetMouseLocation()
	FOVCircle.Radius = Settings.FOVRadius
	FOVCircle.Visible = Settings.SilentAimEnabled

	if Settings.SilentAimEnabled then
		local TargetModel = GetClosestEnemy()
		if TargetModel then
			local Position = FindEntityPosition(TargetModel)
			if Position then
				local ScreenPos, OnScreen = Camera:WorldToViewportPoint(Position)
				if OnScreen then
					TargetDot.Position = Vector2.new(ScreenPos.X, ScreenPos.Y)
					TargetDot.Visible = true
				else
					TargetDot.Visible = false
				end
			else
				TargetDot.Visible = false
			end
		else
			TargetDot.Visible = false
		end
	else
		TargetDot.Visible = false
	end
end)

local OldGetCombatOrigin
OldGetCombatOrigin = hookfunction(CameraController.GetCombatOrigin, newcclosure(function()
	local OrigCFrame, DetectAt = OldGetCombatOrigin()
	if SilentTarget then
		local NewCFrame = CFrame.lookAt(OrigCFrame.Position, SilentTarget.Position)
		return NewCFrame, DetectAt
	end
	return OrigCFrame, DetectAt
end))

local OldGetTargeting
OldGetTargeting = hookfunction(CameraController.GetTargeting, newcclosure(function()
	if SilentTarget then
		return SilentTarget.Position, SilentTarget.Part
	end
	return OldGetTargeting()
end))

local OldLocalShoot
OldLocalShoot = hookfunction(ClientShootableComponent.LocalShoot, newcclosure(function(Self, ...)
	if Settings.SilentAimEnabled and math.random(1, 100) <= Settings.HitChance then
		local TargetModel = GetClosestEnemy()
		if TargetModel then
			local WantHead = math.random(1, 100) <= Settings.HeadChance
			local TargetPart, IsHead = FindTargetPart(TargetModel, WantHead)
			if TargetPart then
				SilentTarget = {
					Part = TargetPart,
					Position = TargetPart.Position,
					IsHead = IsHead,
				}
			end
		end
	end
	local Result = OldLocalShoot(Self, ...)
	SilentTarget = nil
	return Result
end))

Features & Information

open source Silent Aim for Sniper Arena Note: This script property can be used and contributed to any community you choose.

Community Comments (13)

jaydenajkianjaydenajkianMar 3, 2026

wont work

binarybinaryMar 3, 2026

@jaydenajkian doesnt work for solara / xeno

Replying to @binary
jaydenajkianjaydenajkianMar 4, 2026

@binary i dont use xeno or solora

DexemoxDexemoxMar 3, 2026

i don't like how the functions look, but overall very good script 👍

binarybinaryMar 3, 2026

@Dexemox they are meant to be put in your own script hub thats why i wrote them like that

Replying to @binary
DexemoxDexemoxMar 3, 2026(edited)

@binary ah okay makes sense

binarybinaryMar 4, 2026

fixed

HCZyuHCZyuMar 6, 2026

Can you keep the loop fixed? It always follows my fingers

muhbintangmuhbintangMar 8, 2026

Not working

VivLolVivLolMar 10, 2026

using velocity here the weapon is not working prob its patched just update the script

binarybinaryMar 11, 2026

@VivLol Works perfectly for Synapse Z, Volt, and Pot*ium.

voltexvoltexMar 14, 2026

well xeno does have hookfunction and require so i dont see why it wouldnt be supported but yaknow

ghxstnewmainghxstnewmainMay 22, 2026

not working using pot*ium, cant shoot.

More Scripts for [🔥NEW SNIPER] Sniper Arena