Hello Everybody! My name is IronSpider671 and I am once again back here at ScriptingHelpers, because I seem to have utterly failed. So, I'm making a little game as a side project with NPCs and players fighting each other between two teams (not sure about the names yet but the colors are: Navy blue and Maroon). So, I wrote this little script, bits and pieces taken from tutorials, open source versions of games, and my own Lua knowledge. So, this script works, for the time being. I mean the NPCs run around and shoot every single Humanoid near them. This is my script:

local larm = script.Parent:FindFirstChild("Left Arm")
local rarm = script.Parent:FindFirstChild("Right Arm")

local wanderTarget 
local wanderAngle 
local wanderConeSize = 6
local maxWanderAngle = 0.75 

function getWanderTarget()
	math.random(tick())
	wanderAngle = (math.random() - 0.5) * maxWanderAngle
	rotatedLookVector = CFrame.Angles(0, wanderAngle, 0) * script.Parent.Torso.CFrame.lookVector
	return (script.Parent.Torso.Position + wanderConeSize * rotatedLookVector)
end

function fire(spn)
	local missile = script.Parent.Rocket:clone()
	missile.CFrame = spn.CFrame * CFrame.new(0, 0, -6)
	local creator_tag = Instance.new("ObjectValue")
	creator_tag.Value = game.Players.LocalPlayer
	creator_tag.Name = "creator"
	creator_tag.Parent = missile
	missile.Kill.Disabled = false
	missile.Transparency = 0
	missile.Light.Light.Visible = true
	missile.RocketScript.Disabled = false
	script.Parent.Rocket.PewPew:play()
	missile.Parent = game.Workspace
	script.Parent.Flash.Light.Light.Visible = true
	wait(0.1)
	script.Parent.Flash.Light.Light.Visible = false
end

function findNearestTorso(pos)
	local list = game.Workspace:children()
	local torso = nil
	local dist = 200
	local temp = nil
	local human = nil
	local temp2 = nil
	for x = 1, #list do
		temp2 = list[x]
		if (temp2.className == "Model") and (temp2 ~= script.Parent) then
			temp = temp2:findFirstChild("Right Arm")
			human = temp2:findFirstChild("Humanoid")
			if (temp ~= nil) and (human ~= nil) and (human.Health > 0) then
				if (temp.Position - pos).magnitude < dist then
					torso = temp
					dist = (temp.Position - pos).magnitude
				end
			end
		end
	end
	return torso
end

human = script.Parent:findFirstChild("Humanoid")
if human == nil then human = script.Parent:findFirstChild("Zombie") end

while true do
	wait(math.random(0.5,1))
	local target = findNearestTorso(script.Parent.Torso.Position)
	if target ~= nil then
	fire(script.Parent.Torso)
		human:MoveTo(target.Position, target)
		human.TargetPoint = target.Position
else
	wanderTarget = getWanderTarget()	
	human:MoveTo(wanderTarget, script.Parent.Torso)
	end

end

But, since my game is team-based, I wanted the NPCs to specifically attack the opposing team (or a specific TeamColor) So, I edited around and tried the NPC to just fire at and move to the torsos of players with the TeamColor, Maroon. This was my script afterwards:

local larm = script.Parent:FindFirstChild("Left Arm")
local rarm = script.Parent:FindFirstChild("Right Arm")

local wanderTarget 
local wanderAngle 
local wanderConeSize = 6
local maxWanderAngle = 0.75 

function getWanderTarget()
	math.random(tick())
	wanderAngle = (math.random() - 0.5) * maxWanderAngle
	rotatedLookVector = CFrame.Angles(0, wanderAngle, 0) * script.Parent.Torso.CFrame.lookVector
	return (script.Parent.Torso.Position + wanderConeSize * rotatedLookVector)
end

function fire(spn)
	local missile = script.Parent.Rocket:clone()
	missile.CFrame = spn.CFrame * CFrame.new(0, 0, -6)
	local creator_tag = Instance.new("ObjectValue")
	creator_tag.Value = game.Players.LocalPlayer
	creator_tag.Name = "creator"
	creator_tag.Parent = missile
	missile.Kill.Disabled = false
	missile.Transparency = 0
	missile.Light.Light.Visible = true
	missile.RocketScript.Disabled = false
	script.Parent.Rocket.PewPew:play()
	missile.Parent = game.Workspace
	script.Parent.Flash.Light.Light.Visible = true
	wait(0.1)
	script.Parent.Flash.Light.Light.Visible = false
end

function findNearestTorso(pos)
	local list = game.Workspace:children()
	local torso = nil
	local dist = 200
	local temp = nil
	local human = nil
	local temp2 = nil
	for x = 1, #list do
		temp2 = list[x]
		if (temp2.className == "Model") and (temp2 ~= script.Parent) then
			temp = temp2:findFirstChild("Right Arm")
			human = temp2:findFirstChild("Humanoid")
			if game.Players:GetPlayerFromCharacter(human.Parent).TeamColor == "Maroon" then
			if (temp ~= nil) and (human ~= nil) and (human.Health > 0) then
				if (temp.Position - pos).magnitude < dist then
					torso = temp
					dist = (temp.Position - pos).magnitude
				end
			end
		end
	end
	return torso
end
end

human = script.Parent:findFirstChild("Humanoid")
if human == nil then human = script.Parent:findFirstChild("Zombie") end

while true do
	wait(math.random(0.5,1))
	local target = findNearestTorso(script.Parent.Torso.Position)
	if game.Players:GetPlayerFromCharacter(target.Parent).TeamColor == "Maroon" then
	if target ~= nil then
	fire(script.Parent.Torso)
		human:MoveTo(target.Position, target)
		human.TargetPoint = target.Position
else
	wanderTarget = getWanderTarget()	
	human:MoveTo(wanderTarget, script.Parent.Torso)
	end

end
end

After this, well... nothing. The NPC doesn't even move. It just stands there, not doing anything. I'm not sure what I did wrong (perhaps I put the if statement in a wrong location or so) but any help would be much appreciated! -IronSpider671