
KeylessUniversal

local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local player = Players.LocalPlayer
local flashlight
-- 💾 SETTINGS
local settings = {
color = Color3.fromRGB(255,255,255),
range = 150,
angle = 50,
brightness = 2,
enabled = false,
keybind = Enum.KeyCode.F
}
local waitingForKey = false
-- CLEAN UI
if getgenv().FlashlightUI then
getgenv().FlashlightUI:Destroy()
end
---------------------------------------------------
-- CHARACTER FLASHLIGHT
---------------------------------------------------
local function setupCharacter(character)
local head = character:WaitForChild("Head")
for _, v in ipairs(head:GetChildren()) do
if v:IsA("SpotLight") then
v:Destroy()
end
end
flashlight = Instance.new("SpotLight")
flashlight.Parent = head
flashlight.Color = settings.color
flashlight.Range = settings.range
flashlight.Angle = settings.angle
flashlight.Brightness = settings.brightness
flashlight.Enabled = settings.enabled
end
if player.Character then
setupCharacter(player.Character)
end
player.CharacterAdded:Connect(setupCharacter)
---------------------------------------------------
-- GLOBAL COLOR APPLY (FIXED)
---------------------------------------------------
local function applyGlobalColor(newColor)
settings.color = newColor
-- current flashlight
if flashlight then
flashlight.Color = newColor
end
-- future respawns
player.CharacterAdded:Connect(function(char)
task.wait(0.1)
local head = char:WaitForChild("Head")
local light = head:FindFirstChildOfClass("SpotLight")
if light then
light.Color = settings.color
end
end)
-- stage + highlights
for _, data in pairs(stageCache or {}) do
if data.light then
data.light.Color = newColor
end
if data.highlight then
data.highlight.FillColor = newColor
end
end
end
---------------------------------------------------
-- GUI
---------------------------------------------------
local gui = Instance.new("ScreenGui")
gui.Name = "FlashlightGUI"
gui.ResetOnSpawn = false
gui.Parent = player:WaitForChild("PlayerGui")
getgenv().FlashlightUI = gui
local settingsButton = Instance.new("TextButton")
settingsButton.Size = UDim2.new(0,120,0,40)
settingsButton.Position = UDim2.new(0,20,0.2,0)
settingsButton.Text = "Settings"
settingsButton.Parent = gui
local container = Instance.new("Frame")
container.Size = UDim2.new(0,240,0,600)
container.Position = UDim2.new(0,20,0.3,0)
container.BackgroundColor3 = Color3.fromRGB(30,30,30)
container.Visible = false
container.Parent = gui
local openPos = UDim2.new(0,20,0.3,0)
local closedPos = UDim2.new(-0.6,0,0.3,0)
local function openMenu()
container.Visible = true
container.Position = closedPos
TweenService:Create(container, TweenInfo.new(0.25), {Position = openPos}):Play()
end
local function closeMenu()
local t = TweenService:Create(container, TweenInfo.new(0.25), {Position = closedPos})
t:Play()
t.Completed:Connect(function()
container.Visible = false
end)
end
local menuOpen = false
settingsButton.MouseButton1Click:Connect(function()
menuOpen = not menuOpen
if menuOpen then openMenu() else closeMenu() end
end)
---------------------------------------------------
-- DRAG SYSTEM
---------------------------------------------------
local function makeDrag(frame)
local dragging = false
local start, pos
frame.InputBegan:Connect(function(i)
if i.UserInputType == Enum.UserInputType.MouseButton1
or i.UserInputType == Enum.UserInputType.Touch then
dragging = true
start = i.Position
pos = frame.Position
i.Changed:Connect(function()
if i.UserInputState == Enum.UserInputState.End then
dragging = false
end
end)
end
end)
UserInputService.InputEnded:Connect(function(i)
if i.UserInputType == Enum.UserInputType.MouseButton1
or i.UserInputType == Enum.UserInputType.Touch then
dragging = false
end
end)
UserInputService.InputChanged:Connect(function(i)
if dragging and i.UserInputType == Enum.UserInputType.MouseMovement then
local d = i.Position - start
frame.Position = UDim2.new(
pos.X.Scale, pos.X.Offset + d.X,
pos.Y.Scale, pos.Y.Offset + d.Y
)
end
end)
end
makeDrag(settingsButton)
makeDrag(container)
---------------------------------------------------
-- UI HELPERS
---------------------------------------------------
local function box(t,y)
local b = Instance.new("TextBox")
b.Size = UDim2.new(1,-10,0,30)
b.Position = UDim2.new(0,5,0,y)
b.PlaceholderText = t
b.ClearTextOnFocus = false
b.Parent = container
return b
end
local function btn(t,y)
local b = Instance.new("TextButton")
b.Size = UDim2.new(1,-10,0,35)
b.Position = UDim2.new(0,5,0,y)
b.Text = t
b.Parent = container
return b
end
---------------------------------------------------
-- UI LAYOUT (FIXED)
---------------------------------------------------
local toggleBtn = btn("Flashlight OFF", 10)
local colorBox = box("R,G,B", 55)
local applyColor = btn("Apply Color", 85)
local rangeBox = box("Range", 130)
local applyRange = btn("Apply Range", 160)
local angleBox = box("Angle", 205)
local applyAngle = btn("Apply Angle", 235)
local brightnessBox = box("Brightness", 280)
local applyBrightness = btn("Apply Brightness", 310)
local keybindBtn = btn("Keybind: F", 355)
-- extra controls
local brightnessApplyBox = box("Brightness (e.g. 3)", 400)
local brightnessApplyBtn = btn("Apply Brightness Value", 430)
local colorApplyBox = box("Color (255,255,255)", 475)
local colorApplyBtn = btn("Apply Color", 505)
local targetBox = box("Player Name (Stage)", 550)
local stageBtn = btn("Toggle Stage Light", 580)
---------------------------------------------------
-- STAGE SYSTEM
---------------------------------------------------
local stageCache = {}
local function enableStage(plr)
local char = plr.Character
if not char then return end
local head = char:FindFirstChild("Head")
if not head then return end
local light = Instance.new("SpotLight")
light.Parent = head
light.Face = Enum.NormalId.Top
light.Angle = 120
light.Range = 35
light.Brightness = 4
light.Color = settings.color
local highlight = Instance.new("Highlight")
highlight.Parent = char
highlight.FillColor = settings.color
stageCache[plr] = {light = light, highlight = highlight}
end
local function disableStage(plr)
local data = stageCache[plr]
if not data then return end
if data.light then data.light:Destroy() end
if data.highlight then data.highlight:Destroy() end
stageCache[plr] = nil
end
stageBtn.MouseButton1Click:Connect(function()
local name = targetBox.Text
local target = Players:FindFirstChild(name)
if not target then return end
if stageCache[target] then
disableStage(target)
else
enableStage(target)
end
end)
---------------------------------------------------
-- FLASHLIGHT LOGIC
---------------------------------------------------
local function toggleFlashlight()
if flashlight then
settings.enabled = not settings.enabled
flashlight.Enabled = settings.enabled
toggleBtn.Text = settings.enabled and "Flashlight ON" or "OFF"
end
end
UserInputService.InputBegan:Connect(function(input, gp)
if gp then return end
if waitingForKey then
if input.KeyCode ~= Enum.KeyCode.Unknown then
settings.keybind = input.KeyCode
waitingForKey = false
keybindBtn.Text = "Keybind: " .. settings.keybind.Name
end
return
end
if input.KeyCode == settings.keybind then
toggleFlashlight()
end
end)
keybindBtn.MouseButton1Click:Connect(function()
waitingForKey = true
keybindBtn.Text = "Press a key..."
end)
toggleBtn.MouseButton1Click:Connect(toggleFlashlight)
---------------------------------------------------
-- APPLY SETTINGS
---------------------------------------------------
applyColor.MouseButton1Click:Connect(function()
local r,g,b = colorBox.Text:match("(%d+),(%d+),(%d+)")
r,g,b = tonumber(r),tonumber(g),tonumber(b)
if r and g and b then
applyGlobalColor(Color3.fromRGB(r,g,b))
end
end)
applyRange.MouseButton1Click:Connect(function()
local v = tonumber(rangeBox.Text)
if v then
settings.range = v
if flashlight then flashlight.Range = v end
end
end)
applyAngle.MouseButton1Click:Connect(function()
local v = tonumber(angleBox.Text)
if v then
settings.angle = v
if flashlight then flashlight.Angle = v end
end
end)
applyBrightness.MouseButton1Click:Connect(function()
local v = tonumber(brightnessBox.Text)
if v then
settings.brightness = v
if flashlight then flashlight.Brightness = v end
end
end)
---------------------------------------------------
-- EXTRA FEATURES
---------------------------------------------------
brightnessApplyBtn.MouseButton1Click:Connect(function()
local v = tonumber(brightnessApplyBox.Text)
if v then
settings.brightness = v
if flashlight then flashlight.Brightness = v end
end
end)
colorApplyBtn.MouseButton1Click:Connect(function()
local r,g,b = colorApplyBox.Text:match("(%d+),(%d+),(%d+)")
r,g,b = tonumber(r), tonumber(g), tonumber(b)
if r and g and b then
applyGlobalColor(Color3.fromRGB(r,g,b))
end
end)No comments yet for this script.



