FE R15 Drone
Key RequiredUniversal

FE R15 Drone

Universal ScriptSemihSemih 385 views 4.3K executesUpdated Jul 20, 2026
Unrated
00
Lua Script•450 lines (16104 chars)
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)

Features & Information

Supports Both PC and Mobile and Open Source uhh yeah drone helicopter helicopter something like that
#Universal#FE#Drone#Animation

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts