So I've made a script that goes through all of the parts and adds those parts to specific tables based on names. I'm doing this to build a table of parts and positions for the server to send to client for a minimap. To reduce on lag of the constant calling and waiting to get those parts. Yet, it has come to my attention that it seems to miss one part in each name category. I'm unaware of if it's in the table creation or the drawing that is causing this, and I've tried my best to find it. So I'm asking for help.

I do apologize ahead of time for the length of the scripts, but I figure the entire thing is needed.

Script

--======================--
--// Global Functions \\--
--======================--
local tableFunc = game.ReplicatedStorage.CrossConnections.Shared.TableFunction

local walls, floors, paths = {}, {}, {}

function getChildren(parent)
	for i, v in pairs(parent:GetChildren()) do
		if v:IsA("Part") then
			if string.lower(v.Name) == "wall" then
				table.insert(walls, #walls, {posX = v.Position.X, posZ = v.Position.Z, sizeX = v.Size.X, sizeZ = v.Size.Z, rotation = v.Rotation.Y})
			end
			if string.lower(v.Name) == "floor" then
				table.insert(floors, #floors, {posX = v.Position.X, posZ = v.Position.Z, sizeX = v.Size.X, sizeZ = v.Size.Z, rotation = v.Rotation.Y})
			end
			if string.lower(v.Name) == "path" then
				table.insert(paths, #paths, {posX = v.Position.X, posZ = v.Position.Z, sizeX = v.Size.X, sizeZ = v.Size.Z, rotation = v.Rotation.Y})
			end
		elseif v:IsA("Model") then
			getChildren(v)
		end
	end
end

function updateTables()
	getChildren(game.Workspace)
end

updateTables()

function tableFunc.OnServerInvoke(player, tableType)
	print(player.Name, tableType)
	if tableType == "walls" then
		for i = 1, #walls do
			for a, b in pairs(walls[i]) do
				tableFunc:InvokeClient(player, a, b, "wall")
			end
		end
	elseif tableType == "floors" then
		for i = 1, #floors do
			for a, b in pairs(floors[i]) do
				tableFunc:InvokeClient(player, a, b, "floor")
			end
		end
	elseif tableType == "paths" then
		for i = 1, #paths do
			for a, b in pairs(paths[i]) do
				tableFunc:InvokeClient(player, a, b, "path")
			end
		end
	end
end


--===================--
--// Map Functions \\--
--===================--
local getItems = game.ReplicatedStorage.CrossConnections.Map.GetItems

function getItems.OnServerInvoke(player, itemType)
	if itemType == "walls" then
		return walls
	elseif itemType == "floors" then
		return floors
	elseif itemType == "paths" then
		return paths
	elseif itemType == "self" then
		return game.Workspace:WaitForChild(player.Name).Torso.Position.X.. "::" ..game.Workspace:WaitForChild(player.Name).Torso.Position.Z
	end
end

LocalScript:

--==========================--
--// Predefined Variables \\--
--==========================--
local Players = game.Players
local Player = game.Players.LocalPlayer
local map = script.Parent.holder

local pX, pZ = 0,0

local dist = 65 --How far away items will be drawn

local unit0 = Vector3.new(0,0,1) --Look vector for north
local up = Vector3.new(0,1,0) --Look Vector for up
local degree = 57.2958 --Degree of 1 Radian

--=======================--
--// Predefined Clones \\--
--=======================--
local blip = script.Parent.Center:Clone()
blip.BackgroundColor3 = Color3.new(math.random(1, 255)/255, math.random(1, 255)/255, math.random(1, 255)/255)
blip.ZIndex = 2
blip.Visible = true

local name = script.Parent.You:Clone()
name.ZIndex = 2
name.Visible = true

--======================--
--// Remote Functions \\--
--======================--
local getItems = game.ReplicatedStorage.CrossConnections.Map.GetItems
local tableFunc = game.ReplicatedStorage.CrossConnections.Shared.TableFunction

local walls, floors, paths = {}, {}, {}

local wallCount = 0;
local floorCount = 0;
local pathCount = 0;

function tableFunc.OnClientInvoke(name, value, type)
	if name == "rotation" then
		if type == "wall" then
			wallCount = wallCount + 1
			table.insert(walls, wallCount, {})
		elseif type == "floor" then
			floorCount = floorCount + 1
			table.insert(floors, floorCount, {})
		elseif type == "path" then
			pathCount = pathCount + 1
			table.insert(paths, pathCount, {})
		end
	end
	
	if type == "wall" then
		walls[wallCount][name] = value
	elseif type == "path" then
		paths[pathCount][name] = value
	elseif type == "floor" then
		floors[floorCount][name] = value
	end
end

--======================--
--// Rotation Methods \\--
--======================--
function setRadarRotation(lv)
	local cp = lv*Vector3.new(1,0,1)
	local cr = up:Cross(unit0)
	
	local ang = math.acos(cp.unit:Dot(unit0))
	ang = (cp.unit:Dot(cr) < 0) and 2*math.pi - ang or ang
	
	script.Parent.holder.Rotation = ang*degree
	
	for i, blip in pairs(script.Parent.holder:GetChildren()) do
		blip.Rotation = 360-script.Parent.holder.Rotation
	end
end

function getRotationOfPart(rotY)
	if rotY == 90 or rotY == -90 then
		return 90
	else
		return 0
	end
end

--==================--
--// Draw Methods \\--
--==================--
function fixPos(blip, x, z)
	if x == 1 then
		blip.Position = blip.Position - UDim2.new(0,0,0,z/2)
	elseif z == 1 then
		blip.Position = blip.Position - UDim2.new(0,x/2,0,0)
	elseif z == 1 and x == 1 then
	else
		blip.Position = blip.Position - UDim2.new(0,x/2,0,z/2)
	end
end

function drawItem(itemName, posX, posZ, sizeX, sizeZ, rotY)
	if posX >= pX - dist and posX <= pX + dist and posZ >= pZ - dist and posZ <= pZ + dist then
		local newBlip = blip:Clone()
		newBlip.Position = blip.Position + UDim2.new(0, pX - posX, 0, pZ - posZ)
		newBlip.Parent = map
		newBlip.Rotation = getRotationOfPart(rotY)
		newBlip.Name = itemName
		newBlip.Size = UDim2.new(0, sizeX, 0, sizeZ)
		fixPos(newBlip, sizeX, sizeZ)
		
		if itemName == "wall" then
			newBlip.ZIndex = 2
		elseif itemName == "path" or itemName == "floor" then
			newBlip.ZIndex = 1
		end
	end
end

--============--
--// Tables \\--
--============--
wait(1) --Giving the server time to populate the tables if player is first in game
tableFunc:InvokeServer("walls")
tableFunc:InvokeServer("floors")
tableFunc:InvokeServer("paths")

--===================--
--// Render Method \\--
--===================--
function updateMap()
	map:ClearAllChildren()
	
	local youBlip = blip:Clone()
	youBlip.Visible = true
	youBlip.Parent = map
	
	local youName = name:Clone()
	youName.Parent = map
	youName.Visible = true
	
	setRadarRotation(game.Workspace.CurrentCamera.CoordinateFrame.lookVector)
	
	for i, wall in pairs(walls) do
		drawItem("wall", wall["posX"], wall["posZ"], wall["sizeX"], wall["sizeZ"], wall["rotation"])
	end
	for i, Floor in pairs(floors) do
		drawItem("floor", Floor["posX"], Floor["posZ"], Floor["sizeX"], Floor["sizeZ"], Floor["rotation"])
	end
	for i, path in pairs(paths) do
		drawItem("path", path["posX"], path["posZ"], path["sizeX"], path["sizeZ"], path["rotation"])
	end
end

while wait() do
	local selfPos = getItems:InvokeServer("self")
	pX, pZ = tonumber(string.sub(selfPos, 0, string.find(selfPos, "::")-1)), tonumber(string.sub(selfPos, string.find(selfPos, "::")+2, string.len(selfPos)))
	
	updateMap()
end