
KeylessUniversal

-- Grok GUI | Fixed Stable Triggerbot + FOV Circle
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local localPlayer = Players.LocalPlayer
local camera = workspace.CurrentCamera
-- Anti Double Load + Full Cleanup
if _G.GrokGUI then
if _G.GrokGUI.gui then _G.GrokGUI.gui:Destroy() end
if _G.GrokGUI.connections then
for _, c in pairs(_G.GrokGUI.connections) do c:Disconnect() end
end
for _, data in pairs(_G.GrokGUI.drawings or {}) do
if data.box then data.box:Remove() end
if data.name then data.name:Remove() end
if data.dist then data.dist:Remove() end
end
if _G.GrokGUI.fovCircle then _G.GrokGUI.fovCircle:Remove() end
_G.GrokGUI = nil
return
end
_G.GrokGUI = {
gui = nil,
connections = {},
drawings = {},
fovCircle = nil
}
-- ================== SETTINGS ==================
local ESP_Enabled = true
local Aimbot_Enabled = true
local SilentAim_Enabled = true
local Triggerbot_Enabled = true
local TeamCheck_Enabled = false
local AliveCheck_Enabled = true
local AIM_PART = "Head"
local AIM_FOV = 180
local AIM_SMOOTHNESS = 5
local PREDICTION = 0.14
local FIRE_RATE = 0.09 -- Slightly increased to reduce spam
local WALLCHECK = true
local currentTarget = nil
local targetLockTime = 0
local lastShotTime = 0
local triggerDebounce = 0 -- New: prevents spam clicking
-- Silent Aim
local mt = getrawmetatable(game)
local oldNamecall = mt.__namecall
setreadonly(mt, false)
mt.__namecall = newcclosure(function(self, ...)
local method = getnamecallmethod()
local args = {...}
if SilentAim_Enabled and method == "FireServer" then
local name = self.Name:lower()
if name:find("bullet") or name:find("shoot") or name:find("hit") or name:find("damage") then
if currentTarget then
args[1] = currentTarget.Position
end
end
end
return oldNamecall(self, unpack(args))
end)
setreadonly(mt, true)
-- ================== FOV CIRCLE ==================
local fovCircle = Drawing.new("Circle")
fovCircle.Thickness = 2
fovCircle.Color = Color3.fromRGB(0, 170, 255)
fovCircle.Filled = false
fovCircle.Transparency = 0.6
fovCircle.NumSides = 64
fovCircle.Visible = false
_G.GrokGUI.fovCircle = fovCircle
-- ================== DRAWINGS ==================
local drawings = {}
_G.GrokGUI.drawings = drawings
local function createDrawings(player)
if player == localPlayer then return end
local box = Drawing.new("Square")
box.Thickness = 2; box.Color = Color3.fromRGB(0, 255, 100); box.Filled = false; box.Transparency = 1; box.Visible = false
local nameText = Drawing.new("Text")
nameText.Size = 16; nameText.Center = true; nameText.Outline = true; nameText.Color = Color3.new(1,1,1); nameText.Visible = false
local distText = Drawing.new("Text")
distText.Size = 14; distText.Center = true; distText.Outline = true; distText.Color = Color3.new(1,1,1); distText.Visible = false
drawings[player] = {box = box, name = nameText, dist = distText}
end
local function isAlive(char)
if not AliveCheck_Enabled then return true end
local hum = char:FindFirstChild("Humanoid")
return hum and hum.Health > 0
end
local function isVisible(part)
if not WALLCHECK then return true end
local blacklist = {}
for _, v in pairs(localPlayer.Character:GetDescendants()) do
if v:IsA("BasePart") then table.insert(blacklist, v) end
end
for _, v in pairs(part.Parent:GetDescendants()) do
if v:IsA("BasePart") then table.insert(blacklist, v) end
end
return #camera:GetPartsObscuringTarget({part.Position}, blacklist) == 0
end
-- ================== GROK GUI ==================
local screenGui = Instance.new("ScreenGui")
screenGui.ResetOnSpawn = false
screenGui.Parent = localPlayer:WaitForChild("PlayerGui")
_G.GrokGUI.gui = screenGui
local mainFrame = Instance.new("Frame")
mainFrame.Size = UDim2.new(0, 340, 0, 580)
mainFrame.Position = UDim2.new(0.5, -170, 0.1, 0)
mainFrame.BackgroundColor3 = Color3.fromRGB(28, 28, 28)
mainFrame.BorderSizePixel = 0
mainFrame.Parent = screenGui
local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, 0, 0, 50)
title.BackgroundColor3 = Color3.fromRGB(0, 110, 200)
title.Text = "Grok GUI"
title.TextColor3 = Color3.new(1,1,1)
title.Font = Enum.Font.GothamBold
title.TextSize = 22
title.Parent = mainFrame
local titleCorner = Instance.new("UICorner")
titleCorner.CornerRadius = UDim.new(0, 12)
titleCorner.Parent = mainFrame
local scrolling = Instance.new("ScrollingFrame")
scrolling.Size = UDim2.new(1, -24, 1, -70)
scrolling.Position = UDim2.new(0, 12, 0, 60)
scrolling.BackgroundTransparency = 1
scrolling.ScrollBarThickness = 6
scrolling.ScrollBarImageColor3 = Color3.fromRGB(70, 70, 70)
scrolling.Parent = mainFrame
local listLayout = Instance.new("UIListLayout")
listLayout.Padding = UDim.new(0, 14)
listLayout.SortOrder = Enum.SortOrder.LayoutOrder
listLayout.Parent = scrolling
listLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
scrolling.CanvasSize = UDim2.new(0, 0, 0, listLayout.AbsoluteContentSize.Y + 30)
end)
-- Draggable
local dragging = false
local dragStart, startPos
mainFrame.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragging = true
dragStart = input.Position
startPos = mainFrame.Position
end
end)
UserInputService.InputChanged:Connect(function(input)
if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then
local delta = input.Position - dragStart
mainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end
end)
mainFrame.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end
end)
-- Toggle Button
local function createToggle(name, default, callback)
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(1, 0, 0, 46)
btn.BackgroundColor3 = default and Color3.fromRGB(0, 170, 0) or Color3.fromRGB(170, 0, 0)
btn.Text = name .. ": " .. (default and "ON" or "OFF")
btn.TextColor3 = Color3.new(1,1,1)
btn.Font = Enum.Font.GothamSemibold
btn.TextSize = 16
btn.AutoButtonColor = false
btn.Parent = scrolling
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 8)
corner.Parent = btn
btn.MouseButton1Click:Connect(function()
default = not default
btn.Text = name .. ": " .. (default and "ON" or "OFF")
btn.BackgroundColor3 = default and Color3.fromRGB(0, 170, 0) or Color3.fromRGB(170, 0, 0)
callback(default)
end)
end
-- TextBox with auto correction
local function createTextBox(name, minVal, maxVal, defaultVal, callback)
local frame = Instance.new("Frame")
frame.Size = UDim2.new(1, 0, 0, 70)
frame.BackgroundTransparency = 1
frame.Parent = scrolling
local label = Instance.new("TextLabel")
label.Size = UDim2.new(1, 0, 0, 22)
label.BackgroundTransparency = 1
label.Text = name .. " (" .. minVal .. " - " .. maxVal .. ")"
label.TextColor3 = Color3.new(1,1,1)
label.Font = Enum.Font.Gotham
label.TextSize = 15
label.Parent = frame
local textbox = Instance.new("TextBox")
textbox.Size = UDim2.new(1, 0, 0, 40)
textbox.Position = UDim2.new(0, 0, 0, 28)
textbox.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
textbox.Text = tostring(defaultVal)
textbox.TextColor3 = Color3.new(1,1,1)
textbox.Font = Enum.Font.Gotham
textbox.TextSize = 16
textbox.ClearTextOnFocus = false
textbox.Parent = frame
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 8)
corner.Parent = textbox
textbox.FocusLost:Connect(function()
local num = tonumber(textbox.Text)
if not num then
textbox.Text = tostring(defaultVal)
callback(defaultVal)
return
end
if num < minVal then num = minVal
elseif num > maxVal then num = maxVal end
textbox.Text = tostring(num)
defaultVal = num
callback(num)
end)
callback(defaultVal)
end
-- Create UI
createToggle("ESP", ESP_Enabled, function(v) ESP_Enabled = v end)
createToggle("Aimbot", Aimbot_Enabled, function(v) Aimbot_Enabled = v end)
createToggle("Silent Aim", SilentAim_Enabled, function(v) SilentAim_Enabled = v end)
createToggle("Triggerbot", Triggerbot_Enabled, function(v) Triggerbot_Enabled = v end)
createTextBox("Aim FOV", 60, 300, AIM_FOV, function(v) AIM_FOV = v end)
createTextBox("Smoothness", 1, 12, AIM_SMOOTHNESS, function(v) AIM_SMOOTHNESS = v end)
createTextBox("Prediction", 0, 0.25, PREDICTION, function(v) PREDICTION = v end)
createTextBox("Fire Rate", 0.03, 0.20, FIRE_RATE, function(v) FIRE_RATE = v end)
createToggle("Team Check", TeamCheck_Enabled, function(v) TeamCheck_Enabled = v end)
createToggle("Alive Check", AliveCheck_Enabled, function(v) AliveCheck_Enabled = v end)
-- ================== MAIN LOOP ==================
local function getBestTarget()
local closest = nil
local shortest = AIM_FOV
for _, plr in ipairs(Players:GetPlayers()) do
if plr ~= localPlayer and plr.Character then
local char = plr.Character
local part = char:FindFirstChild(AIM_PART)
if not isAlive(char) then continue end
if TeamCheck_Enabled and plr.Team == localPlayer.Team then continue end
if not part then continue end
local screenPos, onScreen = camera:WorldToViewportPoint(part.Position)
if not onScreen then continue end
local mousePos = UserInputService:GetMouseLocation()
local dist = (Vector2.new(screenPos.X, screenPos.Y) - mousePos).Magnitude
if currentTarget and currentTarget.Parent == char and isVisible(part) then
return part
end
if dist < shortest and isVisible(part) then
shortest = dist
closest = part
end
end
end
return closest
end
local function updateAimbot()
if not Aimbot_Enabled then
currentTarget = nil
return
end
local targetPart = getBestTarget()
if targetPart then
if targetPart ~= currentTarget then
if not currentTarget or (tick() - targetLockTime > 0.35) then
currentTarget = targetPart
targetLockTime = tick()
end
end
else
currentTarget = nil
end
if currentTarget then
local root = currentTarget.Parent:FindFirstChild("HumanoidRootPart")
local aimPos = currentTarget.Position
if root then
aimPos = aimPos + (root.Velocity * PREDICTION)
end
local targetCFrame = CFrame.new(camera.CFrame.Position, aimPos)
camera.CFrame = camera.CFrame:Lerp(targetCFrame, 1 / AIM_SMOOTHNESS)
end
end
-- Fixed Triggerbot (Stable click simulation)
local function updateTriggerbot()
if not Triggerbot_Enabled or not currentTarget then return end
if not isAlive(currentTarget.Parent) then
currentTarget = nil
return
end
if not isVisible(currentTarget) then return end
local now = tick()
if now - lastShotTime < FIRE_RATE then return end
if now - triggerDebounce < 0.08 then return end -- Extra debounce
-- Proper click simulation
mouse1press()
task.wait(0.015)
mouse1release()
lastShotTime = now
triggerDebounce = now
end
local function updateESP()
if not ESP_Enabled then
for _, d in pairs(drawings) do
d.box.Visible = false
d.name.Visible = false
d.dist.Visible = false
end
return
end
for player, data in pairs(drawings) do
local char = player.Character
if not char or not isAlive(char) then
data.box.Visible = false
data.name.Visible = false
data.dist.Visible = false
continue
end
local root = char:FindFirstChild("HumanoidRootPart")
local head = char:FindFirstChild("Head")
if not root or not head then
data.box.Visible = false
data.name.Visible = false
data.dist.Visible = false
continue
end
local rootPos, onScreen = camera:WorldToViewportPoint(root.Position)
local headPos = camera:WorldToViewportPoint(head.Position + Vector3.new(0, 0.5, 0))
if onScreen then
local height = (camera:WorldToViewportPoint(root.Position - Vector3.new(0, 3, 0)).Y - headPos.Y) * 1.1
local width = height * 0.6
data.box.Size = Vector2.new(width, height)
data.box.Position = Vector2.new(rootPos.X - width/2, headPos.Y)
data.box.Visible = true
data.name.Text = player.Name
data.name.Position = Vector2.new(rootPos.X, headPos.Y - 22)
data.name.Visible = true
local dist = (root.Position - camera.CFrame.Position).Magnitude
data.dist.Text = string.format("%.0f studs", dist)
data.dist.Position = Vector2.new(rootPos.X, rootPos.Y + height/2 + 8)
data.dist.Visible = true
else
data.box.Visible = false
data.name.Visible = false
data.dist.Visible = false
end
end
end
-- Update FOV Circle
local function updateFOVCircle()
if not Aimbot_Enabled then
fovCircle.Visible = false
return
end
fovCircle.Visible = true
fovCircle.Radius = AIM_FOV
fovCircle.Position = UserInputService:GetMouseLocation()
end
-- Main Loop
local mainConn = RunService.RenderStepped:Connect(function()
updateESP()
updateAimbot()
updateTriggerbot()
updateFOVCircle()
end)
table.insert(_G.GrokGUI.connections, mainConn)
-- Setup players
for _, plr in ipairs(Players:GetPlayers()) do createDrawings(plr) end
Players.PlayerAdded:Connect(createDrawings)



this script is not compatible with xeno.