
KeylessUniversal

--[=[
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;


This is trash