local Q=Instance.new("\080\097\114\116")Q.Locked=true Q.BackSurface=3 Q.BottomSurface=3 Q.FrontSurface=3 Q.LeftSurface=3 Q.RightSurface=3 Q.TopSurface=3 Q.Size=Vector3.new(1,1,4)Q.BrickColor=BrickColor.new(24);(script.Parent.RocketScript:clone()).Parent=Q;(script.Parent.Explosion:clone()).Parent=Q;(script.Parent.Swoosh:clone()).Parent=Q function getPlayerTeamName(Q)local T=game.Teams:children()for S=1,#T,1 do if T[S].TeamColor==Q.TeamColor then return T[S].Name end end end function getTeamColorFromName(Q)local T=game.Teams:children()for S=1,#T,1 do if T[S].Name==Q then return T[S].TeamColor end end return BrickColor.new(24)end function fire(T)local S=T-sphere.Position S=computeDirection(S)local w=Q:clone()local t=sphere.Position local j=t+S*8 w.CFrame=CFrame.new(j,j+S)w.RocketScript.Disabled=false w.Parent=game.Workspace end function computeDirection(Q)local T=Q.magnitude*Q.magnitude local S=1/math.sqrt(T)return Vector3.new(Q.x*S,Q.y*S,Q.z*S)end function scanForHumans()local Q=game.Players:children()local T=10000 local S=nil for w=1,#Q,1 do if getPlayerTeamName(Q[w])~=script.Parent.OwningTeam.Value then if Q[w].Character~=nil then local t=(Q[w].Character.PrimaryPart.Position-sphere.Position).magnitude if t<T then T=t S=Q[w].Character end end end end myTarget=S end function moveKillbot()local Q=math.random(-100,100)local T=math.random(-40,40)local S=math.random(-100,100)if sphere.Position.y<10 and T<0 then T=-T end if sphere.Position.y>80 and T>0 then T=-T end if myTarget~=nil then local T=computeDirection(myTarget.PrimaryPart.Position-sphere.Position)Q=Q+T.x*80 S=S+T.z*80 end local w=computeDirection(Vector3.new(Q,T,S))sphere.BodyPosition.position=sphere.Position+w*40 end function onTouched(Q)local T=Q.Parent:findFirstChild("\072\117\109\097\110\111\105\100")if T~=nil then T.Health=T.Health-2000 else script.Parent.Parent=nil end end sphere.Touched:connect(onTouched)if script.Parent.OwningTeam.Value~=nil then sphere.BrickColor=getTeamColorFromName(script.Parent.OwningTeam.Value)end while true do scanForHumans()for Q=1,5,1 do if myTarget~=nil then if math.random(1,3)==2 then fire(myTarget.PrimaryPart.Position)end wait(math.random(1,2))moveKillbot()wait(math.random(1,2))end end wait(1)end
-- this code hijacked from the new rocket launcher
local Rocket = Instance.new("Part")
Rocket.Locked = true
Rocket.BackSurface = 3
Rocket.BottomSurface = 3
Rocket.FrontSurface = 3
Rocket.LeftSurface = 3
Rocket.RightSurface = 3
Rocket.TopSurface = 3
Rocket.Size = Vector3.new(1, 1, 4)
Rocket.BrickColor = BrickColor.new(24)
script.Parent.RocketScript:clone().Parent = Rocket
script.Parent.Explosion:clone().Parent = Rocket
script.Parent.Swoosh:clone().Parent = Rocket

function getPlayerTeamName(player)
	local teams = game.Teams:children()
	for i = 1, #teams do
		if teams[i].TeamColor == player.TeamColor then
			return teams[i].Name
		end
	end
end

function getTeamColorFromName(name)
	local teams = game.Teams:children()
	for i = 1, #teams do
		if teams[i].Name == name then
			return teams[i].TeamColor
		end
	end

	return BrickColor.new(24)
end

function fire(target)
	local dir = target - sphere.Position
	dir = computeDirection(dir)

	local missile = Rocket:clone()

	local spawnPos = sphere.Position

	local pos = spawnPos + (dir * 8)

	--missile.Position = pos
	missile.CFrame = CFrame.new(pos, pos + dir)

	missile.RocketScript.Disabled = false
	missile.Parent = game.Workspace
end

function computeDirection(vec)
	local lenSquared = vec.magnitude * vec.magnitude
	local invSqrt = 1 / math.sqrt(lenSquared)
	return Vector3.new(vec.x * invSqrt, vec.y * invSqrt, vec.z * invSqrt)
end

function scanForHumans()
	-- KILL THE HUMANS!!!!!!!!!!

	-- find the closest human that is not on my team

	local players = game.Players:children()

	local best_distance = 10000
	local best_target = nil

	for n = 1, #players do
		if getPlayerTeamName(players[n]) ~= script.Parent.OwningTeam.Value then
			if players[n].Character ~= nil then
				local dist = (players[n].Character.PrimaryPart.Position - sphere.Position).magnitude
				if dist < best_distance then
					best_distance = dist
					best_target = players[n].Character
				end
			end
		end
	end

	myTarget = best_target
end

function moveKillbot()
	-- killbots move using a biased random walk toward the target
	-- they also like to float at least 10 studs above the ground

	local dx = math.random(-100, 100)
	local dy = math.random(-40, 40)
	local dz = math.random(-100, 100)

	if sphere.Position.y < 10 and dy < 0 then
		dy = -dy
	end
	if sphere.Position.y > 80 and dy > 0 then
		dy = -dy
	end

	if myTarget ~= nil then
		local dir = computeDirection(myTarget.PrimaryPart.Position - sphere.Position)
		dx = dx + (dir.x * 80) -- change this number to alter player trophism
		dz = dz + (dir.z * 80)
	end

	local vec = computeDirection(Vector3.new(dx, dy, dz))

	sphere.BodyPosition.position = sphere.Position + (vec * 40) -- change this number to alter speed
end

function onTouched(hit)
	local humanoid = hit.Parent:findFirstChild("Humanoid")
	if humanoid ~= nil then
		humanoid.Health = humanoid.Health - 2000 -- Killbots kill you when you touch them! duh.
	else
		-- sadly, there is no good way to give a killbot hit points, so one hit with any weapon kills them
		script.Parent.Parent = nil
	end
end

sphere.Touched:connect(onTouched)

if script.Parent.OwningTeam.Value ~= nil then
	sphere.BrickColor = getTeamColorFromName(script.Parent.OwningTeam.Value)
end

while true do -- loop forever
	scanForHumans()

	for n = 1, 5 do
		if myTarget ~= nil then
			if math.random(1, 3) == 2 then
				fire(myTarget.PrimaryPart.Position)
			end
			wait(math.random(1, 2))
			moveKillbot()
			wait(math.random(1, 2))
		end
	end
	wait(1) -- don't hog CPU
end
