local CoreGui = game:GetService("CoreGui") local Players = game:GetService("Players") local VirtualInputManager = game:GetService("VirtualInputManager") local UserInputService = game:GetService("UserInputService") local StarterGui = game:GetService("StarterGui") local Player = Players.LocalPlayer pcall(function() StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Chat, true) end) if CoreGui:FindFirstChild("MobileKeyboard") then CoreGui.MobileKeyboard:Destroy() end local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "MobileKeyboard" ScreenGui.ResetOnSpawn = false ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling ScreenGui.Parent = CoreGui local function makeDraggable(guiObject) local dragging, dragInput, dragStart, startPos guiObject.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true dragStart = input.Position startPos = guiObject.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) guiObject.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseMovement then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging then local delta = input.Position - dragStart guiObject.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) end end) end local ToggleButton = Instance.new("TextButton") ToggleButton.Name = "CenterToggleBtn" ToggleButton.Size = UDim2.new(0, 50, 0, 50) ToggleButton.Position = UDim2.new(0.5, -25, 0, 10) ToggleButton.BackgroundColor3 = Color3.fromRGB(80, 150, 255) ToggleButton.BorderSizePixel = 0 ToggleButton.Text = "⌨" ToggleButton.TextColor3 = Color3.fromRGB(255, 255, 255) ToggleButton.TextSize = 22 ToggleButton.ZIndex = 100 ToggleButton.Active = true ToggleButton.Parent = ScreenGui local UICornerBtn = Instance.new("UICorner") UICornerBtn.CornerRadius = UDim.new(0, 10) UICornerBtn.Parent = ToggleButton makeDraggable(ToggleButton) local KeyboardFrame = Instance.new("Frame") KeyboardFrame.Name = "FullKeyboardPanel" KeyboardFrame.Size = UDim2.new(0, 680, 0, 210) KeyboardFrame.Position = UDim2.new(0.5, -340, 0, 65) KeyboardFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 25) KeyboardFrame.BorderSizePixel = 0 KeyboardFrame.Visible = false KeyboardFrame.ZIndex = 99 KeyboardFrame.Active = true KeyboardFrame.Parent = ScreenGui local FrameCorner = Instance.new("UICorner") FrameCorner.CornerRadius = UDim.new(0, 8) FrameCorner.Parent = KeyboardFrame makeDraggable(KeyboardFrame) local function createKey(name, text, keyCode, sizeX, sizeY, posX, posY) local btn = Instance.new("TextButton") btn.Name = name btn.Size = UDim2.new(0, sizeX, 0, sizeY) btn.Position = UDim2.new(0, posX, 0, posY) btn.BackgroundColor3 = Color3.fromRGB(45, 45, 55) btn.BorderSizePixel = 0 btn.Text = text btn.TextColor3 = Color3.fromRGB(255, 255, 255) btn.TextSize = 11 btn.ZIndex = 100 btn.Active = true btn.Parent = KeyboardFrame local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 4) corner.Parent = btn if keyCode then btn.MouseButton1Down:Connect(function() pcall(function() VirtualInputManager:SendKeyEvent(true, keyCode, false, game) end) btn.BackgroundColor3 = Color3.fromRGB(50, 200, 100) end) btn.MouseButton1Up:Connect(function() pcall(function() VirtualInputManager:SendKeyEvent(false, keyCode, false, game) end) btn.BackgroundColor3 = Color3.fromRGB(45, 45, 55) end) btn.MouseLeave:Connect(function() pcall(function() VirtualInputManager:SendKeyEvent(false, keyCode, false, game) end) btn.BackgroundColor3 = Color3.fromRGB(45, 45, 55) end) end return btn end createKey("Esc", "Esc", Enum.KeyCode.Escape, 40, 24, 10, 8) createKey("F1", "F1", Enum.KeyCode.F1, 35, 24, 55, 8) createKey("F2", "F2", Enum.KeyCode.F2, 35, 24, 95, 8) createKey("F3", "F3", Enum.KeyCode.F3, 35, 24, 135, 8) createKey("F4", "F4", Enum.KeyCode.F4, 35, 24, 175, 8) createKey("F5", "F5", Enum.KeyCode.F5, 35, 24, 215, 8) createKey("F6", "F6", Enum.KeyCode.F6, 35, 24, 255, 8) createKey("F7", "F7", Enum.KeyCode.F7, 35, 24, 295, 8) createKey("F8", "F8", Enum.KeyCode.F8, 35, 24, 335, 8) createKey("F9", "F9", Enum.KeyCode.F9, 35, 24, 375, 8) createKey("F10", "F10", Enum.KeyCode.F10, 35, 24, 415, 8) createKey("F11", "F11", Enum.KeyCode.F11, 35, 24, 455, 8) createKey("F12", "F12", Enum.KeyCode.F12, 35, 24, 495, 8) createKey("Tilde", "`", Enum.KeyCode.Backquote, 38, 26, 10, 36) createKey("1", "1", Enum.KeyCode.One, 38, 26, 51, 36) createKey("2", "2", Enum.KeyCode.Two, 38, 26, 92, 36) createKey("3", "3", Enum.KeyCode.Three, 38, 26, 133, 36) createKey("4", "4", Enum.KeyCode.Four, 38, 26, 174, 36) createKey("5", "5", Enum.KeyCode.Five, 38, 26, 215, 36) createKey("6", "6", Enum.KeyCode.Six, 38, 26, 256, 36) createKey("7", "7", Enum.KeyCode.Seven, 38, 26, 297, 36) createKey("8", "8", Enum.KeyCode.Eight, 38, 26, 338, 36) createKey("9", "9", Enum.KeyCode.Nine, 38, 26, 379, 36) createKey("0", "0", Enum.KeyCode.Zero, 38, 26, 420, 36) createKey("Dash", "-", Enum.KeyCode.Minus, 38, 26, 461, 36) createKey("Equals", "=", Enum.KeyCode.Equals, 38, 26, 502, 36) createKey("Tab", "Tab", Enum.KeyCode.Tab, 50, 26, 10, 64) createKey("Q", "Q", Enum.KeyCode.Q, 38, 26, 63, 64) createKey("W", "W", Enum.KeyCode.W, 38, 26, 104, 64) createKey("E", "E", Enum.KeyCode.E, 38, 26, 145, 64) createKey("R", "R", Enum.KeyCode.R, 38, 26, 186, 64) createKey("T", "T", Enum.KeyCode.T, 38, 26, 227, 64) createKey("Y", "Y", Enum.KeyCode.Y, 38, 26, 268, 64) createKey("U", "U", Enum.KeyCode.U, 38, 26, 309, 64) createKey("I", "I", Enum.KeyCode.I, 38, 26, 350, 64) createKey("O", "O", Enum.KeyCode.O, 38, 26, 391, 64) createKey("P", "P", Enum.KeyCode.P, 38, 26, 432, 64) createKey("LBracket", "[", Enum.KeyCode.LeftBracket, 38, 26, 473, 64) createKey("RBracket", "]", Enum.KeyCode.RightBracket, 38, 26, 514, 64) createKey("Slash", "\\", Enum.KeyCode.BackSlash, 45, 26, 555, 64) createKey("Caps", "Caps", Enum.KeyCode.CapsLock, 58, 26, 10, 92) createKey("A", "A", Enum.KeyCode.A, 38, 26, 71, 92) createKey("S", "S", Enum.KeyCode.S, 38, 26, 112, 92) createKey("D", "D", Enum.KeyCode.D, 38, 26, 153, 92) createKey("F", "F", Enum.KeyCode.F, 38, 26, 194, 92) createKey("G", "G", Enum.KeyCode.G, 38, 26, 235, 92) createKey("H", "H", Enum.KeyCode.H, 38, 26, 276, 92) createKey("J", "J", Enum.KeyCode.J, 38, 26, 317, 92) createKey("K", "K", Enum.KeyCode.K, 38, 26, 358, 92) createKey("L", "L", Enum.KeyCode.L, 38, 26, 399, 92) createKey("Semi", ";", Enum.KeyCode.Semicolon, 38, 26, 440, 92) createKey("Quote", "'", Enum.KeyCode.Quote, 38, 26, 481, 92) createKey("Enter", "Enter", Enum.KeyCode.Return, 75, 26, 522, 92) createKey("LShift", "Shift", Enum.KeyCode.LeftShift, 70, 26, 10, 120) createKey("Z", "Z", Enum.KeyCode.Z, 38, 26, 83, 120) createKey("X", "X", Enum.KeyCode.X, 38, 26, 124, 120) createKey("C", "C", Enum.KeyCode.C, 38, 26, 165, 120) createKey("V", "V", Enum.KeyCode.V, 38, 26, 206, 120) createKey("B", "B", Enum.KeyCode.B, 38, 26, 247, 120) createKey("N", "N", Enum.KeyCode.N, 38, 26, 288, 120) createKey("M", "M", Enum.KeyCode.M, 38, 26, 329, 120) createKey("Comma", ",", Enum.KeyCode.Comma, 38, 26, 370, 120) createKey("Dot", ".", Enum.KeyCode.Period, 38, 26, 411, 120) createKey("Slash2", "/", Enum.KeyCode.Slash, 38, 26, 452, 120) createKey("RShift", "RShift", Enum.KeyCode.RightShift, 70, 26, 493, 120) createKey("LCtrl", "Ctrl", Enum.KeyCode.LeftControl, 55, 26, 10, 148) createKey("LAlt", "Alt", Enum.KeyCode.LeftAlt, 50, 26, 68, 148) createKey("Space", "Spacebar", Enum.KeyCode.Space, 220, 26, 121, 148) createKey("RAlt", "Alt", Enum.KeyCode.RightAlt, 50, 26, 344, 148) createKey("RCtrl", "Ctrl", Enum.KeyCode.RightControl, 55, 26, 397, 148) createKey("Left", "◄", Enum.KeyCode.Left, 38, 26, 455, 148) createKey("Down", "▼", Enum.KeyCode.Down, 38, 26, 496, 148) createKey("Right", "►", Enum.KeyCode.Right, 38, 26, 537, 148) local StickZone = Instance.new("TextButton") StickZone.Name = "StickTouchZone" StickZone.Size = UDim2.new(0, 120, 0, 120) StickZone.Position = UDim2.new(0, 15, 1, -135) StickZone.BackgroundColor3 = Color3.fromRGB(0, 0, 0) StickZone.BackgroundTransparency = 0 StickZone.BorderSizePixel = 0 StickZone.Text = "" StickZone.Active = true StickZone.ZIndex = 99 StickZone.Parent = ScreenGui local StickZoneCorner = Instance.new("UICorner") StickZoneCorner.CornerRadius = UDim.new(1, 0) StickZoneCorner.Parent = StickZone local StickKnob = Instance.new("Frame") StickKnob.Name = "Knob" StickKnob.Size = UDim2.new(0, 40, 0, 40) StickKnob.Position = UDim2.new(0.5, -20, 0.5, -20) StickKnob.BackgroundColor3 = Color3.fromRGB(255, 255, 255) StickKnob.BackgroundTransparency = 0.2 StickKnob.BorderSizePixel = 0 StickKnob.ZIndex = 101 StickKnob.Parent = StickZone local StickKnobCorner = Instance.new("UICorner") StickKnobCorner.CornerRadius = UDim.new(1, 0) StickKnobCorner.Parent = StickKnob local activeInput = nil local knobCenter = Vector2.new(60, 60) local maxDist = 35 local function resetMovement() activeInput = nil StickKnob.Position = UDim2.new(0.5, -20, 0.5, -20) pcall(function() VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.W, false, game) VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.S, false, game) VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.A, false, game) VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.D, false, game) end) end StickZone.InputBegan:Connect(function(input) if (input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1) and not activeInput then activeInput = input end end) UserInputService.InputEnded:Connect(function(input) if input == activeInput then resetMovement() end end) UserInputService.InputChanged:Connect(function(input) if input == activeInput and (input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseMovement) then local absPos = StickZone.AbsolutePosition local touchPos = Vector2.new(input.Position.X, input.Position.Y) local relPos = touchPos - absPos - knobCenter if relPos.Magnitude > maxDist then relPos = relPos.Unit * maxDist end StickKnob.Position = UDim2.new(0.5, relPos.X - 20, 0.5, relPos.Y - 20) pcall(function() VirtualInputManager:SendKeyEvent(relPos.Y < -8, Enum.KeyCode.W, false, game) VirtualInputManager:SendKeyEvent(relPos.Y > 8, Enum.KeyCode.S, false, game) VirtualInputManager:SendKeyEvent(relPos.X < -8, Enum.KeyCode.A, false, game) VirtualInputManager:SendKeyEvent(relPos.X > 8, Enum.KeyCode.D, false, game) end) end end) local JumpButton = Instance.new("TextButton") JumpButton.Name = "CustomJumpBtn" JumpButton.Size = UDim2.new(0, 70, 0, 70) JumpButton.Position = UDim2.new(1, -90, 1, -90) JumpButton.BackgroundColor3 = Color3.fromRGB(255, 90, 90) JumpButton.BackgroundTransparency = 0.2 JumpButton.BorderSizePixel = 0 JumpButton.Text = "JUMP" JumpButton.TextColor3 = Color3.fromRGB(255, 255, 255) JumpButton.TextSize = 16 JumpButton.ZIndex = 100 JumpButton.Active = true JumpButton.Parent = ScreenGui local JumpCorner = Instance.new("UICorner") JumpCorner.CornerRadius = UDim.new(1, 0) JumpCorner.Parent = JumpButton local isHoldingJump = false JumpButton.MouseButton1Down:Connect(function() isHoldingJump = true end) JumpButton.MouseButton1Up:Connect(function() isHoldingJump = false end) JumpButton.MouseLeave:Connect(function() isHoldingJump = false end) task.spawn(function() while true do if isHoldingJump then local char = Player.Character if char then local humanoid = char:FindFirstChildOfClass("Humanoid") if humanoid and humanoid:GetState() == Enum.HumanoidStateType.Running then humanoid:ChangeState(Enum.HumanoidStateType.Jumping) end end end task.wait(0.1) end end) local isOpen = false ToggleButton.MouseButton1Click:Connect(function() isOpen = not isOpen KeyboardFrame.Visible = isOpen ToggleButton.BackgroundColor3 = isOpen and Color3.fromRGB(50, 200, 100) or Color3.fromRGB(80, 150, 255) end)