if getgenv().MobileDroneLoaded then return end getgenv().MobileDroneLoaded = true if not game:IsLoaded() then game.Loaded:Wait() end local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local StarterGui = game:GetService("StarterGui") local LocalPlayer = Players.LocalPlayer local EmoteID = "74674031105738" local TargetFOV = 70 local DefaultFOV = 70 local DroneSpeed = 30 local ScreenGui = nil local ToggleButton = nil local UpButton = nil local DownButton = nil local SpeedBox = nil local ZoomInButton = nil local ZoomOutButton = nil local DisableZoomButton = nil local NoclipButton = nil local LoadedAnimationAsset = nil pcall(function() local InsertService = game:GetService("InsertService") local AssetModel = InsertService:LoadAsset(tonumber(EmoteID)) if AssetModel then for _, Child in ipairs(AssetModel:GetDescendants()) do if Child:IsA("Animation") then LoadedAnimationAsset = Child break end end AssetModel:Destroy() end end) local function SendNotification() pcall(function() StarterGui:SetCore("SendNotification", { Title = "Drone Script Loaded", Text = "Press E to Toggle Drone, Space to Fly Up, Ctrl/Q to Fly Down, H to Show Keybinds", Duration = 6 }) end) end local function SetupGui() local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") if PlayerGui:FindFirstChild("MobileDroneGui") then PlayerGui.MobileDroneGui:Destroy() end ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "MobileDroneGui" ScreenGui.ResetOnSpawn = false ScreenGui.Parent = PlayerGui local function CreateButton(Name, Text, Position, Size, Color) local Button = Instance.new("TextButton") Button.Name = Name Button.Text = Text Button.Position = Position Button.Size = Size Button.BackgroundColor3 = Color Button.BackgroundTransparency = 0.2 Button.TextColor3 = Color3.fromRGB(255, 255, 255) Button.Font = Enum.Font.GothamBold Button.TextSize = 14 Button.Parent = ScreenGui local Corner = Instance.new("UICorner") Corner.CornerRadius = UDim.new(0, 8) Corner.Parent = Button return Button end local function CreateTextBox(Name, Text, Position, Size, Color) local TextBox = Instance.new("TextBox") TextBox.Name = Name TextBox.Text = Text TextBox.Position = Position TextBox.Size = Size TextBox.BackgroundColor3 = Color TextBox.BackgroundTransparency = 0.2 TextBox.TextColor3 = Color3.fromRGB(255, 255, 255) TextBox.Font = Enum.Font.GothamBold TextBox.TextSize = 14 TextBox.ClearTextOnFocus = false TextBox.Parent = ScreenGui local Corner = Instance.new("UICorner") Corner.CornerRadius = UDim.new(0, 8) Corner.Parent = TextBox return TextBox end ToggleButton = CreateButton("ToggleButton", "DRONE: OFF", UDim2.new(0.78, 0, 0.08, 0), UDim2.new(0.18, 0, 0.08, 0), Color3.fromRGB(200, 50, 50)) UpButton = CreateButton("UpButton", "FLY UP", UDim2.new(0.78, 0, 0.17, 0), UDim2.new(0.18, 0, 0.08, 0), Color3.fromRGB(40, 40, 40)) DownButton = CreateButton("DownButton", "FLY DOWN", UDim2.new(0.78, 0, 0.26, 0), UDim2.new(0.18, 0, 0.08, 0), Color3.fromRGB(40, 40, 40)) SpeedBox = CreateTextBox("SpeedBox", tostring(DroneSpeed), UDim2.new(0.78, 0, 0.35, 0), UDim2.new(0.18, 0, 0.08, 0), Color3.fromRGB(40, 40, 40)) ZoomInButton = CreateButton("ZoomInButton", "ZOOM +", UDim2.new(0.78, 0, 0.44, 0), UDim2.new(0.085, 0, 0.08, 0), Color3.fromRGB(40, 40, 40)) ZoomOutButton = CreateButton("ZoomOutButton", "ZOOM -", UDim2.new(0.875, 0, 0.44, 0), UDim2.new(0.085, 0, 0.08, 0), Color3.fromRGB(40, 40, 40)) DisableZoomButton = CreateButton("DisableZoomButton", "RESET ZOOM", UDim2.new(0.78, 0, 0.53, 0), UDim2.new(0.18, 0, 0.08, 0), Color3.fromRGB(40, 40, 40)) NoclipButton = CreateButton("NoclipButton", "NOCLIP: OFF", UDim2.new(0.78, 0, 0.62, 0), UDim2.new(0.18, 0, 0.08, 0), Color3.fromRGB(40, 40, 40)) ToggleButton.MouseButton1Click:Connect(function() local Character = LocalPlayer.Character if not Character then return end local DroneController = Character:FindFirstChild("DroneControllerScript") if DroneController then local ActiveVal = DroneController:FindFirstChild("DroneActive") if ActiveVal then ActiveVal.Value = not ActiveVal.Value end end end) UpButton.MouseButton1Down:Connect(function() local Character = LocalPlayer.Character if Character and Character:FindFirstChild("DroneControllerScript") then local DirVal = Character.DroneControllerScript:FindFirstChild("UpDownDirection") if DirVal then DirVal.Value = 1 end end end) UpButton.MouseButton1Up:Connect(function() local Character = LocalPlayer.Character if Character and Character:FindFirstChild("DroneControllerScript") then local DirVal = Character.DroneControllerScript:FindFirstChild("UpDownDirection") if DirVal then DirVal.Value = 0 end end end) UpButton.MouseLeave:Connect(function() local Character = LocalPlayer.Character if Character and Character:FindFirstChild("DroneControllerScript") then local DirVal = Character.DroneControllerScript:FindFirstChild("UpDownDirection") if DirVal then DirVal.Value = 0 end end end) DownButton.MouseButton1Down:Connect(function() local Character = LocalPlayer.Character if Character and Character:FindFirstChild("DroneControllerScript") then local DirVal = Character.DroneControllerScript:FindFirstChild("UpDownDirection") if DirVal then DirVal.Value = -1 end end end) DownButton.MouseButton1Up:Connect(function() local Character = LocalPlayer.Character if Character and Character:FindFirstChild("DroneControllerScript") then local DirVal = Character.DroneControllerScript:FindFirstChild("UpDownDirection") if DirVal then DirVal.Value = 0 end end end) DownButton.MouseLeave:Connect(function() local Character = LocalPlayer.Character if Character and Character:FindFirstChild("DroneControllerScript") then local DirVal = Character.DroneControllerScript:FindFirstChild("UpDownDirection") if DirVal then DirVal.Value = 0 end end end) SpeedBox.FocusLost:Connect(function() local NewSpeed = tonumber(SpeedBox.Text) if NewSpeed then DroneSpeed = math.max(0, NewSpeed) SpeedBox.Text = tostring(DroneSpeed) local Character = LocalPlayer.Character if Character and Character:FindFirstChild("DroneControllerScript") then local SpeedVal = Character.DroneControllerScript:FindFirstChild("DroneSpeed") if SpeedVal then SpeedVal.Value = DroneSpeed end end else SpeedBox.Text = tostring(DroneSpeed) end end) ZoomInButton.MouseButton1Click:Connect(function() TargetFOV = math.max(20, TargetFOV - 10) end) ZoomOutButton.MouseButton1Click:Connect(function() TargetFOV = math.min(120, TargetFOV + 10) end) DisableZoomButton.MouseButton1Click:Connect(function() TargetFOV = DefaultFOV local Camera = workspace.CurrentCamera if Camera then Camera.FieldOfView = DefaultFOV end end) NoclipButton.MouseButton1Click:Connect(function() local Character = LocalPlayer.Character if not Character then return end local DroneController = Character:FindFirstChild("DroneControllerScript") if DroneController then local NoclipVal = DroneController:FindFirstChild("NoclipActive") if NoclipVal then NoclipVal.Value = not NoclipVal.Value end end end) end SetupGui() SendNotification() local function ApplyCharacterLogic(Character) local Humanoid = Character:WaitForChild("Humanoid") local RootPart = Character:WaitForChild("HumanoidRootPart") local ControllerFolder = Instance.new("Folder") ControllerFolder.Name = "DroneControllerScript" ControllerFolder.Parent = Character local ActiveVal = Instance.new("BoolValue") ActiveVal.Name = "DroneActive" ActiveVal.Value = false ActiveVal.Parent = ControllerFolder local DirVal = Instance.new("IntValue") DirVal.Name = "UpDownDirection" DirVal.Value = 0 DirVal.Parent = ControllerFolder local SpeedVal = Instance.new("NumberValue") SpeedVal.Name = "DroneSpeed" SpeedVal.Value = DroneSpeed SpeedVal.Parent = ControllerFolder local NoclipVal = Instance.new("BoolValue") NoclipVal.Name = "NoclipActive" NoclipVal.Value = false NoclipVal.Parent = ControllerFolder local BV = Instance.new("BodyVelocity") BV.Velocity = Vector3.new(0, 0, 0) BV.MaxForce = Vector3.new(math.huge, math.huge, math.huge) local BG = Instance.new("BodyGyro") BG.MaxTorque = Vector3.new(math.huge, math.huge, math.huge) BG.P = 9000 local AnimationTrack = nil local function LoadAnimation() if AnimationTrack then return end pcall(function() local Animator = Humanoid:FindFirstChildOfClass("Animator") if not Animator then Animator = Instance.new("Animator") Animator.Parent = Humanoid end local TargetAnimId = "rbxassetid://" .. EmoteID local Success, Objects = pcall(function() return game:GetObjects("rbxassetid://" .. EmoteID) end) if Success and Objects then for _, Obj in ipairs(Objects) do if Obj:IsA("Animation") then TargetAnimId = Obj.AnimationId break else for _, Desc in ipairs(Obj:GetDescendants()) do if Desc:IsA("Animation") then TargetAnimId = Desc.AnimationId break end end end end end local Anim = Instance.new("Animation") Anim.AnimationId = TargetAnimId AnimationTrack = Animator:LoadAnimation(Anim) AnimationTrack.Looped = true AnimationTrack.Priority = Enum.AnimationPriority.Action4 end) end local function StartDrone() Humanoid.PlatformStand = true BG.CFrame = RootPart.CFrame BV.Parent = RootPart BG.Parent = RootPart LoadAnimation() if AnimationTrack then pcall(function() AnimationTrack:Play() end) end end local function StopDrone() Humanoid.PlatformStand = false BV.Parent = nil BG.Parent = nil if AnimationTrack then pcall(function() AnimationTrack:Stop() end) end RootPart.Velocity = Vector3.new(0, 0, 0) RootPart.RotVelocity = Vector3.new(0, 0, 0) NoclipVal.Value = false end ActiveVal.Changed:Connect(function(State) if State then if ToggleButton then ToggleButton.Text = "DRONE: ON" ToggleButton.BackgroundColor3 = Color3.fromRGB(50, 200, 50) end StartDrone() else if ToggleButton then ToggleButton.Text = "DRONE: OFF" ToggleButton.BackgroundColor3 = Color3.fromRGB(200, 50, 50) end StopDrone() end end) NoclipVal.Changed:Connect(function(State) if State then if NoclipButton then NoclipButton.Text = "NOCLIP: ON" NoclipButton.BackgroundColor3 = Color3.fromRGB(50, 200, 50) end else if NoclipButton then NoclipButton.Text = "NOCLIP: OFF" NoclipButton.BackgroundColor3 = Color3.fromRGB(40, 40, 40) end for _, Part in ipairs(Character:GetDescendants()) do if Part:IsA("BasePart") then Part.CanCollide = true end end end end) Humanoid.Died:Connect(function() ActiveVal.Value = false NoclipVal.Value = false TargetFOV = DefaultFOV local Camera = workspace.CurrentCamera if Camera then Camera.FieldOfView = DefaultFOV end end) RunService.Stepped:Connect(function() if NoclipVal.Value then for _, Part in ipairs(Character:GetDescendants()) do if Part:IsA("BasePart") then Part.CanCollide = false end end end end) RunService.RenderStepped:Connect(function() local Camera = workspace.CurrentCamera if Camera then Camera.FieldOfView = Camera.FieldOfView + (TargetFOV - Camera.FieldOfView) * 0.15 end if ActiveVal.Value and RootPart and Humanoid and Camera then local CurrentSpeed = SpeedVal.Value local MoveDir = Humanoid.MoveDirection * CurrentSpeed local FlyDir = Vector3.new(0, DirVal.Value * CurrentSpeed, 0) BV.Velocity = MoveDir + FlyDir local Look = Camera.CFrame.LookVector BG.CFrame = CFrame.new(RootPart.Position, RootPart.Position + Vector3.new(Look.X, 0, Look.Z)) end end) end UserInputService.InputBegan:Connect(function(Input, GameProcessed) if GameProcessed then return end if UserInputService:GetFocusedTextBox() then return end if Input.KeyCode == Enum.KeyCode.H then SendNotification() return end local Character = LocalPlayer.Character if not Character or not Character:FindFirstChild("DroneControllerScript") then return end local ControllerFolder = Character.DroneControllerScript local DirVal = ControllerFolder:FindFirstChild("UpDownDirection") local ActiveVal = ControllerFolder:FindFirstChild("DroneActive") if Input.KeyCode == Enum.KeyCode.Space then if DirVal then DirVal.Value = 1 end elseif Input.KeyCode == Enum.KeyCode.LeftControl or Input.KeyCode == Enum.KeyCode.Q then if DirVal then DirVal.Value = -1 end elseif Input.KeyCode == Enum.KeyCode.E then if ActiveVal then ActiveVal.Value = not ActiveVal.Value end end end) UserInputService.InputEnded:Connect(function(Input, GameProcessed) if UserInputService:GetFocusedTextBox() then return end local Character = LocalPlayer.Character if not Character or not Character:FindFirstChild("DroneControllerScript") then return end local ControllerFolder = Character.DroneControllerScript local DirVal = ControllerFolder:FindFirstChild("UpDownDirection") if Input.KeyCode == Enum.KeyCode.Space or Input.KeyCode == Enum.KeyCode.LeftControl or Input.KeyCode == Enum.KeyCode.Q then if DirVal then DirVal.Value = 0 end end end) if LocalPlayer.Character then task.spawn(function() ApplyCharacterLogic(LocalPlayer.Character) end) end LocalPlayer.CharacterAdded:Connect(function(NewCharacter) TargetFOV = DefaultFOV local Camera = workspace.CurrentCamera if Camera then Camera.FieldOfView = DefaultFOV end task.spawn(function() ApplyCharacterLogic(NewCharacter) end) end)