So I made a script which detects if theres a zombie and if there is a zombie it shoots a beam but there is one issue. Sometimes it registers the torso twice therfore it deals double the damage . I can't find a solution , ive tried using debounces but I don't know how to use it of for this situation. I want the beam to be able to hit multiple enemies.
local ray = Ray.new(script.Parent.Position,Vector3.new(0,0,-40))
local LaserBean = script.Parent.Parent
local Damage = 40
local Folder = workspace.Folder
local main = script.Parent
local Debris = game:GetService("Debris")
local TweenService = game:GetService("TweenService")
local plr = game.Players
while wait(3)do
local hit,position = workspace:FindPartOnRayWithIgnoreList(ray,{script.Parent,Folder,workspace.hi,game.Players})
if hit then
local k = Instance.new("Part",Folder)
k.Name = "Beam"
k.BrickColor = BrickColor.new("Bright blue")
k.Material = "Neon"
k.Anchored = true
k.CanCollide = false
local Info = TweenInfo.new(1.5)
local Goal = {}
Goal.Transparency = 1
local Tween = TweenService:Create(k , Info , Goal) ----tween the transparency of the beam
Tween:Play()
script.Teeth.Transparency = 0
script.Mouth.Transparency = 1
local Dist = (workspace.hi.Position - main.Position).Magnitude ---Subtract the length you want the beam to be by the laser bean itself
k.Size = Vector3.new(.5 , .5 , Dist)
k.CFrame = CFrame.new(main.Position , hit.Position) * CFrame.new(0,0, - Dist / 2)
script.Beam:Play()
k.Touched:Connect(function(hit)
local Torso = hit.Parent:FindFirstChild("Zombie")
if Torso then
print(hit.name)
if hit.Name == "Torso" then
Torso:TakeDamage(Damage)
else Torso:TakeDamage(0) ---- if hit torso deal damage else return
end
end
wait(1.5)
script.Teeth.Transparency = 1
script.Mouth.Transparency = 0
k:Destroy()
end)
end
end
