
KeylessUniversal

-- tool tracker + beam + box (ghost)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local plr = Players.LocalPlayer
local char
local beam, att0, att1
local box
local currentHandle
local RANGE = 25
local function setupBeam()
if beam then beam:Destroy() end
att0 = Instance.new("Attachment")
att1 = Instance.new("Attachment")
beam = Instance.new("Beam")
beam.Attachment0 = att0
beam.Attachment1 = att1
beam.Width0 = 0.1
beam.Width1 = 0.1
beam.FaceCamera = true
beam.Color = ColorSequence.new(Color3.new(1,0,0))
att0.Parent = workspace.Terrain
att1.Parent = workspace.Terrain
beam.Parent = workspace.Terrain
end
local function createBox(part)
if box then box:Destroy() end
currentHandle = part
box = Instance.new("SelectionBox")
box.Adornee = part
box.LineThickness = 0.02
box.Color3 = Color3.fromRGB(255,0,0)
box.SurfaceColor3 = Color3.fromRGB(255,0,0)
box.SurfaceTransparency = 0.8
box.Parent = part
end
local function updateBoxColor(isTouching)
if not box then return end
if isTouching then
box.Color3 = Color3.fromRGB(0,255,0)
box.SurfaceColor3 = Color3.fromRGB(0,255,0)
else
box.Color3 = Color3.fromRGB(255,0,0)
box.SurfaceColor3 = Color3.fromRGB(255,0,0)
end
end
local function getTool()
if not char then return end
for _,v in ipairs(char:GetChildren()) do
if v:IsA("Tool") then
return v
end
end
end
local function getClosestPart()
if not char then return end
local closestPart, dist = nil, RANGE
local origin = char:GetPivot().Position
for _,p in ipairs(Players:GetPlayers()) do
if p ~= plr and p.Character then
for _,part in ipairs(p.Character:GetChildren()) do
if part:IsA("BasePart") then
local d = (part.Position - origin).Magnitude
if d < dist then
dist = d
closestPart = part
end
end
end
end
end
return closestPart
end
local function onCharacter(c)
char = c
setupBeam()
c.ChildAdded:Connect(function(obj)
if obj:IsA("Tool") then
task.wait()
local handle = obj:FindFirstChild("Handle") or obj:FindFirstChildWhichIsA("BasePart")
if handle then
createBox(handle)
end
end
end)
c.ChildRemoved:Connect(function(obj)
if obj:IsA("Tool") then
if box then box:Destroy() end
currentHandle = nil
end
end)
end
plr.CharacterAdded:Connect(onCharacter)
if plr.Character then
onCharacter(plr.Character)
end
RunService.Heartbeat:Connect(function()
if not char then return end
local tool = getTool()
local targetPart = getClosestPart()
if not tool or not targetPart then
if beam then beam.Enabled = false end
updateBoxColor(false)
return
end
local handle = tool:FindFirstChild("Handle") or tool:FindFirstChildWhichIsA("BasePart")
if not handle then
beam.Enabled = false
updateBoxColor(false)
return
end
beam.Enabled = true
att0.WorldPosition = handle.Position
att1.WorldPosition = targetPart.Position
local touching = false
for _,part in ipairs(handle:GetTouchingParts()) do
if part:IsDescendantOf(targetPart.Parent) then
touching = true
break
end
end
if touching then
beam.Color = ColorSequence.new(Color3.fromRGB(0,255,0))
else
beam.Color = ColorSequence.new(Color3.fromRGB(255,0,0))
end
updateBoxColor(touching)
end)No comments yet for this script.



