Im making a star wars game and my battle droid is supposed to fire its blaster at the closest target it can find, however if there are multiple targets in its range it will fire at all of them at once. How can i prevent this from happening. I understand why its happening but how can i prevent it?
Here is a video link to show whats i mean: https://screencast-o-matic.com/watch/c3V6VQVoT5t
Here is the code that makes it fire:
local agroDist = 50
local parentTorso = script.Parent.Parent.Parent:WaitForChild("Torso")
local origin = script.Parent
local gun = script.Parent.Parent
local selfHuamn = script.Parent.Parent.Parent.Humanoid
local humanTable = {}
local torsoTable = {}
while wait(2) do
local target = nil
for i,v in pairs(game.Workspace:GetChildren()) do
local human = v:FindFirstChild("Humanoid")
local torso = v:FindFirstChild("Torso")
if human and torso and torso ~= parentTorso and (parentTorso.Position - torso.Position).magnitude <= agroDist then
print("player found near by")
target = torso
if target == torso and human.Health > 0 and selfHuamn.Health > 0 then
--first step is to make the origin part turn in the direction of the player
origin.CFrame = CFrame.new(origin.Position, torso.Position)
local laser = Instance.new("Part", parentTorso)
laser.Size = Vector3.new(.2,.2,6)
laser.Anchored = false
laser.CanCollide = false
laser.BrickColor = BrickColor.new("Really blue")
laser.Material = "Neon"
laser.CFrame = origin.CFrame * CFrame.new(0,0,0)
local bodyV = Instance.new("BodyVelocity", laser)
bodyV.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
bodyV.Velocity = origin.CFrame.LookVector * 150
laser.Touched:Connect(function(hit)
local human = hit.Parent:FindFirstChild("Humanoid")
if human then
human.Health = human.Health - 5
end
end)
end
end
end
end

1 comment
try making a variable for the target's name, then having check that variable before every fire.