-- Services local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService") local LocalPlayer = Players.LocalPlayer -- Prevent executing the script multiple times in the same session if getgenv().RocketBootsLoaded then local playerGui = LocalPlayer:WaitForChild("PlayerGui") local duplicateGui = Instance.new("ScreenGui") duplicateGui.Name = "RocketBootsDuplicateGui" duplicateGui.ResetOnSpawn = false duplicateGui.IgnoreGuiInset = true duplicateGui.Parent = playerGui local bg = Instance.new("Frame") bg.Size = UDim2.new(1, 0, 1, 0) bg.BackgroundColor3 = Color3.fromRGB(0, 0, 0) bg.BackgroundTransparency = 0.6 bg.Parent = duplicateGui local modal = Instance.new("Frame") modal.Size = UDim2.new(0, 320, 0, 160) modal.Position = UDim2.new(0.5, -160, 0.5, -80) modal.BackgroundColor3 = Color3.fromRGB(40, 40, 40) modal.BorderSizePixel = 0 modal.Parent = duplicateGui local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 12) corner.Parent = modal local textLabel = Instance.new("TextLabel") textLabel.Size = UDim2.new(1, -20, 0, 60) textLabel.Position = UDim2.new(0, 10, 0, 20) textLabel.BackgroundTransparency = 1 textLabel.Text = "You already have the item!" textLabel.TextColor3 = Color3.fromRGB(255, 255, 255) textLabel.TextSize = 18 textLabel.Font = Enum.Font.SourceSansBold textLabel.TextWrapped = true textLabel.Parent = modal local closeBtn = Instance.new("TextButton") closeBtn.Size = UDim2.new(0, 140, 0, 40) closeBtn.Position = UDim2.new(0.5, -70, 1, -50) closeBtn.Text = "Close" closeBtn.TextSize = 20 closeBtn.TextColor3 = Color3.fromRGB(255, 255, 255) closeBtn.BackgroundColor3 = Color3.fromRGB(200, 40, 40) closeBtn.BorderSizePixel = 0 closeBtn.Parent = modal local btnCorner = Instance.new("UICorner") btnCorner.CornerRadius = UDim.new(0, 8) btnCorner.Parent = closeBtn closeBtn.MouseButton1Click:Connect(function() if duplicateGui then duplicateGui:Destroy() end end) return end getgenv().RocketBootsLoaded = true local function giveTool() local character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait() local backpack = LocalPlayer:WaitForChild("Backpack", 5) or LocalPlayer:FindFirstChildOfClass("Backpack") if not backpack then return end -- Clean up old tool if it exists if character and character:FindFirstChild("Rocket Boots") then character["Rocket Boots"]:Destroy() end if backpack:FindFirstChild("Rocket Boots") then backpack["Rocket Boots"]:Destroy() end -- Create the Rocket Boots Tool instantly local Tool = Instance.new("Tool") Tool.Name = "Rocket Boots" Tool.RequiresHandle = false Tool.CanBeDropped = false Tool.Parent = backpack return Tool end local Tool = giveTool() local activeEffectsFolder = nil local infJumpConnection = nil local controlConnection = nil local screenGui = nil local warningGui = nil local fuel = 100 local isOutOfFuel = false local currentBackpackColor = Color3.fromRGB(100, 100, 100) -- Initial grey block color -- Function to show out-of-fuel warning GUI with exact requested text local function showOutOfFuelWarning() local playerGui = LocalPlayer:WaitForChild("PlayerGui") if playerGui:FindFirstChild("RocketBootsWarningGui") then return end warningGui = Instance.new("ScreenGui") warningGui.Name = "RocketBootsWarningGui" warningGui.ResetOnSpawn = false warningGui.IgnoreGuiInset = true warningGui.Parent = playerGui local bg = Instance.new("Frame") bg.Size = UDim2.new(1, 0, 1, 0) bg.BackgroundColor3 = Color3.fromRGB(0, 0, 0) bg.BackgroundTransparency = 0.6 bg.Parent = warningGui local modal = Instance.new("Frame") modal.Size = UDim2.new(0, 320, 0, 180) modal.Position = UDim2.new(0.5, -160, 0.5, -90) modal.BackgroundColor3 = Color3.fromRGB(40, 40, 40) modal.BorderSizePixel = 0 modal.Parent = warningGui local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 12) corner.Parent = modal local textLabel = Instance.new("TextLabel") textLabel.Size = UDim2.new(1, -20, 0, 90) textLabel.Position = UDim2.new(0, 10, 0, 15) textLabel.BackgroundTransparency = 1 textLabel.Text = "Fuel empty! Please unequip the item and equip again." textLabel.TextColor3 = Color3.fromRGB(255, 255, 255) textLabel.TextSize = 18 textLabel.TextWrapped = true textLabel.Parent = modal local closeBtn = Instance.new("TextButton") closeBtn.Size = UDim2.new(0, 140, 0, 40) closeBtn.Position = UDim2.new(0.5, -70, 1, -55) closeBtn.Text = "Close" closeBtn.TextSize = 20 closeBtn.TextColor3 = Color3.fromRGB(255, 255, 255) closeBtn.BackgroundColor3 = Color3.fromRGB(200, 40, 40) closeBtn.BorderSizePixel = 0 closeBtn.Parent = modal local btnCorner = Instance.new("UICorner") btnCorner.CornerRadius = UDim.new(0, 8) btnCorner.Parent = closeBtn closeBtn.MouseButton1Click:Connect(function() if warningGui then warningGui:Destroy() warningGui = nil end end) end -- Function to attach boots, larger backpack, wires, sound, and hide feet/shoes local function attachRocketBoots(char) local bootsModel = Instance.new("Model") bootsModel.Name = "RocketBootsModel" bootsModel.Parent = char local leftFoot = char:FindFirstChild("Left Foot") or char:FindFirstChild("LeftLowerLeg") or char:FindFirstChild("Left Leg") local rightFoot = char:FindFirstChild("Right Foot") or char:FindFirstChild("RightLowerLeg") or char:FindFirstChild("Right Leg") local upperTorso = char:FindFirstChild("UpperTorso") or char:FindFirstChild("Torso") or char:FindFirstChild("HumanoidRootPart") if not leftFoot or not rightFoot or not upperTorso then return end -- Thoroughly hide feet, shoes, and foot accessories safely for _, obj in ipairs(char:GetDescendants()) do if obj:IsA("BasePart") then local name = obj.Name if name == "Left Foot" or name == "Right Foot" or name == "LeftLowerLeg" or name == "RightLowerLeg" or name == "Left Leg" or name == "Right Leg" or name == "LeftHeel" or name == "RightHeel" or string.find(string.lower(name), "shoe") or string.find(string.lower(name), "boot") or string.find(string.lower(name), "foot") then obj.Transparency = 1 end elseif obj:IsA("Accessory") or obj:IsA("Model") then local name = string.lower(obj.Name) if string.find(name, "shoe") or string.find(name, "boot") or string.find(name, "foot") then for _, p in ipairs(obj:GetDescendants()) do if p:IsA("BasePart") then p.Transparency = 1 end end end end end -- Even Bigger Backpack Box on the back local backBox = Instance.new("Part") backBox.Size = Vector3.new(1.8, 2.0, 1.2) backBox.Color = currentBackpackColor backBox.Material = Enum.Material.SmoothPlastic backBox.CanCollide = false backBox.Massless = true local boxWeld = Instance.new("WeldConstraint") boxWeld.Part0 = upperTorso boxWeld.Part1 = backBox boxWeld.Parent = backBox backBox.CFrame = upperTorso.CFrame * CFrame.new(0, 0, 0.8) backBox.Parent = bootsModel -- Function to configure touch/collision filtering: touches walls/ground/objects ONLY, ignores players local function setupCollisionFilter(part) part.Touched:Connect(function(hit) local hitChar = hit.Parent local hitPlayer = Players:GetPlayerFromCharacter(hitChar) if hitPlayer then part.CanCollide = false end end) end -- Wire with correct fixed orientation (Restored!) local function createWire(fromPart, toPart, isLeftSide) local wire = Instance.new("Part") wire.Name = "Wire" wire.Size = Vector3.new(0.2, 0.2, 1) wire.Color = Color3.fromRGB(139, 0, 0) wire.Material = Enum.Material.SmoothPlastic wire.CanCollide = false wire.Massless = true wire.Parent = bootsModel local xOffset = isLeftSide and -0.9 or 0.9 local yawAngle = isLeftSide and math.rad(-15) or math.rad(15) local connection connection = RunService.RenderStepped:Connect(function() if not wire or not wire.Parent or not fromPart or not toPart then if connection then connection:Disconnect() end return end local p1 = (fromPart.CFrame * CFrame.new(xOffset, -0.8, 0.2)).Position local p2 = toPart.Position local distance = (p1 - p2).Magnitude if distance > 0.1 then wire.Size = Vector3.new(0.2, 0.2, distance) wire.CFrame = CFrame.new(p1, p2) * CFrame.new(0, 0, -distance / 2) * CFrame.Angles(math.rad(180), yawAngle, 0) end end) end local function createRocket(targetPart, isLeftSide) local bootBlock = Instance.new("Part") bootBlock.Size = Vector3.new(1.0, 1.2, 1.0) bootBlock.Color = Color3.fromRGB(139, 0, 0) bootBlock.Material = Enum.Material.Neon bootBlock.CanCollide = false bootBlock.Massless = true local weld1 = Instance.new("WeldConstraint") weld1.Part0 = targetPart weld1.Part1 = bootBlock weld1.Parent = bootBlock bootBlock.CFrame = targetPart.CFrame * CFrame.new(0, -0.1, 0) bootBlock.Parent = bootsModel local conePart = Instance.new("Part") conePart.Name = "BootNozzle1" conePart.Size = Vector3.new(0.5, 0.6, 0.5) conePart.Color = Color3.fromRGB(180, 180, 180) conePart.Material = Enum.Material.Metal conePart.CanCollide = true conePart.Massless = true setupCollisionFilter(conePart) local mesh = Instance.new("SpecialMesh") mesh.MeshType = Enum.MeshType.FileMesh mesh.MeshId = "rbxassetid://1033714" mesh.Scale = Vector3.new(0.5, 0.7, 0.5) mesh.Parent = conePart local weld2 = Instance.new("WeldConstraint") weld2.Part0 = bootBlock weld2.Part1 = conePart weld2.Parent = conePart conePart.CFrame = bootBlock.CFrame * CFrame.new(-0.2, -0.85, 0) * CFrame.Angles(0, 0, 0) conePart.Parent = bootsModel local conePart2 = Instance.new("Part") conePart2.Name = "BootNozzle2" conePart2.Size = Vector3.new(0.5, 0.6, 0.5) conePart2.Color = Color3.fromRGB(180, 180, 180) conePart2.Material = Enum.Material.Metal conePart2.CanCollide = true conePart2.Massless = true setupCollisionFilter(conePart2) local mesh2 = Instance.new("SpecialMesh") mesh2.MeshType = Enum.MeshType.FileMesh mesh2.MeshId = "rbxassetid://1033714" mesh2.Scale = Vector3.new(0.5, 0.7, 0.5) mesh2.Parent = conePart2 local weld3 = Instance.new("WeldConstraint") weld3.Part0 = bootBlock weld3.Part1 = conePart2 weld3.Parent = conePart2 conePart2.CFrame = bootBlock.CFrame * CFrame.new(0.2, -0.85, 0) * CFrame.Angles(0, 0, 0) conePart2.Parent = bootsModel local bFire1 = Instance.new("Fire") bFire1.Name = "RocketTriangleFire" bFire1.Enabled = false bFire1.Size = 3 bFire1.Heat = -12 bFire1.Parent = conePart local bFire2 = Instance.new("Fire") bFire2.Name = "RocketTriangleFire" bFire2.Enabled = false bFire2.Size = 3 bFire2.Heat = -12 bFire2.Parent = conePart2 local sound = Instance.new("Sound") sound.Name = "RocketSound" sound.SoundId = "rbxassetid://4809574295" sound.Volume = 2 sound.Looped = false sound.Parent = conePart createWire(backBox, bootBlock, isLeftSide) end createRocket(leftFoot, true) createRocket(rightFoot, false) end -- Function to create control GUI & Fuel Bar local function createControlGUI() local playerGui = LocalPlayer:WaitForChild("PlayerGui") local touchGui = playerGui:FindFirstChild("TouchGui") if touchGui then local touchControlFrame = touchGui:FindFirstChild("TouchControlFrame") if touchControlFrame then local jumpButton = touchControlFrame:FindFirstChild("JumpButton") if jumpButton then jumpButton.Visible = false end end end screenGui = Instance.new("ScreenGui") screenGui.Name = "RocketBootsControlGui" screenGui.ResetOnSpawn = false screenGui.IgnoreGuiInset = true screenGui.Parent = playerGui local frame = Instance.new("Frame") frame.Size = UDim2.new(0, 50, 0, 130) frame.Position = UDim2.new(1, -70, 0.5, -65) frame.BackgroundTransparency = 0.5 frame.BackgroundColor3 = Color3.fromRGB(30, 30, 30) frame.BorderSizePixel = 0 frame.Name = "ControlsFrame" frame.Parent = screenGui local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 16) corner.Parent = frame local function createButton(name, text, size, pos, bgCol) local btn = Instance.new("TextButton") btn.Name = name btn.Size = size btn.Position = pos btn.Text = text btn.TextSize = 22 btn.TextColor3 = Color3.fromRGB(255, 255, 255) btn.BackgroundColor3 = bgCol or Color3.fromRGB(60, 60, 60) btn.BorderSizePixel = 0 btn.Parent = frame local c = Instance.new("UICorner") c.CornerRadius = UDim.new(0, 8) c.Parent = btn return btn end local upBtn = createButton("UpButton", "↑", UDim2.new(1, -10, 0, 36), UDim2.new(0, 5, 0, 6)) local downBtn = createButton("DownButton", "↓", UDim2.new(1, -10, 0, 36), UDim2.new(0, 5, 1, -42)) local centerBtn = createButton("CenterButton", "🔒", UDim2.new(1, -10, 0, 32), UDim2.new(0, 5, 0.5, -16), Color3.fromRGB(80, 80, 80)) centerBtn.TextSize = 16 local fuelBarBg = Instance.new("Frame") fuelBarBg.Size = UDim2.new(0, 20, 0, 130) fuelBarBg.Position = UDim2.new(1, -100, 0.5, -65) fuelBarBg.BackgroundColor3 = Color3.fromRGB(30, 30, 30) fuelBarBg.BackgroundTransparency = 0.5 fuelBarBg.BorderSizePixel = 0 fuelBarBg.Name = "FuelBarContainer" fuelBarBg.Parent = screenGui local fuelBgCorner = Instance.new("UICorner") fuelBgCorner.CornerRadius = UDim.new(0, 6) fuelBgCorner.Parent = fuelBarBg local fuelFill = Instance.new("Frame") fuelFill.Size = UDim2.new(1, 0, 1, 0) fuelFill.AnchorPoint = Vector2.new(0, 1) fuelFill.Position = UDim2.new(0, 0, 1, 0) fuelFill.BackgroundColor3 = Color3.fromRGB(40, 200, 40) fuelFill.BorderSizePixel = 0 fuelFill.Parent = fuelBarBg local fuelFillCorner = Instance.new("UICorner") fuelFillCorner.CornerRadius = UDim.new(0, 6) fuelFillCorner.Parent = fuelFill local percentLabel = Instance.new("TextLabel") percentLabel.Size = UDim2.new(1, 0, 1, 0) percentLabel.Position = UDim2.new(0, 0, 0, 0) percentLabel.BackgroundTransparency = 1 percentLabel.Text = math.floor(fuel + 0.5) .. "%" percentLabel.TextColor3 = Color3.fromRGB(255, 255, 255) percentLabel.TextSize = 11 percentLabel.Rotation = -90 percentLabel.Font = Enum.Font.SourceSansBold percentLabel.Name = "PercentLabel" percentLabel.Parent = fuelBarBg local movingUp = false local movingDown = false local isLocked = false local lockedCFrame = nil local soundTimer = 0 local fireTimer = 0 local drainTimer = 0 upBtn.MouseButton1Down:Connect(function() if not isOutOfFuel then movingUp = true end end) upBtn.MouseButton1Up:Connect(function() movingUp = false end) upBtn.MouseLeave:Connect(function() movingUp = false end) downBtn.MouseButton1Down:Connect(function() if not isOutOfFuel then movingDown = true end end) downBtn.MouseButton1Up:Connect(function() movingDown = false end) downBtn.MouseLeave:Connect(function() movingDown = false end) centerBtn.MouseButton1Click:Connect(function() if isOutOfFuel then return end isLocked = not isLocked if isLocked then centerBtn.BackgroundColor3 = Color3.fromRGB(200, 40, 40) local char = LocalPlayer.Character if char and char:FindFirstChild("HumanoidRootPart") then lockedCFrame = char.HumanoidRootPart.CFrame end else centerBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) lockedCFrame = nil end end) controlConnection = RunService.RenderStepped:Connect(function(dt) local char = LocalPlayer.Character if char then local rootPart = char:FindFirstChild("HumanoidRootPart") local humanoid = char:FindFirstChildOfClass("Humanoid") local head = char:FindFirstChild("Head") if rootPart and humanoid then local activeFireAndSound = (not isOutOfFuel) and (isLocked or movingUp or movingDown) if activeFireAndSound then drainTimer = drainTimer + dt if movingUp then if drainTimer >= 0.500 then drainTimer = 0 fuel = math.max(0, fuel - 1.0) end elseif movingDown then if drainTimer >= 1.200 then drainTimer = 0 fuel = math.max(0, fuel - 0.5) end elseif isLocked then if drainTimer >= 1.500 then drainTimer = 0 fuel = math.max(0, fuel - 1.0) end end else drainTimer = 0 end if fuel <= 0 then if not isOutOfFuel then isOutOfFuel = true movingUp = false movingDown = false isLocked = false lockedCFrame = nil centerBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) showOutOfFuelWarning() end percentLabel.Text = "No fuel!" fuelFill.Size = UDim2.new(1, 0, 0, 0) else percentLabel.Text = math.floor(fuel + 0.5) .. "%" fuelFill.Size = UDim2.new(1, 0, fuel / 100, 0) if fuel > 50 then fuelFill.BackgroundColor3 = Color3.fromRGB(40, 200, 40) elseif fuel > 20 then fuelFill.BackgroundColor3 = Color3.fromRGB(220, 200, 40) else fuelFill.BackgroundColor3 = Color3.fromRGB(220, 40, 40) end end fireTimer = fireTimer + dt soundTimer = soundTimer + dt local fireInterval = 0.001 local soundInterval = 0.001 if movingUp then fireInterval = 0.001 soundInterval = 0.001 elseif movingDown then fireInterval = 0.020 soundInterval = 0.010 elseif isLocked then fireInterval = 0.010 soundInterval = 0.005 end local triggerFire = activeFireAndSound and (fireTimer >= fireInterval) if triggerFire then fireTimer = 0 end local triggerSound = activeFireAndSound and (soundTimer >= soundInterval) if triggerSound then soundTimer = 0 end for _, desc in ipairs(char:GetDescendants()) do if desc.Name == "RocketTriangleFire" and desc:IsA("Fire") then if activeFireAndSound then desc.Enabled = true if movingUp then desc.Size = 6 desc.Heat = -25 elseif movingDown then desc.Size = 4 desc.Heat = -12 else desc.Size = 4 desc.Heat = -15 end else desc.Enabled = false end elseif desc.Name == "RocketSound" and desc:IsA("Sound") then if activeFireAndSound and triggerSound then desc:Play() elseif not activeFireAndSound and desc.IsPlaying then desc:Stop() end end end if isLocked and not isOutOfFuel then rootPart.AssemblyLinearVelocity = Vector3.new(0, 0, 0) rootPart.AssemblyAngularVelocity = Vector3.new(0, 0, 0) if lockedCFrame then rootPart.CFrame = lockedCFrame end else lockedCFrame = nil local headOrientation = head and head.CFrame.UpVector or workspace.CurrentCamera.CFrame.LookVector local lookVec = head and head.CFrame.LookVector or workspace.CurrentCamera.CFrame.LookVector local flatLookVec = Vector3.new(lookVec.X, 0, lookVec.Z).Unit local targetY = rootPart.AssemblyLinearVelocity.Y if movingUp and not isOutOfFuel then targetY = headOrientation.Y * 35 elseif movingDown and not isOutOfFuel then targetY = -30 end local targetX, targetZ = 0, 0 local moveDir = humanoid.MoveDirection if moveDir.Magnitude > 0 and not isOutOfFuel then targetX = flatLookVec.X * 25 targetZ = flatLookVec.Z * 25 end rootPart.AssemblyLinearVelocity = Vector3.new(targetX, targetY, targetZ) end end end end) end local function setupToolEvents(t) t.Equipped:Connect(function() local char = LocalPlayer.Character if not char then return end local humanoid = char:FindFirstChildOfClass("Humanoid") local rootPart = char:FindFirstChild("HumanoidRootPart") if humanoid and rootPart then activeEffectsFolder = Instance.new("Folder") activeEffectsFolder.Name = "RocketBootsFolder" activeEffectsFolder.Parent = char attachRocketBoots(char) createControlGUI() infJumpConnection = UserInputService.JumpRequest:Connect(function() if humanoid:GetState() == Enum.HumanoidStateType.Freefall or humanoid:GetState() == Enum.HumanoidStateType.Jumping then return end if not isOutOfFuel and char and humanoid and rootPart then humanoid:ChangeState(Enum.HumanoidStateType.Jumping) rootPart.AssemblyLinearVelocity = Vector3.new(rootPart.AssemblyLinearVelocity.X, 60, rootPart.AssemblyLinearVelocity.Z) end end) end end) t.Unequipped:Connect(function() if infJumpConnection then infJumpConnection:Disconnect() infJumpConnection = nil end if controlConnection then controlConnection:Disconnect() controlConnection = nil end if screenGui then screenGui:Destroy() screenGui = nil end if warningGui then warningGui:Destroy() warningGui = nil end if activeEffectsFolder then activeEffectsFolder:Destroy() activeEffectsFolder = nil end if isOutOfFuel then fuel = 100 isOutOfFuel = false currentBackpackColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255)) end local playerGui = LocalPlayer:FindFirstChild("PlayerGui") if playerGui then local touchGui = playerGui:FindFirstChild("TouchGui") if touchGui then local touchControlFrame = touchGui:FindFirstChild("TouchControlFrame") if touchControlFrame then local jumpButton = touchControlFrame:FindFirstChild("JumpButton") if jumpButton then jumpButton.Visible = true end end end end local char = LocalPlayer.Character if char then for _, obj in ipairs(char:GetDescendants()) do if obj:IsA("BasePart") then local name = obj.Name if name == "Left Foot" or name == "Right Foot" or name == "LeftLowerLeg" or name == "RightLowerLeg" or name == "Left Leg" or name == "Right Leg" or name == "LeftHeel" or name == "RightHeel" or string.find(string.lower(name), "shoe") or string.find(string.lower(name), "boot") or string.find(string.lower(name), "foot") then obj.Transparency = 0 end elseif obj:IsA("Accessory") or obj:IsA("Model") then local name = string.lower(obj.Name) if string.find(name, "shoe") or string.find(name, "boot") or string.find(name, "foot") then for _, p in ipairs(obj:GetDescendants()) do if p:IsA("BasePart") then p.Transparency = 0 end end end end end for _, obj in ipairs(char:GetDescendants()) do if obj.Name == "RocketBootsModel" then obj:Destroy() end end end end) end if Tool then setupToolEvents(Tool) end -- Handle character respawn safely LocalPlayer.CharacterAdded:Connect(function(newChar) local humanoid = newChar:WaitForChild("Humanoid", 5) if humanoid then humanoid.Died:Connect(function() if isOutOfFuel then fuel = 100 isOutOfFuel = false currentBackpackColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255)) end end) end task.wait(1.5) Tool = giveTool() if Tool then setupToolEvents(Tool) end end)