Keyless FE FPV Drone script
Key RequiredUniversal

Keyless FE FPV Drone script

Universal Script1ur21ur2 6K views 37.8K executesUpdated Sep 9, 2026
Unrated
00
Lua Script•415 lines (16210 chars)
--[=[
 d888b  db    db d888888b      .d888b.      db      db    db  .d8b.  
88' Y8b 88    88   `88'        VP  `8D      88      88    88 d8' `8b 
88      88    88    88            odD'      88      88    88 88ooo88 
88  ooo 88    88    88          .88'        88      88    88 88~~~88 
88. ~8~ 88b  d88   .88.        j88.         88booo. 88b  d88 88   88    @uniquadev
 Y888P  ~Y8888P' Y888888P      888888D      Y88888P ~Y8888P' YP   YP  CONVERTER 

designed using localmaze gui creator
]=]

-- Instances: 13 | Scripts: 2 | Modules: 0 | Tags: 0
local LMG2L = {};

-- Players.o_q0l1.PlayerGui.ScreenGui
LMG2L["ScreenGui_1"] = Instance.new("ScreenGui", game:GetService("Players").LocalPlayer:WaitForChild("PlayerGui"));
LMG2L["ScreenGui_1"]["ZIndexBehavior"] = Enum.ZIndexBehavior.Sibling;


-- Players.o_q0l1.PlayerGui.ScreenGui.Frame
LMG2L["Frame_2"] = Instance.new("Frame", LMG2L["ScreenGui_1"]);
LMG2L["Frame_2"]["BorderSizePixel"] = 0;
LMG2L["Frame_2"]["BackgroundColor3"] = Color3.fromRGB(92, 92, 92);
LMG2L["Frame_2"]["Size"] = UDim2.new(0.54255, 0, 0.39735, 0);
LMG2L["Frame_2"]["Position"] = UDim2.new(0, 190, 0, 14);
LMG2L["Frame_2"]["BackgroundTransparency"] = 0.7;


-- Players.o_q0l1.PlayerGui.ScreenGui.Frame.Frame2
LMG2L["Frame2_3"] = Instance.new("Frame", LMG2L["Frame_2"]);
LMG2L["Frame2_3"]["BorderSizePixel"] = 0;
LMG2L["Frame2_3"]["BackgroundColor3"] = Color3.fromRGB(43, 43, 43);
LMG2L["Frame2_3"]["Size"] = UDim2.new(0.96078, 0, 0.31667, 0);
LMG2L["Frame2_3"]["Position"] = UDim2.new(0, 8, 0, 76);
LMG2L["Frame2_3"]["Name"] = [[Frame2]];
LMG2L["Frame2_3"]["BackgroundTransparency"] = 0.8;


