SOURCE | Silent Aim
Key Required Verified

SOURCE | Silent Aim

Pistol Arena [UPD]binarybinary 3.2K views 1.2K executesUpdated Mar 2, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•168 lines (4929 chars)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local LocalPlayer = Players.LocalPlayer
local Camera = workspace.CurrentCamera

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

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

local NonHeadParts = {
	"Torso",
	"HumanoidRootPart",
	"UpperTorso",
	"LowerTorso",
	"Left Arm",
	"Right Arm",
	"Left Leg",
	"Right Leg",
	"LeftUpperArm",
	"LeftLowerArm",
	"LeftHand",
	"RightUpperArm",
	"RightLowerArm",
	"RightHand",
	"LeftUpperLeg",
	"LeftLowerLeg",
	"LeftFoot",
	"RightUpperLeg",
	"RightLowerLeg",
	"RightFoot",
}

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

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

local function GetRandomBodyPart(TargetCharacter)
	if math.random(1, 100) <= Settings.HeadChance then
		local Head = TargetCharacter:FindFirstChild("Head") or TargetCharacter:FindFirstChild("HeadHitbox")
		if Head then
			return Head, true
		end
	end
	local ValidParts = {}
	for _, PartName in ipairs(NonHeadParts) do
		local Part = TargetCharacter:FindFirstChild(PartName)
		if Part then
			table.insert(ValidParts, Part)
		end
	end
	if #ValidParts > 0 then
		return ValidParts[math.random(1, #ValidParts)], false
	end
	local Head = TargetCharacter:FindFirstChild("Head") or TargetCharacter:FindFirstChild("HeadHitbox")
	if Head then
		return Head, true
	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 IsVisible(Origin, TargetPosition)
	local Params = RaycastParams.new()
	Params.FilterType = Enum.RaycastFilterType.Exclude
	local FilterList = {}
	if LocalPlayer.Character then
		table.insert(FilterList, LocalPlayer.Character)
	end
	local EffectsFolder = workspace:FindFirstChild("Effects")
	if EffectsFolder then
		table.insert(FilterList, EffectsFolder)
	end
	for _, Player in ipairs(Players:GetPlayers()) do
		if Player.Character then
			table.insert(FilterList, Player.Character)
		end
	end
	Params.FilterDescendantsInstances = FilterList
	local Direction = TargetPosition - Origin
	local Result = workspace:Raycast(Origin, Direction, Params)
	return Result == nil
end

local function GetClosestEnemy()
	local ClosestPlayer = nil
	local ClosestDistance = math.huge
	for _, Player in ipairs(Players:GetPlayers()) do
		if Player ~= LocalPlayer and Player.Character then
			local Character = Player.Character
			local Humanoid = Character:FindFirstChildOfClass("Humanoid")
			if Humanoid and Humanoid.Health > 0 and not Character:FindFirstChild("SpawnProtection") then
				local HRP = Character:FindFirstChild("HumanoidRootPart")
				if HRP then
					local InFOV, Distance = IsInFOV(HRP.Position)
					if InFOV and Distance < ClosestDistance then
						ClosestPlayer = Player
						ClosestDistance = Distance
					end
				end
			end
		end
	end
	return ClosestPlayer
end

local OldNamecall
OldNamecall = hookmetamethod(game, "__namecall", newcclosure(function(Self, ...)
	local Method = getnamecallmethod()
	local Args = {...}

	if Settings.SilentAimEnabled and Method == "FireServer" and #Args >= 1 and typeof(Args[1]) == "table" then
		local Packet = Args[1]
		if typeof(Packet.origin) == "Vector3" and typeof(Packet.direction) == "Vector3" then
			local TargetPlayer = GetClosestEnemy()
			if TargetPlayer and TargetPlayer.Character then
				local Character = TargetPlayer.Character
				local Humanoid = Character:FindFirstChildOfClass("Humanoid")
				if Humanoid and Humanoid.Health > 0 then
					local TargetPart, IsHeadshot = GetRandomBodyPart(Character)
					if TargetPart then
						local Origin = Packet.origin
						if IsVisible(Origin, TargetPart.Position) then
							Packet.direction = (TargetPart.Position - Origin).Unit
							Packet.hitPosition = TargetPart.Position
							Packet.hitInstance = TargetPart
							Packet.hitHumanoid = Humanoid
							Packet.IsHeadshot = IsHeadshot or TargetPart.Name == "Head" or TargetPart.Name == "HeadHitbox"
							setnamecallmethod(Method)
							return OldNamecall(Self, Packet)
						end
					end
				end
			end
		end
	end

	setnamecallmethod(Method)
	return OldNamecall(Self, ...)
end))

Features & Information

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

Community Comments (6)

wistfulwandererwistfulwandererMar 2, 2026

w

HCZyuHCZyuMar 6, 2026

Why does the circle move with my fingers?

Replying to @HCZyu
0x0500x050Mar 18, 2026

@HCZyu get a pc :D

corneIiuscorneIiusApr 10, 2026

how do i use this? is there a keybind?

QcsKQcsKApr 11, 2026

doesnt work brother fix it aimbot or anythign doesnt work js a circle unsfull fix it

ZaeeeZaeeeAug 15, 2026

i recommend locking the radius fov on the center because the mobile players are unable to use the script.

More Scripts for Pistol Arena [UPD]