
KeylessUniversal

-- https://discord.gg/JGDAWjhWzp join for a full script with reanim (mic up & mic up 18+ more support for reanim coming soon)
-- scriptblox could i pretty pls get verifyed for open srcs pretty plssssss
local UIS = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local HttpService = game:GetService("HttpService")
local VirtualInputManager = game:GetService("VirtualInputManager")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
if not mousemoverel then
warn("mousemoverel unavailable")
return
end
local G = (getgenv and getgenv()) or _G
if G.__AimScript and G.__AimScript.kill then
pcall(G.__AimScript.kill)
end
G.__AimScript = { conns = {}, gui = nil }
local function track(c)
table.insert(G.__AimScript.conns, c)
return c
end
G.__AimScript.kill = function()
for _, c in ipairs(G.__AimScript.conns) do
pcall(function()
c:Disconnect()
end)
end
G.__AimScript.conns = {}
if G.__AimScript.gui then
pcall(function()
G.__AimScript.gui:Destroy()
end)
G.__AimScript.gui = nil
end
end
local CONFIG_FILE = "aimbotconfig.json"
local C = {
enabled = true,
aimKey = Enum.KeyCode.E,
gainFar = 0.28,
gainClose = 0.52,
closePx = 70,
smooth = 0.42,
response = 11,
maxStep = 55,
reaction = 0.08,
wiggle = 1.8,
wiggleSpeed = 5.5,
stopChance = 0.012,
stopDuration = 0.045,
overshootChance = 0.25,
overshootMin = 55,
overshootScale = 1.10,
curveRadius = 20,
trigEnabled = true,
trigMode = "Hold",
trigRadius = 28,
trigDelay = 0.02,
trigCps = 12,
trigHoldOnlyAim = true,
smoothSwitch = false,
smoothA = 0.35,
smoothB = 0.70,
smoothC = 1.20,
switchMin = 0.4,
switchMax = 1.8,
}
local aiming = false
local accX, accY = 0, 0
local stepX, stepY = 0, 0
local startT = 0
local phase = 0
local doOvershoot = false
local overshootDone = false
local lastTarget = nil
local stopUntil = 0
local wiggleX, wiggleY = 0, 0
local trigHolding = false
local nextClick = 0
local trigStart = 0
-- smooth switch state
local activeSmooth = C.smooth
local nextSwitchAt = 0
local lastSmoothIdx = 0
local function parts()
local out = {}
local maps = workspace:FindFirstChild("Maps")
if not maps then
return out
end
for _, mf in ipairs(maps:GetChildren()) do
local tf = mf:FindFirstChild("Targets")
if tf then
for _, t in ipairs(tf:GetChildren()) do
local p = t:FindFirstChild("Primary")
if p and p:IsA("BasePart") then
table.insert(out, p)
end
end
end
end
return out
end
local function closest(list)
local center = camera.ViewportSize * 0.5
local best, bestD = nil, math.huge
for _, p in ipairs(list) do
local sp, on = camera:WorldToViewportPoint(p.Position)
if on and sp.Z > 0 then
local d = (Vector2.new(sp.X, sp.Y) - center).Magnitude
if d < bestD then
bestD, best = d, p
end
end
end
return best, bestD
end
local function mouseDown()
pcall(function()
VirtualInputManager:SendMouseButtonEvent(0, 0, 0, true, game, 1)
end)
end
local function mouseUp()
pcall(function()
VirtualInputManager:SendMouseButtonEvent(0, 0, 0, false, game, 1)
end)
end
local function clickOnce()
mouseDown()
task.delay(0.02, mouseUp)
end
-- config save
local function serialize()
local t = {}
for k, v in pairs(C) do
if typeof(v) == "EnumItem" then
t[k] = { __enum = tostring(v.EnumType), name = v.Name }
else
t[k] = v
end
end
return HttpService:JSONEncode(t)
end
local function applyConfig(data)
if type(data) ~= "table" then
return
end
for k, v in pairs(data) do
if C[k] ~= nil then
if type(v) == "table" and v.__enum and v.name then
local ok, ev = pcall(function()
return Enum[v.__enum][v.name]
end)
if ok and ev then
C[k] = ev
end
else
C[k] = v
end
end
end
activeSmooth = C.smooth
end
local function saveConfig()
local ok, err = pcall(function()
if writefile then
writefile(CONFIG_FILE, serialize())
else
G.__AimConfigSave = serialize()
end
end)
if ok then
print("config saved")
else
warn("ave failed:", err)
end
end
local function loadConfig()
local ok, raw = pcall(function()
if isfile and isfile(CONFIG_FILE) and readfile then
return readfile(CONFIG_FILE)
elseif G.__AimConfigSave then
return G.__AimConfigSave
end
return nil
end)
if not ok or not raw or raw == "" then
print("no config found")
return false
end
local ok2, data = pcall(function()
return HttpService:JSONDecode(raw)
end)
if not ok2 or type(data) ~= "table" then
warn("config corrupt")
return false
end
applyConfig(data)
print("config loaded")
return true
end
local function startAim()
if not C.enabled then
return
end
aiming = true
accX, accY = 0, 0
stepX, stepY = 0, 0
startT = os.clock()
phase = math.random() * 100
doOvershoot = math.random() < C.overshootChance
overshootDone = false
lastTarget = nil
stopUntil = 0
wiggleX, wiggleY = 0, 0
trigStart = os.clock()
activeSmooth = C.smoothSwitch and C.smoothA or C.smooth
nextSwitchAt = os.clock() + C.switchMin + math.random() * math.max(C.switchMax - C.switchMin, 0)
lastSmoothIdx = 1
end
local function stopAim()
aiming = false
accX, accY = 0, 0
stepX, stepY = 0, 0
lastTarget = nil
if trigHolding then
mouseUp()
trigHolding = false
end
end
local function pickRandomSmooth()
local vals = { C.smoothA, C.smoothB, C.smoothC }
-- random index, prefer not same as last (but allow if only one)
local idx = math.random(1, 3)
if idx == lastSmoothIdx then
idx = (idx % 3) + 1
-- 50% chance still allow same for true randomness
if math.random() < 0.5 then
idx = math.random(1, 3)
end
end
lastSmoothIdx = idx
return vals[idx], idx
end
-- UI
local function corner(parent, r)
local c = Instance.new("UICorner")
c.CornerRadius = UDim.new(0, r or 6)
c.Parent = parent
return c
end
local function pad(parent, t, b, l, r)
local p = Instance.new("UIPadding")
p.PaddingTop = UDim.new(0, t or 0)
p.PaddingBottom = UDim.new(0, b or 0)
p.PaddingLeft = UDim.new(0, l or 0)
p.PaddingRight = UDim.new(0, r or 0)
p.Parent = parent
end
local gui = Instance.new("ScreenGui")
gui.Name = "AimbotUI"
gui.ResetOnSpawn = false
gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
gui.Parent = player:WaitForChild("PlayerGui")
G.__AimScript.gui = gui
local frame = Instance.new("Frame")
frame.Name = "Main"
frame.Size = UDim2.fromOffset(300, 520)
frame.Position = UDim2.new(0, 20, 0.5, -260)
frame.BackgroundColor3 = Color3.fromRGB(22, 22, 28)
frame.BorderSizePixel = 0
frame.Active = true
frame.Draggable = true
frame.Parent = gui
corner(frame, 10)
local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, -40, 0, 36)
title.Position = UDim2.fromOffset(12, 6)
title.BackgroundTransparency = 1
title.Font = Enum.Font.GothamBold
title.TextSize = 16
title.TextColor3 = Color3.fromRGB(230, 230, 240)
title.TextXAlignment = Enum.TextXAlignment.Left
title.Text = "aimbot · hold E"
title.Parent = frame
local hideBtn = Instance.new("TextButton")
hideBtn.Size = UDim2.fromOffset(28, 28)
hideBtn.Position = UDim2.new(1, -34, 0, 8)
hideBtn.BackgroundColor3 = Color3.fromRGB(40, 40, 50)
hideBtn.Text = "–"
hideBtn.TextColor3 = Color3.fromRGB(200, 200, 210)
hideBtn.Font = Enum.Font.GothamBold
hideBtn.TextSize = 18
hideBtn.Parent = frame
corner(hideBtn, 6)
local body = Instance.new("ScrollingFrame")
body.Size = UDim2.new(1, -16, 1, -48)
body.Position = UDim2.fromOffset(8, 42)
body.BackgroundTransparency = 1
body.BorderSizePixel = 0
body.ScrollBarThickness = 4
body.CanvasSize = UDim2.fromOffset(0, 1100)
body.Parent = frame
local layout = Instance.new("UIListLayout")
layout.Padding = UDim.new(0, 8)
layout.Parent = body
pad(body, 4, 8, 4, 4)
-- slider refs so config load can refresh labels
local sliderRefresh = {}
local function addToggle(name, key)
local row = Instance.new("Frame")
row.Size = UDim2.new(1, -8, 0, 32)
row.BackgroundColor3 = Color3.fromRGB(32, 32, 40)
row.BorderSizePixel = 0
row.Parent = body
corner(row, 6)
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1, -50, 1, 0)
lbl.Position = UDim2.fromOffset(10, 0)
lbl.BackgroundTransparency = 1
lbl.Font = Enum.Font.Gotham
lbl.TextSize = 13
lbl.TextColor3 = Color3.fromRGB(210, 210, 220)
lbl.TextXAlignment = Enum.TextXAlignment.Left
lbl.Text = name
lbl.Parent = row
local btn = Instance.new("TextButton")
btn.Size = UDim2.fromOffset(36, 20)
btn.Position = UDim2.new(1, -44, 0.5, -10)
btn.BackgroundColor3 = C[key] and Color3.fromRGB(80, 180, 120) or Color3.fromRGB(60, 60, 70)
btn.Text = C[key] and "ON" or "OFF"
btn.TextColor3 = Color3.fromRGB(255, 255, 255)
btn.Font = Enum.Font.GothamBold
btn.TextSize = 11
btn.Parent = row
corner(btn, 4)
local function sync()
btn.Text = C[key] and "ON" or "OFF"
btn.BackgroundColor3 = C[key] and Color3.fromRGB(80, 180, 120) or Color3.fromRGB(60, 60, 70)
end
sliderRefresh[key] = sync
btn.MouseButton1Click:Connect(function()
C[key] = not C[key]
sync()
if key == "enabled" and not C.enabled then
stopAim()
end
if key == "trigEnabled" and not C.trigEnabled and trigHolding then
mouseUp()
trigHolding = false
end
if key == "smoothSwitch" then
activeSmooth = C.smoothSwitch and C.smoothA or C.smooth
end
end)
end
local function addSlider(name, key, minV, maxV, decimals)
decimals = decimals or 2
local row = Instance.new("Frame")
row.Size = UDim2.new(1, -8, 0, 52)
row.BackgroundColor3 = Color3.fromRGB(32, 32, 40)
row.BorderSizePixel = 0
row.Parent = body
corner(row, 6)
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1, -16, 0, 20)
lbl.Position = UDim2.fromOffset(10, 4)
lbl.BackgroundTransparency = 1
lbl.Font = Enum.Font.Gotham
lbl.TextSize = 12
lbl.TextColor3 = Color3.fromRGB(210, 210, 220)
lbl.TextXAlignment = Enum.TextXAlignment.Left
lbl.Parent = row
local function fmt(v)
if decimals <= 0 then
return tostring(math.floor(v + 0.5))
end
local m = 10 ^ decimals
return string.format("%." .. decimals .. "f", math.floor(v * m + 0.5) / m)
end
local bar = Instance.new("Frame")
bar.Size = UDim2.new(1, -20, 0, 8)
bar.Position = UDim2.fromOffset(10, 32)
bar.BackgroundColor3 = Color3.fromRGB(50, 50, 62)
bar.BorderSizePixel = 0
bar.Parent = row
corner(bar, 4)
local fill = Instance.new("Frame")
fill.BackgroundColor3 = Color3.fromRGB(120, 140, 255)
fill.BorderSizePixel = 0
fill.Parent = bar
corner(fill, 4)
local function refresh()
local v = C[key]
lbl.Text = name .. " " .. fmt(v)
local rel = math.clamp((v - minV) / math.max(maxV - minV, 1e-6), 0, 1)
fill.Size = UDim2.new(rel, 0, 1, 0)
end
refresh()
sliderRefresh[key] = refresh
local dragging = false
local function setFromX(x)
local rel = math.clamp((x - bar.AbsolutePosition.X) / math.max(bar.AbsoluteSize.X, 1), 0, 1)
C[key] = minV + (maxV - minV) * rel
refresh()
end
bar.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragging = true
setFromX(input.Position.X)
end
end)
track(UIS.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragging = false
end
end))
track(UIS.InputChanged:Connect(function(input)
if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then
setFromX(input.Position.X)
end
end))
end
local function addDropdown(name, key, options)
local row = Instance.new("Frame")
row.Size = UDim2.new(1, -8, 0, 32)
row.BackgroundColor3 = Color3.fromRGB(32, 32, 40)
row.BorderSizePixel = 0
row.Parent = body
corner(row, 6)
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(0.45, 0, 1, 0)
lbl.Position = UDim2.fromOffset(10, 0)
lbl.BackgroundTransparency = 1
lbl.Font = Enum.Font.Gotham
lbl.TextSize = 13
lbl.TextColor3 = Color3.fromRGB(210, 210, 220)
lbl.TextXAlignment = Enum.TextXAlignment.Left
lbl.Text = name
lbl.Parent = row
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(0.48, -8, 0, 22)
btn.Position = UDim2.new(0.5, 0, 0.5, -11)
btn.BackgroundColor3 = Color3.fromRGB(50, 55, 75)
btn.Text = tostring(C[key])
btn.TextColor3 = Color3.fromRGB(255, 255, 255)
btn.Font = Enum.Font.GothamBold
btn.TextSize = 12
btn.Parent = row
corner(btn, 4)
local idx = 1
for i, o in ipairs(options) do
if o == C[key] then
idx = i
break
end
end
local function sync()
btn.Text = tostring(C[key])
for i, o in ipairs(options) do
if o == C[key] then
idx = i
break
end
end
end
sliderRefresh[key] = sync
btn.MouseButton1Click:Connect(function()
idx = idx % #options + 1
C[key] = options[idx]
btn.Text = options[idx]
if C[key] ~= "Hold" and trigHolding then
mouseUp()
trigHolding = false
end
end)
end
local function addSection(text)
local row = Instance.new("TextLabel")
row.Size = UDim2.new(1, -8, 0, 22)
row.BackgroundTransparency = 1
row.Font = Enum.Font.GothamBold
row.TextSize = 12
row.TextColor3 = Color3.fromRGB(140, 150, 200)
row.TextXAlignment = Enum.TextXAlignment.Left
row.Text = text
row.Parent = body
end
local function addButton(name, fn)
local row = Instance.new("TextButton")
row.Size = UDim2.new(1, -8, 0, 32)
row.BackgroundColor3 = Color3.fromRGB(45, 50, 70)
row.BorderSizePixel = 0
row.Font = Enum.Font.GothamBold
row.TextSize = 13
row.TextColor3 = Color3.fromRGB(230, 230, 240)
row.Text = name
row.Parent = body
corner(row, 6)
row.MouseButton1Click:Connect(fn)
end
local function refreshAllUI()
for _, fn in pairs(sliderRefresh) do
pcall(fn)
end
end
addSection("AIM")
addToggle("Aim enabled", "enabled")
addSlider("Gain far", "gainFar", 0.08, 0.6, 2)
addSlider("Gain close", "gainClose", 0.15, 0.85, 2)
addSlider("Smooth (base)", "smooth", 0.15, 2.0, 2)
addSlider("Response", "response", 4, 30, 0)
addSlider("Max step", "maxStep", 20, 120, 0)
addSlider("Wiggle", "wiggle", 0, 10, 1)
addSlider("Wiggle speed", "wiggleSpeed", 1, 12, 1)
addSlider("Stop chance", "stopChance", 0, 0.05, 3)
addSlider("Curve radius", "curveRadius", 8, 40, 0)
addSection("SMOOTHNESS SWITCH")
addToggle("Smooth switch", "smoothSwitch")
addSlider("Smooth value 1", "smoothA", 0.15, 2.0, 2)
addSlider("Smooth value 2", "smoothB", 0.15, 2.0, 2)
addSlider("Smooth value 3", "smoothC", 0.15, 2.0, 2)
addSlider("Switch min (s)", "switchMin", 0.1, 3, 2)
addSlider("Switch max (s)", "switchMax", 0.2, 5, 2)
addSection("TRIGGERBOT")
addToggle("Trigger enabled", "trigEnabled")
addDropdown("Mode", "trigMode", { "Hold", "Fast Click" })
addSlider("Trigger radius", "trigRadius", 8, 60, 0)
addSlider("Trigger delay", "trigDelay", 0, 0.15, 3)
addSlider("Fast CPS", "trigCps", 4, 20, 0)
addToggle("Only while aiming", "trigHoldOnlyAim")
addSection("CONFIG")
addButton("Save config", function()
saveConfig()
end)
addButton("Load config", function()
if loadConfig() then
refreshAllUI()
activeSmooth = C.smoothSwitch and C.smoothA or C.smooth
end
end)
-- auto-load on start
task.defer(function()
if loadConfig() then
refreshAllUI()
activeSmooth = C.smoothSwitch and C.smoothA or C.smooth
end
end)
local collapsed = false
hideBtn.MouseButton1Click:Connect(function()
collapsed = not collapsed
if collapsed then
body.Visible = false
frame.Size = UDim2.fromOffset(300, 44)
hideBtn.Text = "+"
else
body.Visible = true
frame.Size = UDim2.fromOffset(300, 520)
hideBtn.Text = "–"
end
end)
track(UIS.InputBegan:Connect(function(input)
if input.KeyCode == Enum.KeyCode.RightShift then
frame.Visible = not frame.Visible
end
end))
track(UIS.InputBegan:Connect(function(input, gp)
if gp then
return
end
if input.KeyCode == C.aimKey then
startAim()
end
end))
track(UIS.InputEnded:Connect(function(input)
if input.KeyCode == C.aimKey then
stopAim()
end
end))
track(RunService.RenderStepped:Connect(function(dt)
local want = C.enabled and UIS:IsKeyDown(C.aimKey)
if want and not aiming then
startAim()
elseif not want and aiming then
stopAim()
end
dt = math.clamp(dt, 1 / 240, 1 / 20)
local now = os.clock()
local center = camera.ViewportSize * 0.5
local plist = parts()
local target, dist = closest(plist)
dist = dist or math.huge
-- random smoothness switch (not sequential)
if C.smoothSwitch and aiming and now >= nextSwitchAt then
local val = pickRandomSmooth()
activeSmooth = val
local span = math.max(C.switchMax - C.switchMin, 0.05)
nextSwitchAt = now + C.switchMin + math.random() * span
elseif not C.smoothSwitch then
activeSmooth = C.smooth
end
if aiming and now - startT >= C.reaction and target then
if now < stopUntil then
stepX, stepY = stepX * 0.3, stepY * 0.3
elseif math.random() < C.stopChance then
stopUntil = now + C.stopDuration * (0.7 + math.random() * 0.6)
end
if target ~= lastTarget then
lastTarget = target
doOvershoot = math.random() < C.overshootChance
overshootDone = false
phase = math.random() * 100
end
local sp, on = camera:WorldToViewportPoint(target.Position)
if on and sp.Z > 0 then
local dx = sp.X - center.X
local dy = sp.Y - center.Y
dist = math.sqrt(dx * dx + dy * dy)
local t = now - startT
local ws = C.wiggleSpeed
local w = C.wiggle
local targetWX = (math.sin(t * ws + phase)
+ math.sin(t * ws * 0.37 + phase * 2.1) * 0.55
+ math.sin(t * ws * 1.7 + phase * 0.5) * 0.25) * w
local targetWY = (math.cos(t * ws * 0.9 + phase * 1.3)
+ math.sin(t * ws * 0.51 + phase * 0.7) * 0.55
+ math.cos(t * ws * 1.4 + phase) * 0.25) * w
wiggleX = wiggleX + (targetWX - wiggleX) * math.clamp(dt * 8, 0, 1)
wiggleY = wiggleY + (targetWY - wiggleY) * math.clamp(dt * 8, 0, 1)
local blend = math.clamp(1 - (dist / math.max(C.closePx, 1)), 0, 1)
blend = blend * blend
local gain = C.gainFar + (C.gainClose - C.gainFar) * blend
if doOvershoot and not overshootDone and dist >= C.overshootMin then
gain = gain * C.overshootScale
if dist < C.overshootMin * 0.6 then
overshootDone = true
end
end
if dist <= C.curveRadius then
gain = math.min(gain, C.gainClose * 0.85)
end
local sUse = activeSmooth
local gainCap = 0.9 + math.clamp(sUse - 1, 0, 1) * 0.08
gain = math.clamp(gain, 0.05, gainCap)
local desiredX = (dx + wiggleX) * gain
local desiredY = (dy + wiggleY) * gain
local sVal = math.max(sUse, 0.05)
local sBase = math.clamp(sVal, 0.05, 1)
local sBoost = math.max(sVal - 1, 0)
local sm = 1 - (1 - sBase) ^ (dt * 60)
local lockMul = 1 + sBoost * 1.35
desiredX = desiredX * sm * lockMul
desiredY = desiredY * sm * lockMul
local resp = 1 - math.exp(-C.response * dt)
stepX = stepX + (desiredX - stepX) * resp
stepY = stepY + (desiredY - stepY) * resp
if dist < 6 then
stepX = stepX * 0.55
stepY = stepY * 0.55
end
local mag = math.sqrt(stepX * stepX + stepY * stepY)
if mag > C.maxStep and mag > 0 then
local s = C.maxStep / mag
stepX, stepY = stepX * s, stepY * s
end
if now < stopUntil then
stepX, stepY = stepX * 0.15, stepY * 0.15
end
accX = accX + stepX
accY = accY + stepY
local mx = (accX >= 0) and math.floor(accX) or math.ceil(accX)
local my = (accY >= 0) and math.floor(accY) or math.ceil(accY)
if mx ~= 0 or my ~= 0 then
mousemoverel(mx, my)
accX = accX - mx
accY = accY - my
end
end
end
local canTrig = C.trigEnabled
if C.trigHoldOnlyAim then
canTrig = canTrig and aiming
end
local onTarget = target and dist <= C.trigRadius
if canTrig and onTarget and (now - trigStart) >= C.trigDelay then
if C.trigMode == "Hold" then
if not trigHolding then
mouseDown()
trigHolding = true
end
else
if trigHolding then
mouseUp()
trigHolding = false
end
local interval = 1 / math.max(C.trigCps, 1)
if now >= nextClick then
clickOnce()
nextClick = now + interval
end
end
else
if trigHolding then
mouseUp()
trigHolding = false
end
end
end))



forgot to tell its mad for a aim trainer (has ranked) Pandi's Aim Trainer