-- Players.o_q0l1.PlayerGui.ScreenGui.Frame.Frame2.TextLabel
LMG2L["TextLabel_4"] = Instance.new("TextLabel", LMG2L["Frame2_3"]);
LMG2L["TextLabel_4"]["TextStrokeTransparency"] = 0.8;
LMG2L["TextLabel_4"]["BorderSizePixel"] = 0;
LMG2L["TextLabel_4"]["TextSize"] = 18;
LMG2L["TextLabel_4"]["BackgroundColor3"] = Color3.fromRGB(255, 255, 255);
LMG2L["TextLabel_4"]["FontFace"] = Font.new([[rbxasset://fonts/families/Zekton.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal);
LMG2L["TextLabel_4"]["BackgroundTransparency"] = 1;
LMG2L["TextLabel_4"]["Size"] = UDim2.new(0.60714, 0, 0.57895, 0);
LMG2L["TextLabel_4"]["Text"] = [[Turns on Holy War]];
LMG2L["TextLabel_4"]["Position"] = UDim2.new(0, 146, 0, 6);


-- Players.o_q0l1.PlayerGui.ScreenGui.Frame.Frame2.TextButton
LMG2L["TextButton_5"] = Instance.new("TextButton", LMG2L["Frame2_3"]);
LMG2L["TextButton_5"]["TextStrokeTransparency"] = 0.8;
LMG2L["TextButton_5"]["BorderSizePixel"] = 0;
LMG2L["TextButton_5"]["TextSize"] = 18;
LMG2L["TextButton_5"]["BackgroundColor3"] = Color3.fromRGB(0, 0, 0);
LMG2L["TextButton_5"]["FontFace"] = Font.new([[rbxasset://fonts/families/Zekton.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal);
LMG2L["TextButton_5"]["BackgroundTransparency"] = 0.8;
LMG2L["TextButton_5"]["Size"] = UDim2.new(0.34694, 0, 0.73684, 0);
LMG2L["TextButton_5"]["Text"] = [[Turn on Holy war]];
LMG2L["TextButton_5"]["Position"] = UDim2.new(0, 4, 0, 4);


-- Players.o_q0l1.PlayerGui.ScreenGui.Frame.Frame2.TextButton.LocalScript
LMG2L["LocalScript_6"] = Instance.new("LocalScript", LMG2L["TextButton_5"]);



-- Players.o_q0l1.PlayerGui.ScreenGui.Frame.UIDragDetector
LMG2L["UIDragDetector_7"] = Instance.new("UIDragDetector", LMG2L["Frame_2"]);



-- Players.o_q0l1.PlayerGui.ScreenGui.Frame.Frame
LMG2L["Frame_8"] = Instance.new("Frame", LMG2L["Frame_2"]);
LMG2L["Frame_8"]["BorderSizePixel"] = 0;
LMG2L["Frame_8"]["BackgroundColor3"] = Color3.fromRGB(66, 66, 66);
LMG2L["Frame_8"]["Size"] = UDim2.new(1, 0, 0.21667, 0);
LMG2L["Frame_8"]["BackgroundTransparency"] = 0.8;


-- Players.o_q0l1.PlayerGui.ScreenGui.Frame.Frame.TextLabel
LMG2L["TextLabel_9"] = Instance.new("TextLabel", LMG2L["Frame_8"]);
LMG2L["TextLabel_9"]["TextStrokeTransparency"] = 0.8;
LMG2L["TextLabel_9"]["BorderSizePixel"] = 0;
LMG2L["TextLabel_9"]["TextSize"] = 18;
LMG2L["TextLabel_9"]["BackgroundColor3"] = Color3.fromRGB(255, 255, 255);
LMG2L["TextLabel_9"]["FontFace"] = Font.new([[rbxasset://fonts/families/Zekton.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal);
LMG2L["TextLabel_9"]["BackgroundTransparency"] = 1;
LMG2L["TextLabel_9"]["Size"] = UDim2.new(0.41176, 0, 0.92308, 0);
LMG2L["TextLabel_9"]["Text"] = [[Watchlist's FPV Drone GUI]];
LMG2L["TextLabel_9"]["Position"] = UDim2.new(0, 18, 0, 0);


-- Players.o_q0l1.PlayerGui.ScreenGui.Frame.Frame.Frame
LMG2L["Frame_a"] = Instance.new("Frame", LMG2L["Frame_8"]);
LMG2L["Frame_a"]["BorderSizePixel"] = 0;
LMG2L["Frame_a"]["BackgroundColor3"] = Color3.fromRGB(43, 43, 43);
LMG2L["Frame_a"]["Size"] = UDim2.new(0.96078, 0, 1.38462, 0);
LMG2L["Frame_a"]["Position"] = UDim2.new(0, 8, 0, 32);
LMG2L["Frame_a"]["BackgroundTransparency"] = 0.8;


-- Players.o_q0l1.PlayerGui.ScreenGui.Frame.Frame.Frame.TextLabel
LMG2L["TextLabel_b"] = Instance.new("TextLabel", LMG2L["Frame_a"]);
LMG2L["TextLabel_b"]["TextStrokeTransparency"] = 0.8;
LMG2L["TextLabel_b"]["BorderSizePixel"] = 0;
LMG2L["TextLabel_b"]["TextSize"] = 18;
LMG2L["TextLabel_b"]["BackgroundColor3"] = Color3.fromRGB(255, 255, 255);
LMG2L["TextLabel_b"]["FontFace"] = Font.new([[rbxasset://fonts/families/Zekton.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal);
LMG2L["TextLabel_b"]["BackgroundTransparency"] = 1;
LMG2L["TextLabel_b"]["Size"] = UDim2.new(0.60714, 0, 0.61111, 0);
LMG2L["TextLabel_b"]["Text"] = [[Launches the drone]];
LMG2L["TextLabel_b"]["Position"] = UDim2.new(0, 146, 0, 6);


-- Players.o_q0l1.PlayerGui.ScreenGui.Frame.Frame.Frame.TextButton
LMG2L["TextButton_c"] = Instance.new("TextButton", LMG2L["Frame_a"]);
LMG2L["TextButton_c"]["TextStrokeTransparency"] = 0.8;
LMG2L["TextButton_c"]["BorderSizePixel"] = 0;
LMG2L["TextButton_c"]["TextSize"] = 18;
LMG2L["TextButton_c"]["BackgroundColor3"] = Color3.fromRGB(0, 0, 0);
LMG2L["TextButton_c"]["FontFace"] = Font.new([[rbxasset://fonts/families/Zekton.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal);
LMG2L["TextButton_c"]["BackgroundTransparency"] = 0.8;
LMG2L["TextButton_c"]["Size"] = UDim2.new(0.34694, 0, 0.77778, 0);
LMG2L["TextButton_c"]["Text"] = [[Arm Drone]];
LMG2L["TextButton_c"]["Position"] = UDim2.new(0, 4, 0, 4);


-- Players.o_q0l1.PlayerGui.ScreenGui.Frame.Frame.Frame.TextButton.LocalScript
LMG2L["LocalScript_d"] = Instance.new("LocalScript", LMG2L["TextButton_c"]);



-- Players.o_q0l1.PlayerGui.ScreenGui.Frame.Frame2.TextButton.LocalScript
local function C_6()
	local script = LMG2L["LocalScript_6"];
	-- LocalScript inside the "Turn on tuff music" TextButton	
	
	local button = script.Parent	
	local sound = Instance.new("Sound")	
	sound.Name = "LarpMusic"	
	sound.SoundId = "rbxassetid://75485931767123"
	sound.Volume = 1	
	sound.Looped = true	
	sound.Parent = game:GetService("SoundService")
	
	local isOn = false	
	
	button.MouseButton1Click:Connect(function()	
		isOn = not isOn	
			
		if isOn then	
			button.Text = "Turn off Holy War"	
			sound:Play()	
		else	
			button.Text = "Turn on Holy War"	
			sound:Stop()	
		end	
	end)	
end;
task.spawn(C_6);

-- Players.o_q0l1.PlayerGui.ScreenGui.Frame.Frame.Frame.TextButton.LocalScript
local function C_d()
	local script = LMG2L["LocalScript_d"];
	-- LocalScript inside the "Arm Drone" TextButton	
	
	local Players = game:GetService("Players")	
	local RunService = game:GetService("RunService")	
	local UserInputService = game:GetService("UserInputService")	
	
	local player = Players.LocalPlayer	
	local character = player.Character or player.CharacterAdded:Wait()	
	local humanoid = character:WaitForChild("Humanoid")	
	local rootPart = character:WaitForChild("HumanoidRootPart")	
	local camera = workspace.CurrentCamera	
	local playerGui = player:WaitForChild("PlayerGui")	
	
	local button = script.Parent	
	local isArmed = false	
	
	-- ====== CONFIG ======	
	local DRONE_SPEED = 80	
	local THROTTLE_POWER = 125	
	local BASE_LIFT = 38	
	local TURN_RATE = 1.9	
	local MOUSE_SENS = 0.0028	
	local DRAG = 0.97	
	local GRAVITY = Vector3.new(0, -28, 0)	
	local ANGULAR_DAMP = 0.85	
	
	-- ====== CREATE DRONE ======	
	local drone = Instance.new("Part")	
	drone.Name = "FPVDrone"	
	drone.Size = Vector3.new(1.4, 0.4, 1.4)	
	drone.Anchored = true	
	drone.CanCollide = true	
	drone.Material = Enum.Material.Metal	
	drone.Color = Color3.fromRGB(30, 30, 30)	
	drone.Parent = workspace	
	
	local fanSound = Instance.new("Sound")	
	fanSound.Name = "DroneFans"	
	fanSound.SoundId = "rbxassetid://114037851906101"   -- Fixed ID
	fanSound.Volume = 0.7	
	fanSound.Looped = true	
	fanSound.Parent = drone	
	
	-- ====== STATE ======	
	local velocity = Vector3.zero	
	local angularVel = Vector3.zero	
	local throttle = 0	
	local pitchInput, rollInput, yawInput = 0, 0, 0	
	local strafeInput = 0	
	local forwardInput = 0	
	local connection	
	local mobileGui	
	local originalCameraType	
	local originalCameraSubject	
	
	-- Raycast params for collision
	local rayParams = RaycastParams.new()
	rayParams.FilterType = Enum.RaycastFilterType.Exclude
	rayParams.FilterDescendantsInstances = {drone, character}
	
	-- ====== MOBILE CONTROLS ======	
	local function createMobileControls()	
		if mobileGui then mobileGui:Destroy() end	
	
		mobileGui = Instance.new("ScreenGui")	
		mobileGui.Name = "DroneMobileControls"	
		mobileGui.ResetOnSpawn = false	
		mobileGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling	
		mobileGui.Parent = playerGui	
	
		local function makeButton(text, position, size)	
			local btn = Instance.new("TextButton")	
			btn.Size = size	
			btn.Position = position	
			btn.BackgroundColor3 = Color3.new(0, 0, 0)
			btn.BackgroundTransparency = 0.8
			btn.Text = text	
			btn.TextColor3 = Color3.new(1, 1, 1)	
			btn.TextTransparency = 0	
			btn.TextStrokeTransparency = 0.8
			btn.TextStrokeColor3 = Color3.new(0, 0, 0)	
			btn.Font = Enum.Font.GothamBold	
			btn.TextSize = 34	
			btn.BorderSizePixel = 0	
			btn.AutoButtonColor = false	
			btn.Parent = mobileGui	
			return btn	
		end	
	
		-- ABOVE D-PAD (camera forward / backward) - properly spaced
		local camBack    = makeButton("↓", UDim2.new(0.08, 0, 0.20, 0), UDim2.new(0.13, 0, 0.08, 0))
		local camForward = makeButton("↑", UDim2.new(0.08, 0, 0.30, 0), UDim2.new(0.13, 0, 0.08, 0))

		-- D-PAD
		local dpadUp    = makeButton("↑", UDim2.new(0.08, 0, 0.44, 0), UDim2.new(0.13, 0, 0.08, 0))
		local dpadLeft  = makeButton("←", UDim2.new(0.02, 0, 0.54, 0), UDim2.new(0.13, 0, 0.08, 0))
		local dpadRight = makeButton("→", UDim2.new(0.14, 0, 0.54, 0), UDim2.new(0.13, 0, 0.08, 0))
		local dpadDown  = makeButton("↓", UDim2.new(0.08, 0, 0.64, 0), UDim2.new(0.13, 0, 0.08, 0))

		-- UNDER D-PAD (crab)
		local crabLeft  = makeButton("←", UDim2.new(0.02, 0, 0.78, 0), UDim2.new(0.13, 0, 0.08, 0))
		local crabRight = makeButton("→", UDim2.new(0.14, 0, 0.78, 0), UDim2.new(0.13, 0, 0.08, 0))

		-- Right side - Throttle
		local thrustUp   = makeButton("↑", UDim2.new(0.80, 0, 0.55, 0), UDim2.new(0.15, 0, 0.11, 0))
		local thrustDown = makeButton("↓", UDim2.new(0.80, 0, 0.68, 0), UDim2.new(0.15, 0, 0.11, 0))
	
		local function bind(btn, press, release)	
			btn.MouseButton1Down:Connect(press)	
			btn.MouseButton1Up:Connect(release)	
			btn.MouseLeave:Connect(release)	
		end	
	
		-- D-pad
		bind(dpadUp,    function() pitchInput = 1 end,  function() pitchInput = 0 end)	
		bind(dpadDown,  function() pitchInput = -1 end, function() pitchInput = 0 end)	
		bind(dpadLeft,  function() yawInput = 1 end,    function() yawInput = 0 end)	
		bind(dpadRight, function() yawInput = -1 end,   function() yawInput = 0 end)	
	
		-- Forward / Backward
		bind(camForward, function() forwardInput = 1 end,  function() forwardInput = 0 end)	
		bind(camBack,    function() forwardInput = -1 end, function() forwardInput = 0 end)	
	
		-- Crab
		bind(crabLeft,  function() strafeInput = -1 end, function() strafeInput = 0 end)	
		bind(crabRight, function() strafeInput = 1 end,  function() strafeInput = 0 end)	
	
		-- Throttle
		bind(thrustUp,   function() throttle = 1 end,   function() throttle = 0 end)	
		bind(thrustDown, function() throttle = -0.4 end, function() throttle = 0 end)	
	end	
	
	-- ====== ARM ======	
	local function armDrone()	
		if isArmed then return end	
		isArmed = true	
	
		humanoid.WalkSpeed = 0	
		humanoid.JumpPower = 0	
		humanoid.PlatformStand = true	
		rootPart.Anchored = true	
	
		drone.CFrame = rootPart.CFrame * CFrame.new(0, 7, 0)	
	
		originalCameraType = camera.CameraType	
		originalCameraSubject = camera.CameraSubject	
		camera.CameraType = Enum.CameraType.Scriptable	
	
		fanSound:Play()	
	
		if UserInputService.TouchEnabled then	
			createMobileControls()	
		end	
	
		-- Desktop keyboard	
		local function onInput(input, processed)	
			if processed then return end	
			if input.UserInputType == Enum.UserInputType.Keyboard then	
				if input.KeyCode == Enum.KeyCode.W then pitchInput = 1 end	
				if input.KeyCode == Enum.KeyCode.S then pitchInput = -1 end	
				if input.KeyCode == Enum.KeyCode.A then rollInput = -1 end	
				if input.KeyCode == Enum.KeyCode.D then rollInput = 1 end	
				if input.KeyCode == Enum.KeyCode.Q then yawInput = 1 end	
				if input.KeyCode == Enum.KeyCode.E then yawInput = -1 end	
				if input.KeyCode == Enum.KeyCode.Space then throttle = 1 end	
				if input.KeyCode == Enum.KeyCode.LeftShift then throttle = -0.4 end	
	
				if input.KeyCode == Enum.KeyCode.R then forwardInput = 1 end	
				if input.KeyCode == Enum.KeyCode.F then forwardInput = -1 end	
				if input.KeyCode == Enum.KeyCode.Z then strafeInput = -1 end	
				if input.KeyCode == Enum.KeyCode.C then strafeInput = 1 end	
			end	
		end	
	
		local function onInputEnded(input)	
			if input.UserInputType == Enum.UserInputType.Keyboard then	
				if input.KeyCode == Enum.KeyCode.W or input.KeyCode == Enum.KeyCode.S then pitchInput = 0 end	
				if input.KeyCode == Enum.KeyCode.A or input.KeyCode == Enum.KeyCode.D then rollInput = 0 end	
				if input.KeyCode == Enum.KeyCode.Q or input.KeyCode == Enum.KeyCode.E then yawInput = 0 end	
				if input.KeyCode == Enum.KeyCode.Space or input.KeyCode == Enum.KeyCode.LeftShift then throttle = 0 end	
	
				if input.KeyCode == Enum.KeyCode.R or input.KeyCode == Enum.KeyCode.F then forwardInput = 0 end	
				if input.KeyCode == Enum.KeyCode.Z or input.KeyCode == Enum.KeyCode.C then strafeInput = 0 end	
			end	
		end	
	
		UserInputService.InputBegan:Connect(onInput)	
		UserInputService.InputEnded:Connect(onInputEnded)	
	
		-- Flight loop	
		connection = RunService.RenderStepped:Connect(function(dt)	
			if not isArmed then return end	
	
			if not UserInputService.TouchEnabled then	
				local mouseDelta = UserInputService:GetMouseDelta()	
				angularVel = angularVel + Vector3.new(	
					-mouseDelta.Y * MOUSE_SENS,	
					-mouseDelta.X * MOUSE_SENS,	
					mouseDelta.X * MOUSE_SENS * 0.15	
				)	
			end	
	
			angularVel = angularVel + Vector3.new(	
				pitchInput * TURN_RATE * dt,	
				yawInput * TURN_RATE * dt,	
				rollInput * TURN_RATE * dt	
			)	
			angularVel = angularVel * ANGULAR_DAMP	
	
			local rot = CFrame.Angles(angularVel.X, angularVel.Y, angularVel.Z)	
			drone.CFrame = drone.CFrame * rot	
	
			local totalLift = BASE_LIFT + (throttle * THROTTLE_POWER)	
			local upForce = drone.CFrame.UpVector * totalLift	
	
			local forwardForce = drone.CFrame.LookVector * (forwardInput * 45)	
			local strafeForce  = drone.CFrame.RightVector * (strafeInput * 45)	
	
			velocity = (velocity + upForce * dt + GRAVITY * dt + forwardForce * dt + strafeForce * dt) * DRAG	
	
			if velocity.Magnitude > DRONE_SPEED then	
				velocity = velocity.Unit * DRONE_SPEED	
			end	
	
			-- ===== COLLISION (bouncier) =====
			local move = velocity * dt
			local result = workspace:Raycast(drone.Position, move, rayParams)

			if result then
				local normal = result.Normal
				velocity = velocity - 2 * velocity:Dot(normal) * normal * 0.85
				move = velocity * dt
			end

			drone.CFrame = drone.CFrame + move
			camera.CFrame = drone.CFrame * CFrame.new(0, 0.15, 0.1)	
	
			local speedFactor = math.clamp(velocity.Magnitude / 40, 0.55, 1.4)	
			fanSound.PlaybackSpeed = speedFactor	
			fanSound.Volume = 0.5 + (speedFactor * 0.4)	
		end)	
	end	
	
	button.MouseButton1Click:Connect(armDrone)	
end;
task.spawn(C_d);

return LMG2L["ScreenGui_1"], require;

Features & Information

Tags: Drone, FPV, FE, R6, KEYLESS, OP, BROOKHAVEN, RIVALS, BLOXFRUIT, FTAP, BABFT, BUILD A BOAT FOR TREASURE.
#Drone#FE#Keyless#OP#RIVALS

Community Comments (1)

GvghkGvghkOct 10, 2026

This is trash

More Scripts for Universal Scripts