
KeylessUniversal

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local StarterGui = game:GetService("StarterGui")
local UserInputService = game:GetService("UserInputService")
local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
-- SETTINGS
local HELI_HEIGHT = 200
local RANGE_ZONE = 500
local FOLLOW_ZONE = 495
local SWEEP_ZONE = 1000
local PATROL_SPEED = 0.8
local FOLLOW_SPEED = 4.0
local SWEEP_SPEED = 10
local TURN_SPEED = 0.08
local U_TURN_CHANCE = 0.0015
local LIFETIME = 99999
local ESP_INTERVAL = 9
local ESP_DURATION = 7
local AMBIENT_GLOW = 0.6
local FIRE_RATE = 0.05 -- lower = faster fire (machine gun)
local TRACER_SPEED = 0.35 -- how long tracer lasts
local TRACER_WIDTH = 0.4
local AIM_INACCURACY = 5 -- degrees of random miss
local FIRE_DISTANCE_LIMIT = 900 -- max range to fire
local heliActive = false
local trackedPlayer = nil
local lockOn = false
local heliStartTime = 0
local lastESPToggle = 0
local currentESP = nil
local currentGlow = nil
local lastKnownPos = Vector3.new()
local patrolYaw = 0
local heliYaw = 0
local sweepTime = 0
local isPatrolOnSpawn = true
local isViewingHeli = false
local viewRotation = Vector2.new(0, 0)
local currentHeli = nil
local heli = Instance.new("Model")
heli.Name = "ClientHeli"
heli.Parent = workspace
local body = Instance.new("Part")
body.Name = "HeliBody"
body.Size = Vector3.new(12, 6, 24)
body.Position = Vector3.new(0, HELI_HEIGHT, 0)
body.Anchored = true
body.CanCollide = false
body.Color = Color3.fromRGB(60, 60, 60)
body.Material = Enum.Material.Metal
body.Parent = heli
heli.PrimaryPart = body
local detailParts = {}
local function createDetail(name, size, relativeCFrame, color, material, transparency, shape)
local part = Instance.new("Part")
part.Name = name
part.Size = size
part.Color = color
part.Material = material or Enum.Material.Metal
part.Transparency = transparency or 0
part.CanCollide = false
part.Anchored = true
part.Parent = heli
table.insert(detailParts, {part = part, offsetCFrame = relativeCFrame})
part.CFrame = body.CFrame * relativeCFrame
return part
end
createDetail("RotorHub", Vector3.new(4, 4, 4), CFrame.new(0, 8, 0), Color3.fromRGB(40, 40, 40), nil, nil, Enum.PartType.Ball)
createDetail("Cockpit", Vector3.new(10, 5, 8), CFrame.new(0, 2, -10), Color3.fromRGB(0, 170, 255), Enum.Material.ForceField, 0.3)
createDetail("TailFin", Vector3.new(3, 8, 6), CFrame.new(0, 4, 14) * CFrame.Angles(0, 0, math.rad(90)), Color3.fromRGB(50, 50, 50), nil, nil, Enum.PartType.Wedge)
local bladeThickness = 0.4
local bladeLength = 28
for i = 0, 3 do
local degrees = i * 90
local extraTilt = (i % 2 == 0) and 4 or -3
local relativeCFrame = CFrame.new(0, 8, 0)
* CFrame.Angles(0, math.rad(degrees), 0)
* CFrame.Angles(math.rad(extraTilt), 0, 0)
local blade = createDetail(
"Blade" .. i,
Vector3.new(bladeThickness, bladeThickness, bladeLength),
relativeCFrame,
Color3.fromRGB(210, 210, 230),
Enum.Material.Neon
)
blade.Transparency = 0.1
blade.Reflectance = 0.15
detailParts[#detailParts].spinOffset = degrees
end
for side = -1, 1, 2 do
createDetail("Skid"..(side>0 and "R" or "L"), Vector3.new(2, 1, 22),
CFrame.new(side * 6, -6, 0),
Color3.fromRGB(30, 30, 30))
end
print("Helicopter ready – main body + " .. #detailParts .. " detail parts that follow")
local surfaceLight = Instance.new("SpotLight")
surfaceLight.Parent = body
surfaceLight.Angle = 60
surfaceLight.Range = 300
surfaceLight.Brightness = 0
surfaceLight.Face = Enum.NormalId.Bottom
local attachHeli = Instance.new("Attachment")
attachHeli.Position = Vector3.new(0,-body.Size.Y/2-0.1,0)
attachHeli.Parent = body
local attachTarget = Instance.new("Attachment")
attachTarget.Parent = workspace
local spotlightBeam = Instance.new("Beam")
spotlightBeam.Attachment0 = attachHeli
spotlightBeam.Attachment1 = attachTarget
spotlightBeam.Color = ColorSequence.new(Color3.fromRGB(255,255,180))
spotlightBeam.LightEmission = 1
spotlightBeam.Width0 = 8
spotlightBeam.Width1 = 25
spotlightBeam.Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0,0.3), NumberSequenceKeypoint.new(1,0.85)
})
spotlightBeam.FaceCamera = true
spotlightBeam.Texture = "rbxassetid://9616406359"
spotlightBeam.TextureSpeed = 0
spotlightBeam.Enabled = false
spotlightBeam.Parent = body
local gui = Instance.new("ScreenGui")
gui.Name = "HeliGUI"
gui.ResetOnSpawn = false
gui.Parent = player:WaitForChild("PlayerGui")
local frame = Instance.new("Frame")
frame.Size = UDim2.new(0,260,0,320)
frame.Position = UDim2.new(0.5,-130,0.5,-160)
frame.BackgroundColor3 = Color3.fromRGB(30,30,30)
frame.Active = true
frame.Draggable = true
frame.Parent = gui
local title = Instance.new("TextLabel",frame)
title.Size = UDim2.new(1,0,0,30)
title.Text = "🚁 HELICOPTER CONTROL"
title.TextColor3 = Color3.new(1,1,1)
title.TextScaled = true
title.BackgroundTransparency = 1
title.Font = Enum.Font.GothamBold
local activateButton = Instance.new("TextButton",frame)
activateButton.Size = UDim2.new(0.45,0,0,40)
activateButton.Position = UDim2.new(0.05,0,0.1,0)
activateButton.Text = "Activate Heli"
activateButton.TextScaled = true
activateButton.BackgroundColor3 = Color3.fromRGB(0,170,0)
local viewButton = Instance.new("TextButton",frame)
viewButton.Size = UDim2.new(0.45,0,0,40)
viewButton.Position = UDim2.new(0.5,0,0.1,0)
viewButton.Text = "View Heli"
viewButton.TextScaled = true
viewButton.BackgroundColor3 = Color3.fromRGB(100,100,255)
local switchButton = Instance.new("TextButton",frame)
switchButton.Size = UDim2.new(0.9,0,0,40)
switchButton.Position = UDim2.new(0.05,0,0.25,0)
switchButton.Text = "Switch Target (Nearest)"
switchButton.TextScaled = true
switchButton.BackgroundColor3 = Color3.fromRGB(0,120,255)
local lockButton = Instance.new("TextButton",frame)
lockButton.Size = UDim2.new(0.9,0,0,35)
lockButton.Position = UDim2.new(0.05,0,0.38,0)
lockButton.Text = "Lock: OFF"
lockButton.TextScaled = true
lockButton.BackgroundColor3 = Color3.fromRGB(255,100,0)
local targetInput = Instance.new("TextBox",frame)
targetInput.Size = UDim2.new(0.9,0,0,35)
targetInput.Position = UDim2.new(0.05,0,0.52,0)
targetInput.PlaceholderText = "Enter username or display name..."
targetInput.TextScaled = true
targetInput.BackgroundColor3 = Color3.fromRGB(50,50,50)
targetInput.TextColor3 = Color3.new(1,1,1)
local setTargetButton = Instance.new("TextButton",frame)
setTargetButton.Size = UDim2.new(0.9,0,0,35)
setTargetButton.Position = UDim2.new(0.05,0,0.65,0)
setTargetButton.Text = "Set Target by Name"
setTargetButton.TextScaled = true
setTargetButton.BackgroundColor3 = Color3.fromRGB(0,200,100)
local mgButton = Instance.new("TextButton", frame)
mgButton.Size = UDim2.new(0.45,0,0,40)
mgButton.Position = UDim2.new(0.05,0,0.78,0)
mgButton.Text = "Machine Gun Mode"
mgButton.TextScaled = true
mgButton.BackgroundColor3 = Color3.fromRGB(255,180,0)
local disableButton = Instance.new("TextButton", frame)
disableButton.Size = UDim2.new(0.9,0,0,35)
disableButton.Position = UDim2.new(0.05,0,0.90,0)
disableButton.Text = "Weapons: OFF"
disableButton.TextScaled = true
disableButton.BackgroundColor3 = Color3.fromRGB(150,50,50)
local function notify(title,text)
StarterGui:SetCore("SendNotification",{Title=title,Text=text,Duration=3})
end
local function toggleESP(target,show)
if currentESP then currentESP:Destroy() currentESP=nil end
if show and target and target.Character then
currentESP=Instance.new("Highlight")
currentESP.FillColor=Color3.fromRGB(255,50,50)
currentESP.OutlineColor=Color3.new(1,1,1)
currentESP.FillTransparency=0.4
currentESP.OutlineTransparency=0
currentESP.Parent=target.Character
end
end
local function addGlow(targetChar)
if currentGlow then currentGlow:Destroy() currentGlow=nil end
if targetChar and targetChar:FindFirstChild("HumanoidRootPart") then
currentGlow=Instance.new("PointLight")
currentGlow.Color=Color3.fromRGB(255,255,240)
currentGlow.Brightness=AMBIENT_GLOW
currentGlow.Range=18
currentGlow.Shadows=false
currentGlow.Parent=targetChar.HumanoidRootPart
end
end
local function removeGlow()
if currentGlow then currentGlow:Destroy() currentGlow=nil end
end
local function getPlayerByName(name)
name = name:lower()
for _,p in Players:GetPlayers() do
if p.Name:lower():sub(1,#name)==name or (p.DisplayName and p.DisplayName:lower():sub(1,#name)==name) then
return p
end
end
return nil
end
local function getNearestPlayerToCaller()
local char=player.Character
if not char or not char:FindFirstChild("HumanoidRootPart") then return nil end
local pos=char.HumanoidRootPart.Position
local closest,minDist=nil,math.huge
for _,plr in Players:GetPlayers() do
if plr~=player and plr.Character and plr.Character:FindFirstChild("HumanoidRootPart") then
local mag=(plr.Character.HumanoidRootPart.Position-pos).Magnitude
if mag<minDist and mag<=RANGE_ZONE*1.5 then
minDist=mag
closest=plr
end
end
end
return closest
end
local function getFlatDistance(target)
if not target or not target.Character or not target.Character:FindFirstChild("HumanoidRootPart") then return math.huge end
local tPos=target.Character.HumanoidRootPart.Position
local hPos=body.Position
return Vector3.new(tPos.X-hPos.X,0,tPos.Z-hPos.Z).Magnitude
end
local lastShotTime = 0
local function fireTracer(targetPos)
local origin = body.Position
+ body.CFrame.LookVector * 10 -- forward of heli
+ Vector3.new(0, -3, 0) -- slightly under body
local direction = (targetPos - origin).Unit
-- Apply spread properly relative to heli orientation
local spreadCF = CFrame.lookAt(origin, origin + direction)
* CFrame.Angles(
math.rad(math.random(-AIM_INACCURACY, AIM_INACCURACY)),
math.rad(math.random(-AIM_INACCURACY, AIM_INACCURACY)),
0
)
direction = spreadCF.LookVector
-- Raycast to detect ground / player
local rayParams = RaycastParams.new()
rayParams.FilterDescendantsInstances = {heli}
rayParams.FilterType = Enum.RaycastFilterType.Blacklist
local result = workspace:Raycast(origin, direction * FIRE_DISTANCE_LIMIT, rayParams)
local hitPosition
if result then
hitPosition = result.Position
-- DAMAGE LOGIC (1 damage)
local hitModel = result.Instance:FindFirstAncestorOfClass("Model")
if hitModel then
local humanoid = hitModel:FindFirstChildOfClass("Humanoid")
if humanoid and humanoid.Health > 0 then
humanoid:TakeDamage(3)
end
end
else
hitPosition = origin + direction * FIRE_DISTANCE_LIMIT
end
local distance = (hitPosition - origin).Magnitude
-- Create tracer
local tracer = Instance.new("Part")
tracer.Anchored = true
tracer.CanCollide = false
tracer.Material = Enum.Material.Neon
tracer.Color = Color3.fromRGB(255, 230, 80)
tracer.Size = Vector3.new(TRACER_WIDTH, TRACER_WIDTH, distance)
tracer.CFrame = CFrame.new(origin, hitPosition) * CFrame.new(0, 0, -distance/2)
tracer.Parent = workspace
task.delay(TRACER_SPEED, function()
if tracer then tracer:Destroy() end
end)
-- 🔊 Machine gun firing sound
if trackedPlayer and trackedPlayer.Character and trackedPlayer.Character:FindFirstChild("HumanoidRootPart") then
local targetPart = trackedPlayer.Character.HumanoidRootPart
local gunSound = targetPart:FindFirstChild("GunSound")
if not gunSound then
gunSound = Instance.new("Sound")
gunSound.Name = "GunSound"
gunSound.SoundId = "rbxassetid://112920286914467" -- example automatic gun sound
gunSound.Volume = 1
gunSound.RollOffMaxDistance = 200
gunSound.Parent = targetPart
gunSound:LoadAsync()
end
gunSound:Play()
end
end
activateButton.MouseButton1Click:Connect(function()
heliActive = not heliActive
activateButton.Text = heliActive and "Deactivate Heli" or "Activate Heli"
activateButton.BackgroundColor3 = heliActive and Color3.fromRGB(170,0,0) or Color3.fromRGB(0,170,0)
if heliActive then
heliStartTime = tick()
local char = player.Character
if char and char:FindFirstChild("HumanoidRootPart") then
local spawnPos = char.HumanoidRootPart.Position + Vector3.new(0, HELI_HEIGHT + 20, 0)
body.Position = spawnPos
lastKnownPos = spawnPos
notify("Helicopter","Inbound above you")
else
notify("Helicopter","Spawn failed – no character")
heliActive = false
activateButton.Text = "Activate Heli"
activateButton.BackgroundColor3 = Color3.fromRGB(0,170,0)
return
end
isPatrolOnSpawn = true
trackedPlayer = getNearestPlayerToCaller()
if trackedPlayer then
lastKnownPos = trackedPlayer.Character.HumanoidRootPart.Position
notify("Helicopter","Target Spotted: "..trackedPlayer.Name)
addGlow(trackedPlayer.Character)
else
notify("Helicopter","No target found – patrolling")
end
else
if currentHeli then currentHeli:Destroy() currentHeli = nil end
surfaceLight.Brightness = 0
spotlightBeam.Enabled = false
toggleESP(trackedPlayer,false)
removeGlow()
trackedPlayer = nil
lockOn = false
lockButton.Text = "Lock: OFF"
lockButton.BackgroundColor3 = Color3.fromRGB(255,100,0)
notify("Helicopter","Deactivated")
if isViewingHeli then
isViewingHeli = false
viewButton.Text = "View Heli"
viewButton.BackgroundColor3 = Color3.fromRGB(100,100,255)
camera.CameraType = Enum.CameraType.Custom
end
end
end)
switchButton.MouseButton1Click:Connect(function()
if lockOn or not heliActive then
notify("Error","Cannot switch while locked!")
return
end
local nt = getNearestPlayerToCaller()
if nt then
removeGlow()
trackedPlayer = nt
lastKnownPos = nt.Character.HumanoidRootPart.Position
notify("Helicopter","Switching Target: "..nt.Name)
addGlow(nt.Character)
isPatrolOnSpawn = false
end
end)
lockButton.MouseButton1Click:Connect(function()
if not heliActive then return end
lockOn = not lockOn
lockButton.Text = lockOn and "Lock: ON" or "Lock: OFF"
lockButton.BackgroundColor3 = lockOn and Color3.fromRGB(0,255,0) or Color3.fromRGB(255,100,0)
notify("Lock", lockOn and "Locked – staying on target" or "Unlocked – auto-switching enabled")
end)
setTargetButton.MouseButton1Click:Connect(function()
if not heliActive then
notify("Error","Heli not active")
return
end
local input = targetInput.Text
if input == "" then
notify("Error","Enter a name")
return
end
local target = getPlayerByName(input)
if target then
removeGlow()
trackedPlayer = target
lastKnownPos = target.Character.HumanoidRootPart.Position
notify("Helicopter","Target set: "..target.Name)
addGlow(target.Character)
isPatrolOnSpawn = false
else
notify("Error","Player not found: "..input)
end
end)
local viewOffset = Vector3.new(0, 35, 70)
local viewRotation = Vector2.new(0, 0)
viewButton.MouseButton1Click:Connect(function()
if not heliActive or not body then
notify("Error","Heli not active")
return
end
isViewingHeli = not isViewingHeli
if isViewingHeli then
viewButton.Text = "Back to Me"
viewButton.BackgroundColor3 = Color3.fromRGB(255,150,50)
camera.CameraType = Enum.CameraType.Scriptable
notify("Camera", "Following Helicopter (drag to look)")
else
viewButton.Text = "View Heli"
viewButton.BackgroundColor3 = Color3.fromRGB(100,100,255)
camera.CameraType = Enum.CameraType.Custom
notify("Camera", "Back to you")
end
end)
UserInputService.InputChanged:Connect(function(input)
if not isViewingHeli then return end
if input.UserInputType == Enum.UserInputType.Touch then
local delta = input.Delta
viewRotation = viewRotation + Vector2.new(-delta.X * 0.3, -delta.Y * 0.3)
viewRotation = Vector2.new(viewRotation.X, math.clamp(viewRotation.Y, -80, 80))
end
end)
local heliMode = "none"
mgButton.MouseButton1Click:Connect(function()
heliMode = "machinegun"
notify("Helicopter","Mode: Machine Gun")
disableButton.Text = "Weapons: ON"
end)
disableButton.MouseButton1Click:Connect(function()
heliMode = "none"
notify("Helicopter","Weapons disabled")
disableButton.Text = "Weapons: OFF"
end)
RunService.RenderStepped:Connect(function()
if not heliActive then return end
for _, data in ipairs(detailParts) do
local baseCFrame = body.CFrame * data.offsetCFrame
if string.find(data.part.Name, "Blade") then
local spinOffset = data.spinOffset or 0
local totalRotation = (tick() * 720 + spinOffset) % 360
local spin = CFrame.Angles(0, math.rad(totalRotation), 0)
data.part.CFrame = baseCFrame * spin
else
data.part.CFrame = baseCFrame
end
end
if tick() - heliStartTime >= LIFETIME then
heliActive = false
if currentHeli then currentHeli:Destroy() currentHeli = nil end
activateButton.Text = "Activate Heli"
activateButton.BackgroundColor3 = Color3.fromRGB(0,170,0)
surfaceLight.Brightness = 0
spotlightBeam.Enabled = false
toggleESP(trackedPlayer, false)
removeGlow()
notify("Helicopter", "Expired")
if isViewingHeli then
isViewingHeli = false
viewButton.Text = "View Heli"
viewButton.BackgroundColor3 = Color3.fromRGB(100,100,255)
camera.CameraType = Enum.CameraType.Custom
end
return
end
local targetValid = trackedPlayer and trackedPlayer.Parent and trackedPlayer.Character and trackedPlayer.Character:FindFirstChild("HumanoidRootPart")
if trackedPlayer and not targetValid then
removeGlow()
if lockOn then
surfaceLight.Brightness = 0
spotlightBeam.Enabled = false
notify("Helicopter", "Target Eliminated / Left (locked) → Heli idle")
return
else
trackedPlayer = getNearestPlayerToCaller()
if trackedPlayer then
lastKnownPos = trackedPlayer.Character.HumanoidRootPart.Position
notify("Helicopter", "Target Eliminated / Left → New Target: " .. trackedPlayer.Name)
addGlow(trackedPlayer.Character)
else
surfaceLight.Brightness = 0
spotlightBeam.Enabled = false
notify("Helicopter", "No targets nearby")
return
end
end
end
if not targetValid then
surfaceLight.Brightness = 0
spotlightBeam.Enabled = false
toggleESP(trackedPlayer, false)
removeGlow()
return
end
local root = trackedPlayer.Character.HumanoidRootPart
local targetPos = root.Position
lastKnownPos = targetPos
local flatDist = getFlatDistance(trackedPlayer)
local targetHeliPos, moveSpeed, isSweeping = Vector3.new(), 0, false
if isPatrolOnSpawn or flatDist <= RANGE_ZONE then
patrolYaw = patrolYaw + TURN_SPEED * 0.4
local offset = Vector3.new(math.cos(patrolYaw)*35, HELI_HEIGHT, math.sin(patrolYaw)*35)
targetHeliPos = targetPos + offset
moveSpeed = PATROL_SPEED
if math.random() < U_TURN_CHANCE then
patrolYaw = patrolYaw + math.pi * 1.5
end
if flatDist <= RANGE_ZONE then isPatrolOnSpawn = false end
elseif flatDist <= FOLLOW_ZONE then
targetHeliPos = Vector3.new(targetPos.X, targetPos.Y + HELI_HEIGHT, targetPos.Z)
moveSpeed = FOLLOW_SPEED
else
isSweeping = true
sweepTime = tick()
local offset = Vector3.new(math.sin(sweepTime*1.5)*70, HELI_HEIGHT, math.cos(sweepTime*1.5)*70)
targetHeliPos = lastKnownPos + offset
moveSpeed = SWEEP_SPEED
end
body.Position = body.Position:Lerp(targetHeliPos, moveSpeed * 0.018)
local look = Vector3.new((targetPos - body.Position).X, 0, (targetPos - body.Position).Z).Unit
local targetYaw = math.atan2(look.X, look.Z)
heliYaw = heliYaw + (targetYaw - heliYaw) * TURN_SPEED
body.CFrame = CFrame.new(body.Position) * CFrame.Angles(0, heliYaw, 0) * CFrame.Angles(math.rad(-8), 0, 0)
surfaceLight.Brightness = 8
spotlightBeam.Enabled = true
surfaceLight.Brightness = 8
local beamTarget
if isSweeping then
local angle = sweepTime * 4
beamTarget = lastKnownPos + Vector3.new(math.cos(angle)*90, -20, math.sin(angle)*90)
else
beamTarget = Vector3.new(targetPos.X, targetPos.Y - 3, targetPos.Z)
end
attachTarget.WorldPosition = beamTarget
spotlightBeam.Enabled = true
local bDist = (targetPos - body.Position).Magnitude
spotlightBeam.Width1 = math.clamp(15 + bDist * 0.12, 15, 50)
if isViewingHeli then
local baseOffset = Vector3.new(0, 35, 70)
local yawRad = math.rad(viewRotation.X)
local pitchRad = math.rad(viewRotation.Y)
local rotatedX = math.cos(yawRad) * baseOffset.Z
local rotatedZ = math.sin(yawRad) * baseOffset.Z
local finalOffset = Vector3.new(rotatedX, baseOffset.Y + math.sin(pitchRad) * 30, rotatedZ * math.cos(pitchRad))
local targetCFrame = CFrame.new(body.Position + finalOffset, body.Position)
camera.CFrame = camera.CFrame:Lerp(targetCFrame, 0.12)
end
local now = tick()
-- MACHINE GUN FIRE
if trackedPlayer and flatDist <= FIRE_DISTANCE_LIMIT then
if heliMode == "machinegun" and heliActive and trackedPlayer and flatDist <= FIRE_DISTANCE_LIMIT then
if now - lastShotTime >= FIRE_RATE then
lastShotTime = now
local aimPos = trackedPlayer.Character.HumanoidRootPart.Position
if math.random() < 0.2 then
aimPos = aimPos + Vector3.new(math.random(-20,20), math.random(-5,5), math.random(-20,20))
end
fireTracer(aimPos)
end
end
end
if now - lastESPToggle >= ESP_INTERVAL then
lastESPToggle = now
toggleESP(trackedPlayer, true)
task.delay(ESP_DURATION, function()
toggleESP(trackedPlayer, false)
end)
end
end)No comments yet for this script.



