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