Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

How to script a npc that does not shoot your team only the enemy?

my script:

local figure = script.Parent
local Tool = script.Parent.PaintballGun
local reload = .5

function modechange()
	local mode = figure.mode
	if mode.Value == 1 then reload = .5
	elseif mode.Value == 2 then reload = 5
	elseif mode.Value == 3 then reload = 1.5
	elseif mode.Value == 4 then reload = 10 end
end

function findNearestTorso()
	local targetTorso = nil
	local distance = 500
	local list = game.Workspace:children()
	for i = 1, #list do
		local listTorso = list[i]:FindFirstChild("Torso")
		if listTorso ~= nil and list[i]:FindFirstChild("Humanoid") ~= nil and list[i] ~= figure then
			if (listTorso.Position - figure.Torso.Position).magnitude < distance then
				distance = (listTorso.Position - figure.Torso.Position).magnitude
				targetTorso = listTorso
			end
		end
	end
	list = nil
	return targetTorso
end

function fire(v)
	Tool.Handle.Fire:play()
	local torso = figure:FindFirstChild("Torso")
	local missile = Instance.new("Part")
	local spawnPos = figure.Head.Position
	local sp = figure.Torso.CFrame.lookVector
	
	spawnPos = spawnPos + (v * 3)

	missile.Position = spawnPos
	missile.Size = Vector3.new(1, 1, 1)
	if figure.mode.Value == 1 then missile.Velocity = v * 160
	elseif figure.mode.Value == 3 then missile.Velocity = Vector3.new(v.x * math.random(80, 100), v.y * math.random(80, 100), v.z * math.random(80, 100))
	elseif figure.mode.Value == 2 then missile.Velocity = v * 550 end
	missile.Shape = 0
	missile.BottomSurface = 0
	missile.TopSurface = 0
	missile.Name = "Paintball"
	missile.Elasticity = 0
	missile.Reflectance = 0
	missile.BrickColor = BrickColor.Random()
	missile.Friction = .9
	missile.CanCollide = false

	local force = Instance.new("BodyForce")
	force.force = Vector3.new(0, 90, 0)
	force.Parent = missile

	Tool.BrickCleanup:clone().Parent = missile

	if figure.mode.Value == 2 then
		local new_script = Tool.Paintball2:clone()
		new_script.Disabled = false
		new_script.Parent = missile
	elseif figure.mode.Value == 1 or figure.mode.Value == 3 then
		local new_script = Tool.Paintball:clone()
		new_script.Disabled = false
		new_script.Parent = missile
	end

	local creator_tag = Instance.new("ObjectValue")
	creator_tag.Value = figure
	creator_tag.Name = "creator"
	creator_tag.Parent = missile
	missile.Parent = game.Workspace

	if figure.mode.Value == 3 and torso ~= nil then
		for i = 1, 2 do
			bMissile = missile:clone()
			bMissile.Velocity = Vector3.new(v.x * math.random(80, 100), v.y * math.random(80, 100), v.z * math.random(80, 100))
			if i == 1 then bMissile.CFrame = bMissile.CFrame - (torso.CFrame.lookVector * 1.5) + Vector3.new(0, .5)
			else bMissile.CFrame = bMissile.CFrame + (torso.CFrame.lookVector * 1.25) + Vector3.new(0, .75, 0) end
			bMissile.Parent = game.Workspace
		end
	end
end

function grenade(v)
	local head, torso, player = find("Head", figure), find("Torso", figure)
	if head == nil or torso == nil then return end

	local spawnPos = head.Position + (v * 4)

	local gnade = ball:clone()
	gnade.CanCollide = true
	gnade.CFrame = CFrame.new(spawnPos)
	gnade.Velocity = v * 60 + Vector3.new(0, 45, 0)

	local bc = Instance.new("BrickColorValue")
	bc.Value = torso.BrickColor
	bc.Name = "BCValue"
	bc.Parent = gnade

	local exScript = Tool.Grenade:clone()
	exScript.Disabled = false
	exScript.Parent = gnade

	gnade.Parent = game.Workspace
end

while script.Parent.Humanoid.Health > 0 do
	local torso = figure:FindFirstChild("Torso")
	-- local player = game.Players:children()
	local target = findNearestTorso() -- nil
	-- if #player > 0 and math.random(1, 3) == 1 then target = player[math.random(1, #player)] else target = findATorso() end
	if target ~= nil and torso ~= nil then
		-- if target.className == "Player" then target = target.Character:FindFirstChild("Torso") end
		-- if target ~= nil then
		local pos = target.Position
		local dir = (pos - torso.Position).magnitude
		if dir < 130 then pos = pos + (target.CFrame.lookVector * (dir/math.random(25, 50))) end
		if dir >= 130 then figure.mode.Value = 2 pos = pos + Vector3.new(0, math.random(1, 2), 0)
		elseif dir < 130 and dir >= 50 then figure.mode.Value = 1 pos = pos + Vector3.new(0, (dir/75) * math.random(1, 4), 0)
		elseif dir < 50 then figure.mode.Value = 3 pos = pos + Vector3.new(0, (dir/75) * math.random(1, 4), 0)
		else figure.mode.Value = 4 end
		modechange()
		local lookAt = (pos - torso.Position).unit
		if figure.mode.Value == 4 then fireNade(lookAt) elseif figure.mode.Value < 4 then fire(lookAt) end
		-- end
	end
	wait(reload + math.random() * 1.5)
end

i want to make it so it shoots enemy team only not any player. so it does not shoot its own team mate it only shoots at enemy.

4 comments

0

You'll need to make an "if" statement to check the player's TeamColor before firing.

0

can you plz fix your formatting

0

Edited to add code formatting

1

^^^

1 answer

I believe I know how to fix this...

Basically, create teams and make a separate that randomly chooses teams or they can choose their team. You must also choose team colours as these are important to the script.

Then, use this script:

local figure = script.Parent
local Tool = script.Parent.PaintballGun
local reload = .5
 
function modechange()
    local mode = figure.mode
    if mode.Value == 1 then reload = .5
    elseif mode.Value == 2 then reload = 5
    elseif mode.Value == 3 then reload = 1.5
    elseif mode.Value == 4 then reload = 10 end
end
local player = game.Players.LocalPlayer
if player.TeamColor == 'TeamColour' then
function findNearestTorso()
    local targetTorso = nil
    local distance = 500
end

1 comment

0

Sorry, uh- just continue your script before adding the end.

This discussion is preserved as it was. New answers, comments, and votes are closed.