So I have a script below which is supposed to separate parts when the spawn in to ensure they will not be clumped together, and while it does this partly, for some reason there is a set of parts that have only part of the check complete and they were still placed.

Cords of parts: Part1: (35, 3.5, 32) [] Part2: (31, 3.5, 77) [] As you can see, only the Z-Cords are not within the range I set, while the X-Cords are too close together. I would reccomend checking out line 21 as this is where the check is to see the ranges.

Script in question:

local players = game:GetService("Players")
local replstor = game:GetService("ReplicatedStorage")
local orb = replstor.PointOrb
local redorb = replstor.RedPointOrb
local blueorb = replstor.BluePointOrb
players.PlayerAdded:Connect(function()
	local function Orbspawn(OrbType, MinOrb, MaxOrb, MinRad, MaxRad)
		local lastorbpos
		local orbnum = 1
		local orbamount = math.random(MinOrb,MaxOrb)
		for i = 1, orbamount do
			local orbclone = OrbType:Clone()
			orbclone.Parent = workspace.Orbs
			if orbnum == 1 then
				orbclone.Position = Vector3.new(math.random(MinRad,MaxRad), 3.5, math.random(MinRad,MaxRad))
				lastorbpos = orbclone.Position
				orbnum += 1
			else
				local chosen = false
				while not chosen do
					local randpos = Vector3.new(math.random(MinRad,MaxRad), 3.5, math.random(MinRad,MaxRad))
					if randpos.X > lastorbpos.X + 16 or randpos.X < lastorbpos.X - 16 then
						if randpos.Z > lastorbpos.Z + 16 or randpos.Z < lastorbpos.Z - 16 then
							orbclone.Position = randpos
							lastorbpos = randpos
							orbnum += 1
							chosen = true
						else
							chosen = false
						end
					else
						chosen = false
					end
				end
			end
		end
	end
	Orbspawn(orb, 5, 10, -200, 200)
	Orbspawn(redorb, 3, 5, -200, 200)
	Orbspawn(blueorb, 1, 2, -200, 200)
end)