Open src aimbot (Noir)
Key RequiredUniversal

Open src aimbot (Noir)

Universal Scripthitshits 660 views 2.4K executesUpdated Oct 2, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•789 lines (19883 chars)
-- 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))

Features & Information

not a simple aimbot has many features like wobble and allat shit so if ur aim is ass jst use ts fr fr 100% gangster from discord fr fr https://discord.gg/JGDAWjhWzp

Community Comments (1)

hitshitsOct 7, 2026

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

More Scripts for Universal Scripts