-- Roblox Lua Script: Draggable UI with Character Freeze Toggle -- Place this inside a LocalScript (e.g., in StarterPlayerScripts or StarterGui) local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local player = Players.LocalPlayer local character = player.Character or player.CharacterAdded:Wait() player.CharacterAdded:Connect(function(newChar) character = newChar end) -- ========================================== -- I. CREATE THE INTERACTIVE UI -- ========================================== local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "FreezeMenuGui" ScreenGui.ResetOnSpawn = false ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling -- Main Frame (The Panel) local MainFrame = Instance.new("Frame") MainFrame.Name = "MainFrame" MainFrame.Size = UDim2.new(0, 220, 0, 110) MainFrame.Position = UDim2.new(0.5, -110, 0.4, -55) MainFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 35) MainFrame.BorderSizePixel = 0 MainFrame.Active = true MainFrame.Parent = ScreenGui local MainUICorner = Instance.new("UICorner") MainUICorner.CornerRadius = UDim.new(0, 8) MainUICorner.Parent = MainFrame local MainUIStroke = Instance.new("UIStroke") MainUIStroke.Color = Color3.fromRGB(55, 55, 60) MainUIStroke.Thickness = 1.5 MainUIStroke.Parent = MainFrame -- Title Bar (Drag Area) local TitleLabel = Instance.new("TextLabel") TitleLabel.Name = "TitleLabel" TitleLabel.Size = UDim2.new(1, 0, 0, 35) TitleLabel.BackgroundColor3 = Color3.fromRGB(20, 20, 25) TitleLabel.Text = " Freeze Hack Tool" TitleLabel.TextColor3 = Color3.fromRGB(240, 240, 240) TitleLabel.TextXAlignment = Enum.TextXAlignment.Left TitleLabel.Font = Enum.Font.SourceSansBold TitleLabel.TextSize = 16 TitleLabel.BorderSizePixel = 0 TitleLabel.Parent = MainFrame local TitleUICorner = Instance.new("UICorner") TitleUICorner.CornerRadius = UDim.new(0, 8) TitleUICorner.Parent = TitleLabel -- Cover bottom corners of title to match design style local TitleCover = Instance.new("Frame") TitleCover.Size = UDim2.new(1, 0, 0, 10) TitleCover.Position = UDim2.new(0, 0, 1, -10) TitleCover.BackgroundColor3 = Color3.fromRGB(20, 20, 25) TitleCover.BorderSizePixel = 0 TitleCover.Parent = TitleLabel -- Toggle Button local ToggleButton = Instance.new("TextButton") ToggleButton.Name = "ToggleButton" ToggleButton.Size = UDim2.new(0, 180, 0, 40) ToggleButton.Position = UDim2.new(0.5, -90, 0, 55) ToggleButton.BackgroundColor3 = Color3.fromRGB(220, 50, 50) -- Default Red (OFF) ToggleButton.Text = "Status: UNFROZEN" ToggleButton.TextColor3 = Color3.fromRGB(255, 255, 255) ToggleButton.Font = Enum.Font.SourceSansBold ToggleButton.TextSize = 16 ToggleButton.AutoButtonColor = false ToggleButton.BorderSizePixel = 0 ToggleButton.Parent = MainFrame local ButtonUICorner = Instance.new("UICorner") ButtonUICorner.CornerRadius = UDim.new(0, 6) ButtonUICorner.Parent = ToggleButton -- Parent GUI safely to PlayerGui local success, err = pcall(function() ScreenGui.Parent = player:WaitForChild("PlayerGui") end) if not success then ScreenGui.Parent = game:GetService("CoreGui") -- Fallback for execution injection end -- ========================================== -- II. SMOOTH DRAGGING FUNCTIONALITY -- ========================================== local dragging, dragInput, dragStart, startPos local function update(input) local delta = input.Position - dragStart local targetPos = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) TweenService:Create(MainFrame, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Position = targetPos}):Play() end MainFrame.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = MainFrame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) MainFrame.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging then update(input) end end) -- ========================================== -- III. FREEZE LOGIC -- ========================================== local isFrozen = false local function setFreezeState(state) isFrozen = state if not character then return end local rootPart = character:FindFirstChild("HumanoidRootPart") if isFrozen then -- Action: Freeze Character ToggleButton.BackgroundColor3 = Color3.fromRGB(50, 180, 50) -- Green ToggleButton.Text = "Status: FROZEN" -- Anchor root part to lock position completely mid-air or mid-run if rootPart then rootPart.Anchored = true end else -- Action: Unfreeze Character ToggleButton.BackgroundColor3 = Color3.fromRGB(220, 50, 50) -- Red ToggleButton.Text = "Status: UNFROZEN" if rootPart then rootPart.Anchored = false end end end -- Toggle click listener ToggleButton.MouseButton1Click:Connect(function() setFreezeState(not isFrozen) end) -- Auto-re-anchor loop if player updates state or switches items while frozen RunService.Heartbeat:Connect(function() if isFrozen and character then local rootPart = character:FindFirstChild("HumanoidRootPart") if rootPart and not rootPart.Anchored then rootPart.Anchored = true end end end)