-- 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)