M
ScriptKeyless
pilgrammed open source aim assist for pc only
Pilgrammed: The Five ThronesDesktop compatible
Description
the script was entirely made by ai and its open source, it redirects the projectiles of ranged weapons to the closest enemy if toggled on like in the mobile vesion of pilgrammed(also doesnt work on low unc executors)
GAMEPilgrammed: The Five Thrones
UPDATEDOct 10, 2026
ACCESSKeyless
PLATFORMDesktop
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. Deal with caution.
--
-- Stay safe:
-- • Never log in on unofficial Roblox sites or lookalike domains.
-- • Real Roblox links use roblox.com (check the .com ending).
-- • Treat fake Roblox login / "claim reward" pages as phishing.
-- [[ End BloxScripts Risk Notice ]]
-- Silent Aim for Pilgrammed (bows / muskets / ranged) | toggleable GUI
-- Hooks CommonToolModule.Aim (the game's own aim calc) -> redirects to nearest enemy
-- RightShift shows / hides the GUI. Aim toggling is via the GUI button only.
-- Singleton: re-running collapses old hooks and disconnects old handlers first.
getgenv().SA = getgenv().SA or {}
local G = getgenv().SA
-- disconnect service-level connections left by previous runs of this script
if G.conns then
for _, c in ipairs(G.conns) do
pcall(function() c:Disconnect() end)
end
end
G.conns = {}
local function track(conn)
table.insert(G.conns, conn)
return conn
end
local Players = game:GetService("Players")
local UIS = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
local LocalPlayer = Players.LocalPlayer
local MobHelper = require(game:GetService("ReplicatedStorage").MobHelper)
local ClientGameData = require(game:GetService("ReplicatedStorage").ClientGameData)
local CTM = require(game:GetService("ReplicatedStorage").Modules.CommonToolModule)
-- Lock the game's own AimAssist to OFF at the table level (it has no wallcheck
-- and must never fire while our hook is active; also neuters stale script copies).
pcall(function()
if typeof(getmetatable) == "function" and typeof(setmetatable) == "function" then
local mt = getmetatable(ClientGameData)
if not (mt and mt.__SA_Lock) then
setmetatable(ClientGameData, {
__SA_Lock = true,
__index = function(t, k)
if k == "AimAssist" then return nil end
return rawget(t, k)
end,
__newindex = function(t, k, v)
if k == "AimAssist" then return end
rawset(t, k, v)
end,
})
end
else
ClientGameData.AimAssist = nil
end
end)
-- Shared config persists across re-runs so the GUI toggle always controls the live hook.
G.config = G.config or {}
local Config = G.config
if Config.Enabled == nil then Config.Enabled = true end
if Config.Range == nil then Config.Range = 400 end
if Config.TargetPart == nil then Config.TargetPart = "Head" end
if Config.RangedOnly == nil then Config.RangedOnly = true end
Config.GuiKey = Enum.KeyCode.RightShift -- show / hide GUI only
Config.WallCheck = nil -- wallcheck removed per user request
local OldAim = nil
local function IsRangedTool(tool)
if not tool or not tool:IsA("Tool") then return false end
local okT, typ = pcall(function() return tool:GetAttribute("Type") end)
if okT and typ ~= nil then
local t = string.lower(tostring(typ))
if t == "gun" or t == "bow" then return true end
end
local okV, vel = pcall(function() return tool:GetAttribute("Velocity") end)
if okV and vel ~= nil then return true end
local okR, mr = pcall(function() return tool:GetAttribute("MaxRange") end)
if okR and mr ~= nil then return true end
return false
end
local function GetEquippedTool()
local char = LocalPlayer.Character
if not char then return nil end
return char:FindFirstChildOfClass("Tool")
end
local CurrentTarget = nil
local CurrentTargetPos = nil
local function PickAimPart(mob)
if not mob then return nil end
if Config.TargetPart == "Head" then
return mob:FindFirstChild("Head") or mob:FindFirstChild("HumanoidRootPart") or mob.PrimaryPart
elseif Config.TargetPart == "HumanoidRootPart" then
return mob:FindFirstChild("HumanoidRootPart") or mob:FindFirstChild("Head") or mob.PrimaryPart
elseif Config.TargetPart == "Torso" then
return mob:FindFirstChild("Torso") or mob:FindFirstChild("HumanoidRootPart") or mob:FindFirstChild("Head") or mob.PrimaryPart
else -- Closest part to character
local char = LocalPlayer.Character
local pp = char and char.PrimaryPart
if not pp then return mob.PrimaryPart end
local best, bestD = nil, math.huge
for _, d in ipairs(mob:GetDescendants()) do
if d:IsA("BasePart") then
local dd = (d.Position - pp.Position).Magnitude
if dd < bestD then best, bestD = d, dd end
end
end
return best or mob.PrimaryPart
end
end
local function GetNearestEnemy()
local char = LocalPlayer.Character
local pp = char and char.PrimaryPart
if not pp then return nil, nil end
local ok, mob = pcall(function()
return MobHelper.GetClosestMob(pp.Position, Config.Range)
end)
if not ok or not mob then return nil, nil end
local hum = mob:FindFirstChildOfClass("Humanoid")
if hum and hum.Health <= 0 then return nil, nil end
local part = PickAimPart(mob)
if not part then return nil, nil end
return mob, part
end
local function SilentAimHook(playerArg, mouseArg, arg3, ...)
if Config.Enabled and playerArg == LocalPlayer then
local doit = true
if Config.RangedOnly then
doit = IsRangedTool(GetEquippedTool())
end
if doit then
local mob, part = GetNearestEnemy()
if mob and part then
CurrentTarget = mob
CurrentTargetPos = part.Position
return part.Position, 1
end
end
end
CurrentTarget = nil
return OldAim(playerArg, mouseArg, arg3, ...)
end
-- Collapse any hook chain left by previous runs, then install exactly one hook.
if G.original == nil then
G.original = CTM.Aim -- first run captures the true original
end
if typeof(restorefunction) == "function" and typeof(isfunctionhooked) == "function" then
for _ = 1, 10 do
local h = false
pcall(function() h = isfunctionhooked(CTM.Aim) end)
if not h then break end
pcall(function() restorefunction(CTM.Aim) end)
end
end
CTM.Aim = G.original -- reset field in case an assignment-style hook replaced it
if typeof(hookfunction) == "function" then
local ok, res = pcall(function()
return hookfunction(G.original, SilentAimHook)
end)
OldAim = (ok and res) or G.original
else
OldAim = G.original
CTM.Aim = SilentAimHook
end
G.hooked = true
-- ============ GUI ============
local parentGui = nil
pcall(function()
if typeof(gethui) == "function" then parentGui = gethui() end
end)
if not parentGui then
parentGui = game:GetService("CoreGui")
end
pcall(function()
local old = parentGui:FindFirstChild("SilentAimGui")
if old then old:Destroy() end
end)
local gui = Instance.new("ScreenGui")
gui.Name = "SilentAimGui"
gui.ResetOnSpawn = false
gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
gui.Parent = parentGui
local frame = Instance.new("Frame")
frame.Name = "Main"
frame.Size = UDim2.new(0, 250, 0, 264)
frame.Position = UDim2.new(0, 20, 0.5, -132)
frame.BackgroundColor3 = Color3.fromRGB(20, 20, 25)
frame.BorderSizePixel = 0
frame.Active = true
frame.Draggable = true
frame.Visible = true
frame.Parent = gui
Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 8)
local stroke = Instance.new("UIStroke", frame)
stroke.Color = Color3.fromRGB(80, 80, 100)
stroke.Thickness = 1
local function mkLabel(text, y, h, size, color)
local l = Instance.new("TextLabel")
l.Size = UDim2.new(1, -20, 0, h or 20)
l.Position = UDim2.new(0, 10, 0, y)
l.BackgroundTransparency = 1
l.Text = text
l.TextColor3 = color or Color3.fromRGB(230, 230, 230)
l.Font = Enum.Font.GothamBold
l.TextSize = size or 13
l.TextXAlignment = Enum.TextXAlignment.Left
l.Parent = frame
return l
end
local title = mkLabel("Silent Aim (Pilgrammed)", 8, 22, 14)
title.Font = Enum.Font.GothamBlack
local status = mkLabel("Status: ON", 32, 18)
status.TextColor3 = Color3.fromRGB(90, 255, 130)
status.Name = "StatusLabel"
local function mkButton(name, text, y, h)
local b = Instance.new("TextButton")
b.Name = name
b.Size = UDim2.new(1, -20, 0, h or 30)
b.Position = UDim2.new(0, 10, 0, y)
b.Text = text
b.Font = Enum.Font.GothamBold
b.TextSize = 13
b.TextColor3 = Color3.fromRGB(255, 255, 255)
b.BackgroundColor3 = Color3.fromRGB(45, 45, 60)
b.BorderSizePixel = 0
b.Parent = frame
Instance.new("UICorner", b).CornerRadius = UDim.new(0, 6)
return b
end
local toggleBtn = mkButton("ToggleBtn", "Toggle: ON", 54, 30)
toggleBtn.BackgroundColor3 = Color3.fromRGB(30, 140, 60)
local targetLabel = mkLabel("Target: none", 88, 18, 13, Color3.fromRGB(180, 200, 255))
targetLabel.Name = "TargetLabel"
mkLabel("Range (studs):", 110, 18)
local rangeBox = Instance.new("TextBox")
rangeBox.Name = "RangeBox"
rangeBox.Size = UDim2.new(1, -20, 0, 26)
rangeBox.Position = UDim2.new(0, 10, 0, 130)
rangeBox.Text = tostring(Config.Range)
rangeBox.Font = Enum.Font.GothamBold
rangeBox.TextSize = 13
rangeBox.BackgroundColor3 = Color3.fromRGB(35, 35, 48)
rangeBox.TextColor3 = Color3.fromRGB(255, 255, 255)
rangeBox.BorderSizePixel = 0
rangeBox.Parent = frame
Instance.new("UICorner", rangeBox).CornerRadius = UDim.new(0, 6)
local partBtn = mkButton("PartBtn", "Aim Part: Head", 162, 28)
local rangedBtn = mkButton("RangedBtn", "Ranged Only: ON", 194, 28)
local hideBtn = mkButton("HideBtn", "Hide GUI (RightShift)", 226, 28)
local function refresh()
toggleBtn.Text = "Toggle: " .. (Config.Enabled and "ON" or "OFF")
toggleBtn.BackgroundColor3 = Config.Enabled and Color3.fromRGB(30, 140, 60) or Color3.fromRGB(150, 40, 40)
status.Text = "Status: " .. (Config.Enabled and "ON" or "OFF")
status.TextColor3 = Config.Enabled and Color3.fromRGB(90, 255, 130) or Color3.fromRGB(255, 110, 110)
partBtn.Text = "Aim Part: " .. Config.TargetPart
rangedBtn.Text = "Ranged Only: " .. (Config.RangedOnly and "ON" or "OFF")
rangeBox.Text = tostring(Config.Range)
end
toggleBtn.MouseButton1Click:Connect(function()
Config.Enabled = not Config.Enabled
refresh()
end)
partBtn.MouseButton1Click:Connect(function()
local order = { "Head", "HumanoidRootPart", "Torso", "Closest" }
local idx = table.find(order, Config.TargetPart) or 1
Config.TargetPart = order[(idx % #order) + 1]
refresh()
end)
rangedBtn.MouseButton1Click:Connect(function()
Config.RangedOnly = not Config.RangedOnly
refresh()
end)
rangeBox.FocusLost:Connect(function(enter)
if not enter then return end
local n = tonumber(rangeBox.Text)
if n then
Config.Range = math.clamp(math.floor(n), 20, 2000)
rangeBox.Text = tostring(Config.Range)
else
rangeBox.Text = tostring(Config.Range)
end
end)
local function toggleGui()
frame.Visible = not frame.Visible
end
G.guiToggleFn = toggleGui -- exposed for testing
hideBtn.MouseButton1Click:Connect(toggleGui)
-- NOTE: no game-processed guard here on purpose: the game sinks RightShift,
-- which is exactly why the old keybind never fired. Hiding a GUI is harmless
-- even if the game also uses the key.
track(UIS.InputBegan:Connect(function(input)
if input.KeyCode == Config.GuiKey then
toggleGui()
end
end))
refresh()
-- live target readout (throttled probe, 5x/sec)
local lastProbe = 0
local probedName = "none"
track(RunService.RenderStepped:Connect(function()
if not Config.Enabled then
targetLabel.Text = "Target: (disabled)"
return
end
local tool = GetEquippedTool()
if Config.RangedOnly and not IsRangedTool(tool) then
targetLabel.Text = "Target: equip bow/musket..."
return
end
if CurrentTarget and CurrentTarget.Parent then
local d = nil
pcall(function()
local pp = LocalPlayer.Character and LocalPlayer.Character.PrimaryPart
if pp and CurrentTargetPos then d = math.floor((CurrentTargetPos - pp.Position).Magnitude) end
end)
targetLabel.Text = "Target: " .. CurrentTarget.Name .. (d and (" (" .. d .. "m)") or "")
return
end
local now = os.clock()
if now - lastProbe >= 0.2 then
lastProbe = now
local mob = GetNearestEnemy()
probedName = mob and mob.Name or "none in range"
end
targetLabel.Text = "Target: " .. probedName
end))
print("[SilentAim] loaded. RightShift or Hide button shows/hides GUI. Toggle aim via GUI button.")
Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.
Community discussion
0Start the conversation.


Your community, in one place