-- Meteor Boost – Zero-Gravity Click-to-Fly Script if script:GetAttribute("Running") then return end script:SetAttribute("Running", true) local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local CoreGui = game:GetService("CoreGui") local TweenService = game:GetService("TweenService") local LocalizationService = game:GetService("LocalizationService") local LocalPlayer = Players.LocalPlayer local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait() local Humanoid = Character:WaitForChild("Humanoid") local HRP = Character:WaitForChild("HumanoidRootPart") local userLocale = string.lower(LocalizationService.RobloxLocaleId) local isRussian = string.find(userLocale, "ru") ~= nil local L = { title = isRussian and "Метеорит" or "Meteor Boost", force = isRussian and "Сила" or "Force", clickMode = isRussian and "Клик-режим" or "Click Mode", on = isRussian and "ВКЛ" or "ON", off = isRussian and "ВЫКЛ" or "OFF", start = isRussian and "СТАРТ" or "START", } local boostForce = 50 local clickModeEnabled = true local isBoostActive = true local needStart = false local activeBlockTarget = nil local activeAirDirection = nil local residualSpin = Vector3.zero local isInResidualSpin = false local bodyVelocity local bodyAngular local safeDistance = 6 local savedProperties = {} local function saveCurrentProperties() table.clear(savedProperties) if Character then for _, part in ipairs(Character:GetDescendants()) do if part:IsA("BasePart") then savedProperties[part] = { canCollide = part.CanCollide, massless = part.Massless } end end end end local function restoreProperties() if Character then for _, part in ipairs(Character:GetDescendants()) do if part:IsA("BasePart") and savedProperties[part] and part.Parent then local orig = savedProperties[part] part.CanCollide = orig.canCollide part.Massless = orig.massless end end end table.clear(savedProperties) end local function removePhysics() if bodyVelocity then bodyVelocity:Destroy() bodyVelocity = nil end if bodyAngular then bodyAngular:Destroy() bodyAngular = nil end if Humanoid and Humanoid.Parent then Humanoid.PlatformStand = false Humanoid.AutoRotate = true end restoreProperties() activeBlockTarget = nil activeAirDirection = nil residualSpin = Vector3.zero isInResidualSpin = false end local function setupPhysics() removePhysics() Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait() Humanoid = Character:WaitForChild("Humanoid") HRP = Character:WaitForChild("HumanoidRootPart") saveCurrentProperties() for _, part in ipairs(Character:GetDescendants()) do if part:IsA("BasePart") then part.CanCollide = false part.Massless = true end end Humanoid.PlatformStand = true Humanoid.AutoRotate = false bodyVelocity = Instance.new("BodyVelocity") bodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge) bodyVelocity.Velocity = Vector3.zero bodyVelocity.Parent = HRP bodyAngular = Instance.new("BodyAngularVelocity") bodyAngular.MaxTorque = Vector3.new(math.huge, math.huge, math.huge) bodyAngular.AngularVelocity = Vector3.zero bodyAngular.Parent = HRP end setupPhysics() local function boostToward(targetPos, isBlock) if not bodyVelocity or not bodyAngular then return end if not HRP or not HRP.Parent then return end local direction = (targetPos - HRP.Position).Unit if direction.Magnitude < 0.01 then direction = Vector3.new(0, 1, 0) end local speed = boostForce * 2 bodyVelocity.Velocity = direction * speed local angularStrength = boostForce / 30 local randAngular = Vector3.new( math.random(-100, 100) / 100, math.random(-100, 100) / 100, math.random(-100, 100) / 100 ).Unit * angularStrength bodyAngular.AngularVelocity = randAngular residualSpin = randAngular * 0.3 if isBlock then activeBlockTarget = targetPos activeAirDirection = nil isInResidualSpin = false else activeAirDirection = true activeBlockTarget = nil isInResidualSpin = false end end local function stopAllBoost() activeBlockTarget = nil activeAirDirection = nil if bodyVelocity then bodyVelocity.Velocity = Vector3.zero end end local function handleClick(hitPos, target, normal) if not isBoostActive then return end if not HRP or not HRP.Parent then return end if isDragging then return end if activeBlockTarget then if (HRP.Position - activeBlockTarget).Magnitude < safeDistance then return end end local isBlock = false local safeTargetPos = hitPos if target and target:IsA("BasePart") and not target:IsDescendantOf(Character) then local surfNormal = normal or (HRP.Position - hitPos).Unit if surfNormal.Magnitude == 0 then surfNormal = Vector3.new(0,1,0) end safeTargetPos = hitPos + surfNormal * safeDistance isBlock = true end boostToward(safeTargetPos, isBlock) end local mouse = LocalPlayer:GetMouse() mouse.Button1Down:Connect(function() if UserInputService.TouchEnabled then return end if UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton2) then return end local target = mouse.Target local hitPos = mouse.Hit.Position local normal = target and target:IsA("BasePart") and Vector3.FromNormalId(mouse.TargetSurface) handleClick(hitPos, target, normal) end) local touchStartPos = nil local touchMoved = false local touchStartTime = 0 UserInputService.InputBegan:Connect(function(input, gameProcessed) if gameProcessed then return end if input.UserInputType == Enum.UserInputType.Touch then touchStartPos = input.Position touchMoved = false touchStartTime = tick() end end) UserInputService.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch and touchStartPos then local delta = (input.Position - touchStartPos).Magnitude if delta > 15 then touchMoved = true end end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch then if not touchMoved and (tick() - touchStartTime) < 0.4 then local mousePos = UserInputService:GetMouseLocation() local ray = workspace.CurrentCamera:ScreenPointToRay(mousePos.X, mousePos.Y) local raycastParams = RaycastParams.new() raycastParams.FilterType = Enum.RaycastFilterType.Blacklist raycastParams.FilterDescendantsInstances = {Character} local rayResult = workspace:Raycast(ray.Origin, ray.Direction * 1000, raycastParams) local hitPos = rayResult and rayResult.Position or (ray.Origin + ray.Direction * 1000) local target = rayResult and rayResult.Instance local normal = rayResult and rayResult.Normal handleClick(hitPos, target, normal) end touchStartPos = nil touchMoved = false end end) RunService.Heartbeat:Connect(function(dt) if not HRP or not HRP.Parent then return end if not bodyVelocity or not bodyAngular then return end if activeBlockTarget then local dir = (activeBlockTarget - HRP.Position) local distance = dir.Magnitude if distance < 0.01 then stopAllBoost() isInResidualSpin = true bodyAngular.AngularVelocity = residualSpin return end local direction = dir.Unit local maxSpeed = boostForce * 2 local speed = maxSpeed if distance < safeDistance + 10 then local t = math.clamp((distance - safeDistance) / 10, 0, 1) speed = maxSpeed * t end bodyVelocity.Velocity = direction * speed bodyAngular.AngularVelocity = bodyAngular.AngularVelocity * 0.97 if speed < 0.5 and bodyAngular.AngularVelocity.Magnitude < 0.5 then stopAllBoost() isInResidualSpin = true bodyAngular.AngularVelocity = residualSpin end elseif activeAirDirection then bodyVelocity.Velocity = bodyVelocity.Velocity * 0.98 bodyAngular.AngularVelocity = bodyAngular.AngularVelocity * 0.97 if bodyVelocity.Velocity.Magnitude < 0.5 and bodyAngular.AngularVelocity.Magnitude < 0.5 then stopAllBoost() bodyAngular.AngularVelocity = Vector3.zero end elseif isInResidualSpin then bodyAngular.AngularVelocity = bodyAngular.AngularVelocity * 0.995 bodyVelocity.Velocity = Vector3.zero if bodyAngular.AngularVelocity.Magnitude < 0.05 then bodyAngular.AngularVelocity = Vector3.zero isInResidualSpin = false end else bodyVelocity.Velocity = Vector3.zero bodyAngular.AngularVelocity = Vector3.zero end end) if CoreGui:FindFirstChild("MeteorBoostUI") then CoreGui.MeteorBoostUI:Destroy() end local screenGui = Instance.new("ScreenGui") screenGui.Name = "MeteorBoostUI" screenGui.ResetOnSpawn = false screenGui.IgnoreGuiInset = true screenGui.Parent = CoreGui local mainFrame = Instance.new("Frame") mainFrame.Size = UDim2.new(0, 240, 0, 140) mainFrame.Position = UDim2.new(0.5, -120, 0, 50) mainFrame.BackgroundColor3 = Color3.fromRGB(12, 12, 12) mainFrame.BorderSizePixel = 0 mainFrame.ZIndex = 100 mainFrame.ClipsDescendants = true mainFrame.Parent = screenGui local function addBorder(parent) local t = 1 local l = Instance.new("Frame"); l.Size = UDim2.new(0, t, 1, 0); l.BackgroundColor3 = Color3.fromRGB(50,50,50); l.BorderSizePixel=0; l.ZIndex=200; l.Parent=parent local tp = Instance.new("Frame"); tp.Size = UDim2.new(1,0,0,t); tp.BackgroundColor3 = Color3.fromRGB(50,50,50); tp.BorderSizePixel=0; tp.ZIndex=200; tp.Parent=parent local r = Instance.new("Frame"); r.Size = UDim2.new(0, t, 1, 0); r.Position=UDim2.new(1,-t,0,0); r.BackgroundColor3 = Color3.fromRGB(50,50,50); r.BorderSizePixel=0; r.ZIndex=200; r.Parent=parent local b = Instance.new("Frame"); b.Size = UDim2.new(1,0,0,t); b.Position=UDim2.new(0,0,1,-t); b.BackgroundColor3 = Color3.fromRGB(50,50,50); b.BorderSizePixel=0; b.ZIndex=200; b.Parent=parent end addBorder(mainFrame) local titleBar = Instance.new("Frame") titleBar.Size = UDim2.new(1, -2, 0, 22) titleBar.Position = UDim2.new(0, 1, 0, 1) titleBar.BackgroundColor3 = Color3.fromRGB(12,12,12) titleBar.BorderSizePixel = 0 titleBar.ZIndex = 101 titleBar.Parent = mainFrame local titleLabel = Instance.new("TextLabel") titleLabel.Size = UDim2.new(1, -30, 1, 0) titleLabel.Position = UDim2.new(0, 8, 0, 0) titleLabel.BackgroundTransparency = 1 titleLabel.Text = L.title titleLabel.TextColor3 = Color3.fromRGB(200,200,200) titleLabel.Font = Enum.Font.Code titleLabel.TextSize = 12 titleLabel.TextXAlignment = Enum.TextXAlignment.Left titleLabel.ZIndex = 102 titleLabel.Parent = titleBar local collapseButton = Instance.new("TextButton") collapseButton.Size = UDim2.new(0, 22, 0, 22) collapseButton.Position = UDim2.new(1, -22, 0, 0) collapseButton.BackgroundColor3 = Color3.fromRGB(25,25,25) collapseButton.BorderSizePixel = 0 collapseButton.Text = "-" collapseButton.TextColor3 = Color3.fromRGB(200,200,200) collapseButton.Font = Enum.Font.Code collapseButton.TextSize = 14 collapseButton.ZIndex = 102 collapseButton.Parent = titleBar addBorder(collapseButton) local titleDivider = Instance.new("Frame") titleDivider.Size = UDim2.new(1, -2, 0, 1) titleDivider.Position = UDim2.new(0, 1, 0, 23) titleDivider.BackgroundColor3 = Color3.fromRGB(50,50,50) titleDivider.BorderSizePixel = 0 titleDivider.ZIndex = 200 titleDivider.Parent = mainFrame local contentFrame = Instance.new("Frame") contentFrame.Size = UDim2.new(1, -2, 1, -25) contentFrame.Position = UDim2.new(0, 1, 0, 24) contentFrame.BackgroundTransparency = 1 contentFrame.ZIndex = 101 contentFrame.Visible = true contentFrame.Parent = mainFrame local isDragging = false local dragStartPos = nil local frameStartPos = nil local function startDrag(input) isDragging = true dragStartPos = input.Position frameStartPos = mainFrame.Position end local function stopDrag() isDragging = false end titleBar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then startDrag(input) end end) titleBar.InputEnded:Connect(stopDrag) titleLabel.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then startDrag(input) end end) titleLabel.InputEnded:Connect(stopDrag) UserInputService.InputChanged:Connect(function(input) if isDragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then local delta = input.Position - dragStartPos mainFrame.Position = UDim2.new(frameStartPos.X.Scale, frameStartPos.X.Offset + delta.X, frameStartPos.Y.Scale, frameStartPos.Y.Offset + delta.Y) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then stopDrag() end end) local menuCollapsed = false collapseButton.MouseButton1Click:Connect(function() menuCollapsed = not menuCollapsed if menuCollapsed then mainFrame:TweenSize(UDim2.new(0, 240, 0, 24), "Out", "Quad", 0.2, true) collapseButton.Text = "+" contentFrame.Visible = false else mainFrame:TweenSize(UDim2.new(0, 240, 0, 140), "Out", "Quad", 0.2, true) collapseButton.Text = "-" contentFrame.Visible = true end end) local function createButton(text, yPos, callback) local btn = Instance.new("TextButton") btn.Size = UDim2.new(0, 210, 0, 22) btn.Position = UDim2.new(0.5, -105, 0, yPos) btn.BackgroundColor3 = Color3.fromRGB(30,30,30) btn.Text = text btn.TextColor3 = Color3.fromRGB(200,200,200) btn.Font = Enum.Font.Code btn.TextSize = 11 btn.BorderSizePixel = 0 btn.ZIndex = 150 btn.Parent = contentFrame addBorder(btn) btn.Activated:Connect(callback) return btn end local function createToggle(text, yPos, default, callback) local btn = Instance.new("TextButton") btn.Size = UDim2.new(0, 210, 0, 22) btn.Position = UDim2.new(0.5, -105, 0, yPos) btn.BackgroundColor3 = default and Color3.fromRGB(25,45,25) or Color3.fromRGB(30,30,30) btn.Text = text .. ": " .. (default and L.on or L.off) btn.TextColor3 = Color3.fromRGB(200,200,200) btn.Font = Enum.Font.Code btn.TextSize = 11 btn.BorderSizePixel = 0 btn.ZIndex = 150 btn.Parent = contentFrame addBorder(btn) local state = default local debounce = false btn.Activated:Connect(function() if debounce then return end debounce = true state = not state btn.Text = text .. ": " .. (state and L.on or L.off) btn.BackgroundColor3 = state and Color3.fromRGB(25,45,25) or Color3.fromRGB(30,30,30) callback(state) task.delay(0.3, function() debounce = false end) end) return btn end local forceLabel = Instance.new("TextLabel") forceLabel.Size = UDim2.new(0, 210, 0, 18) forceLabel.Position = UDim2.new(0.5, -105, 0, 5) forceLabel.BackgroundTransparency = 1 forceLabel.Text = L.force .. ": 50" forceLabel.TextColor3 = Color3.fromRGB(200,200,200) forceLabel.Font = Enum.Font.Code forceLabel.TextSize = 11 forceLabel.ZIndex = 150 forceLabel.Parent = contentFrame local forceInput = Instance.new("TextBox") forceInput.Size = UDim2.new(0, 100, 0, 20) forceInput.Position = UDim2.new(0.5, -50, 0, 24) forceInput.BackgroundColor3 = Color3.fromRGB(30,30,30) forceInput.TextColor3 = Color3.fromRGB(200,200,200) forceInput.PlaceholderText = "1 / 500" forceInput.PlaceholderColor3 = Color3.fromRGB(100,100,100) forceInput.Text = "" forceInput.Font = Enum.Font.Code forceInput.TextSize = 11 forceInput.BorderSizePixel = 0 forceInput.ZIndex = 150 forceInput.Parent = contentFrame addBorder(forceInput) forceInput.FocusLost:Connect(function() local num = tonumber(forceInput.Text) if num and num >= 1 and num <= 500 then boostForce = num forceLabel.Text = L.force .. ": " .. num forceInput.Text = "" else forceInput.Text = "" end end) createToggle(L.clickMode, 52, true, function(state) clickModeEnabled = state if not needStart then isBoostActive = state end end) local startBtn = Instance.new("TextButton") startBtn.Size = UDim2.new(0, 210, 0, 30) startBtn.Position = UDim2.new(0.5, -105, 0, 80) startBtn.BackgroundColor3 = Color3.fromRGB(46, 204, 113) startBtn.Text = L.start startBtn.TextColor3 = Color3.fromRGB(255,255,255) startBtn.Font = Enum.Font.Code startBtn.TextSize = 14 startBtn.BorderSizePixel = 0 startBtn.ZIndex = 160 startBtn.Visible = false startBtn.Parent = contentFrame addBorder(startBtn) startBtn.MouseButton1Click:Connect(function() Character = LocalPlayer.Character if Character then Humanoid = Character:WaitForChild("Humanoid") HRP = Character:WaitForChild("HumanoidRootPart") setupPhysics() end local tweenInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) local goals = { BackgroundTransparency = 1, TextTransparency = 1, Size = UDim2.new(0, 0, 0, 0) } local tween = TweenService:Create(startBtn, tweenInfo, goals) tween:Play() tween.Completed:Connect(function() startBtn.Visible = false startBtn.BackgroundTransparency = 0 startBtn.TextTransparency = 0 startBtn.Size = UDim2.new(0, 210, 0, 30) end) needStart = false isBoostActive = clickModeEnabled end) Humanoid.Died:Connect(function() needStart = true isBoostActive = false removePhysics() if startBtn then startBtn.Visible = true end end) LocalPlayer.CharacterAdded:Connect(function(newChar) Character = newChar Humanoid = newChar:WaitForChild("Humanoid") HRP = newChar:WaitForChild("HumanoidRootPart") removePhysics() isInResidualSpin = false needStart = true isBoostActive = false if startBtn then startBtn.Visible = true end Humanoid.Died:Connect(function() needStart = true isBoostActive = false removePhysics() if startBtn then startBtn.Visible = true end end) end) script.Destroying:Connect(function() script:SetAttribute("Running", false) if screenGui then screenGui:Destroy() end removePhysics() end)