local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UIS = game:GetService("UserInputService") local player = Players.LocalPlayer -- GUI Setup local gui = Instance.new("ScreenGui", player:WaitForChild("PlayerGui")) gui.Name = "ImprovedMenu" gui.ResetOnSpawn = false -- Open Button local openBtn = Instance.new("TextButton", gui) openBtn.Size = UDim2.new(0, 120, 0, 40) openBtn.Position = UDim2.new(0, 20, 0.5, -20) openBtn.Text = "📱 Open Menu" openBtn.BackgroundColor3 = Color3.fromRGB(0, 0, 0) openBtn.TextColor3 = Color3.new(1, 1, 1) openBtn.Font = Enum.Font.SourceSansBold openBtn.AutoButtonColor = true openBtn.BorderSizePixel = 0 openBtn.BackgroundTransparency = 0.1 openBtn.TextScaled = true openBtn.TextWrapped = true local openBtnCorner = Instance.new("UICorner", openBtn) openBtnCorner.CornerRadius = UDim.new(0, 12) -- Key Frame local keyFrame = Instance.new("Frame", gui) keyFrame.Size = UDim2.new(0, 300, 0, 150) keyFrame.Position = UDim2.new(0.5, -150, 0.5, -75) keyFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 25) keyFrame.Visible = false local keyFrameUICorner = Instance.new("UICorner", keyFrame) keyFrameUICorner.CornerRadius = UDim.new(0, 12) local keyBox = Instance.new("TextBox", keyFrame) keyBox.Size = UDim2.new(0.8, 0, 0.3, 0) keyBox.Position = UDim2.new(0.1, 0, 0.2, 0) keyBox.PlaceholderText = "Enter Key" keyBox.Text = "" keyBox.BackgroundColor3 = Color3.fromRGB(40, 40, 40) keyBox.TextColor3 = Color3.new(1, 1, 1) local keySubmit = Instance.new("TextButton", keyFrame) keySubmit.Size = UDim2.new(0.6, 0, 0.25, 0) keySubmit.Position = UDim2.new(0.2, 0, 0.6, 0) keySubmit.Text = "Unlock" keySubmit.BackgroundColor3 = Color3.fromRGB(60, 60, 60) keySubmit.TextColor3 = Color3.new(1, 1, 1) keySubmit.Font = Enum.Font.SourceSansBold local keySubmitUICorner = Instance.new("UICorner", keySubmit) keySubmitUICorner.CornerRadius = UDim.new(0, 12) -- Main GUI local main = Instance.new("Frame", gui) main.Size = UDim2.new(0, 600, 0, 400) main.Position = UDim2.new(0.5, -300, 0.5, -200) main.BackgroundColor3 = Color3.fromRGB(0, 0, 0) main.Visible = false local mainUICorner = Instance.new("UICorner", main) mainUICorner.CornerRadius = UDim.new(0, 18) -- Close Button for main GUI local closeBtn = Instance.new("TextButton", main) closeBtn.Size = UDim2.new(0, 30, 0, 30) closeBtn.Position = UDim2.new(1, -35, 0, 5) closeBtn.Text = "✖" closeBtn.BackgroundColor3 = Color3.fromRGB(100, 0, 0) closeBtn.TextColor3 = Color3.new(1, 1, 1) closeBtn.Font = Enum.Font.SourceSansBold closeBtn.AutoButtonColor = true local closeUICorner = Instance.new("UICorner", closeBtn) closeUICorner.CornerRadius = UDim.new(0, 12) -- Left Tabs local leftTabs = Instance.new("Frame", main) leftTabs.Size = UDim2.new(0, 100, 1, 0) leftTabs.BackgroundColor3 = Color3.fromRGB(20, 20, 20) local leftTabsUICorner = Instance.new("UICorner", leftTabs) leftTabsUICorner.CornerRadius = UDim.new(0, 12) -- Top Tabs local topTabs = Instance.new("Frame", main) topTabs.Size = UDim2.new(1, -100, 0, 30) topTabs.Position = UDim2.new(0, 100, 0, 0) topTabs.BackgroundColor3 = Color3.fromRGB(30, 30, 30) local topTabsUICorner = Instance.new("UICorner", topTabs) topTabsUICorner.CornerRadius = UDim.new(0, 12) -- Content Area local contentFrame = Instance.new("Frame", main) contentFrame.Size = UDim2.new(1, -100, 1, -30) contentFrame.Position = UDim2.new(0, 100, 0, 30) contentFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 40) local contentUICorner = Instance.new("UICorner", contentFrame) contentUICorner.CornerRadius = UDim.new(0, 12) -- Store script tabs local scriptTabs = {} local activeTabIndex = nil local function setActiveTab(index) for i, box in ipairs(scriptTabs) do box.Visible = (i == index) end for i, btn in ipairs(topTabs:GetChildren()) do if btn:IsA("TextButton") and btn ~= plusBtn then btn.BackgroundColor3 = (i == index and Color3.fromRGB(100, 100, 100) or Color3.fromRGB(50, 50, 50)) end end activeTabIndex = index end local function createScriptTab(name, content) local tab = Instance.new("TextButton", topTabs) tab.Size = UDim2.new(0, 100, 1, 0) tab.Text = name tab.BackgroundColor3 = Color3.fromRGB(50, 50, 50) tab.TextColor3 = Color3.new(1, 1, 1) tab.Font = Enum.Font.SourceSansBold tab.AutoButtonColor = true local tabUICorner = Instance.new("UICorner", tab) tabUICorner.CornerRadius = UDim.new(0, 12) local box = Instance.new("TextBox", contentFrame) box.Size = UDim2.new(1, 0, 1, 0) box.Text = content or "-- Write your script here" box.ClearTextOnFocus = false box.MultiLine = true box.Visible = false box.BackgroundColor3 = Color3.fromRGB(10, 10, 10) box.TextColor3 = Color3.new(1, 1, 1) box.Font = Enum.Font.Code box.TextSize = 16 box.TextXAlignment = Enum.TextXAlignment.Left box.TextYAlignment = Enum.TextYAlignment.Top scriptTabs[#scriptTabs + 1] = box tab.MouseButton1Click:Connect(function() setActiveTab(#scriptTabs) end) setActiveTab(#scriptTabs) end -- + Button for new tabs plusBtn = Instance.new("TextButton", topTabs) plusBtn.Size = UDim2.new(0, 30, 1, 0) plusBtn.Position = UDim2.new(1, -30, 0, 0) plusBtn.Text = "+" plusBtn.BackgroundColor3 = Color3.fromRGB(80, 80, 80) plusBtn.TextColor3 = Color3.new(1, 1, 1) plusBtn.Font = Enum.Font.SourceSansBold plusBtn.AutoButtonColor = true local plusUICorner = Instance.new("UICorner", plusBtn) plusUICorner.CornerRadius = UDim.new(0, 12) plusBtn.MouseButton1Click:Connect(function() createScriptTab("Tab " .. tostring(#scriptTabs + 1)) end) -- Mods Tab Buttons & Toggles local modsButtons = {} local flyActive = false local noclipActive = false local lockActive = false local flingActive = false local bodyGyro, bodyVelocity, flingTouchedConnection local direction = Vector3.new(0,0,0) local keysHeld = {} -- Fly toggle function local function toggleFly(on) local char = player.Character local hrp = char and char:FindFirstChild("HumanoidRootPart") if not hrp then return end if on then if bodyGyro or bodyVelocity then return end -- already flying bodyGyro = Instance.new("BodyGyro", hrp) bodyGyro.P = 9e4 bodyGyro.MaxTorque = Vector3.new(9e9, 9e9, 9e9) bodyVelocity = Instance.new("BodyVelocity", hrp) bodyVelocity.MaxForce = Vector3.new(9e9, 9e9, 9e9) bodyVelocity.Velocity = Vector3.new(0,0,0) else if bodyGyro then bodyGyro:Destroy(); bodyGyro = nil end if bodyVelocity then bodyVelocity:Destroy(); bodyVelocity = nil end end flyActive = on end -- Noclip toggle local noclipConn local function toggleNoclip(on) if on then if noclipConn then return end noclipConn = RunService.Stepped:Connect(function() if player.Character then for _, p in pairs(player.Character:GetDescendants()) do if p:IsA("BasePart") then p.CanCollide = false end end end end) else if noclipConn then noclipConn:Disconnect() noclipConn = nil end end noclipActive = on end -- Lock to nearest player head toggle local lockWeld local function toggleLock(on) if on then if lockWeld then return end local closest, dist = nil, math.huge for _, p in pairs(Players:GetPlayers()) do if p ~= player and p.Character and p.Character:FindFirstChild("Head") and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then local d = (p.Character.Head.Position - player.Character.Head.Position).Magnitude if d < dist then closest, dist = p, d end end end if closest then lockWeld = Instance.new("WeldConstraint") lockWeld.Part0 = player.Character.HumanoidRootPart lockWeld.Part1 = closest.Character.Head lockWeld.Parent = lockWeld.Part0 end else if lockWeld then lockWeld:Destroy() lockWeld = nil end end lockActive = on end -- Fling toggle and function local function flingTouch(playerToFling) local char = playerToFling.Character if not char then return end local hrp = char:FindFirstChild("HumanoidRootPart") if not hrp then return end local bav = Instance.new("BodyAngularVelocity", hrp) bav.MaxTorque = Vector3.new(0, math.huge, 0) bav.AngularVelocity = Vector3.new(0, 30, 0) game.Debris:AddItem(bav, 3) local bv = Instance.new("BodyVelocity", hrp) bv.MaxForce = Vector3.new(9e9, 9e9, 9e9) bv.Velocity = Vector3.new(0, 100, 0) game.Debris:AddItem(bv, 1) end local function toggleFling(on) if on then if flingTouchedConnection then return end local char = player.Character local hrp = char and char:FindFirstChild("HumanoidRootPart") if not hrp then return end flingTouchedConnection = hrp.Touched:Connect(function(hit) local hitChar = hit.Parent local plr = Players:GetPlayerFromCharacter(hitChar) if plr and plr ~= player then flingTouch(plr) end end) else if flingTouchedConnection then flingTouchedConnection:Disconnect() flingTouchedConnection = nil end end flingActive = on end -- Update Fly movement each frame RunService.RenderStepped:Connect(function() if flyActive and bodyGyro and bodyVelocity then local cam = workspace.CurrentCamera bodyGyro.CFrame = cam.CFrame local moveVec = Vector3.new(0,0,0) if keysHeld[Enum.KeyCode.W] then moveVec = moveVec + Vector3.new(0, 0, -1) end if keysHeld[Enum.KeyCode.S] then moveVec = moveVec + Vector3.new(0, 0, 1) end if keysHeld[Enum.KeyCode.A] then moveVec = moveVec + Vector3.new(-1, 0, 0) end if keysHeld[Enum.KeyCode.D] then moveVec = moveVec + Vector3.new(1, 0, 0) end if moveVec.Magnitude > 0 then bodyVelocity.Velocity = cam.CFrame:VectorToWorldSpace(moveVec.Unit * 70) else bodyVelocity.Velocity = Vector3.new(0,0,0) end end end) UIS.InputBegan:Connect(function(input, gameProcessed) if gameProcessed then return end if flyActive then if input.UserInputType == Enum.UserInputType.Keyboard then keysHeld[input.KeyCode] = true end end end) UIS.InputEnded:Connect(function(input) if flyActive then if input.UserInputType == Enum.UserInputType.Keyboard then keysHeld[input.KeyCode] = nil end end end) -- Mods tab buttons local function showMods() contentFrame:ClearAllChildren() modsButtons = {} local function createToggleButton(text, initial, toggleFunc) local btn = Instance.new("TextButton", contentFrame) btn.Size = UDim2.new(1, -20, 0, 40) btn.Position = UDim2.new(0, 10, 0, (#contentFrame:GetChildren()) * 45) btn.BackgroundColor3 = initial and Color3.fromRGB(0, 170, 0) or Color3.fromRGB(85, 85, 85) btn.TextColor3 = Color3.new(1, 1, 1) btn.Text = text .. (initial and " [ON]" or " [OFF]") btn.Font = Enum.Font.SourceSansBold local btnCorner = Instance.new("UICorner", btn) btnCorner.CornerRadius = UDim.new(0, 12) local toggled = initial btn.MouseButton1Click:Connect(function() toggled = not toggled btn.BackgroundColor3 = toggled and Color3.fromRGB(0, 170, 0) or Color3.fromRGB(85, 85, 85) btn.Text = text .. (toggled and " [ON]" or " [OFF]") toggleFunc(toggled) end) return btn end modsButtons.fly = createToggleButton("Fly", flyActive, toggleFly) modsButtons.noclip = createToggleButton("Noclip", noclipActive, toggleNoclip) modsButtons.lock = createToggleButton("Lock to Head", lockActive, toggleLock) modsButtons.fling = createToggleButton("Fling (Touch)", flingActive, toggleFling) end -- Left Tabs Buttons for i, name in ipairs({"Scripts", "Mods"}) do local tabBtn = Instance.new("TextButton", leftTabs) tabBtn.Size = UDim2.new(1, 0, 0, 40) tabBtn.Position = UDim2.new(0, 0, 0, (i-1)*45) tabBtn.BackgroundColor3 = Color3.fromRGB(35,35,35) tabBtn.TextColor3 = Color3.new(1,1,1) tabBtn.Font = Enum.Font.SourceSansBold tabBtn.Text = name tabBtn.AutoButtonColor = true local tabBtnCorner = Instance.new("UICorner", tabBtn) tabBtnCorner.CornerRadius = UDim.new(0, 12) tabBtn.MouseButton1Click:Connect(function() if name == "Scripts" then contentFrame:ClearAllChildren() for _, box in pairs(scriptTabs) do box.Parent = contentFrame box.Visible = false end if #scriptTabs > 0 then scriptTabs[activeTabIndex or 1].Visible = true end -- Restore tabs buttons except plus button for _, child in pairs(topTabs:GetChildren()) do if child:IsA("TextButton") and child ~= plusBtn then child.Parent = topTabs child.Visible = true end end plusBtn.Parent = topTabs plusBtn.Visible = true elseif name == "Mods" then for _, b in pairs(scriptTabs) do b.Visible = false end showMods() end end) end -- Open and Key check openBtn.MouseButton1Click:Connect(function() openBtn.Visible = false keyFrame.Visible = true keyBox.Text = "" end) keySubmit.MouseButton1Click:Connect(function() if keyBox.Text == "imahuman" then keyFrame.Visible = false main.Visible = true if #scriptTabs == 0 then createScriptTab("Tab 1") end end end) -- Close main GUI button closeBtn.MouseButton1Click:Connect(function() main.Visible = false openBtn.Visible = true keyBox.Text = "" end) -- Make main draggable by topTabs local dragging, dragInput, dragStart, startPos topTabs.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true dragStart = input.Position startPos = main.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) UIS.InputChanged:Connect(function(input) if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then local delta = input.Position - dragStart main.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end)