You know how in some sandboxes, when you spawn, you have your own spawn, and won't spawn anywhere else, and it doesn't show on the leaderboard, only stuff like KOs and WOs, or points will show.

I looked at this but I'm confused, it's not mine and I want to do my own. Could you explain it? And will it work?

function waitForChild(instance, name)
	while not instance:FindFirstChild(name) do
		instance.ChildAdded:wait()
	end
end

function waitForAnyChild(instance)
	while not instance:GetChildren()[1] do
		instance.ChildAdded:wait()
	end
end


print("ControlSpawning script", "waiting for children...")
waitForChild(game.Workspace, "BuildingPlates")
waitForChild(game, "Players")

local debris = game:GetService("Debris")
local assigning = false


function getFirstAvailablePlayerNumber2(player)
	return 0
end

function getFirstAvailablePlayerNumber(player)

	print("getFirstAvailablePlayerNumber()", "waiting...")

   -- wait for previous person to be assigned
	while(assigning) do 
		assigning.Changed:wait()
	end	

	assigning = true

	local playerNumber = 1
	local numberOfBaseplates = #game.Workspace.BuildingPlates:GetChildren()
	local players = game.Players:GetChildren()
	local numberOfPlayers = #players

	print("getFirstAvailablePlayerNumber()", "numberOfBaseplates:", numberOfBaseplates, "numberOfPlayers:", numberOfPlayers)

	for i=1,numberOfBaseplates do
		local isTaken = false
		for j=1,numberOfPlayers do
			if(players[j]:FindFirstChild("playerNumber") ~= nil) then
				if(players[j].playerNumber.Value == i) then
					isTaken = true
				end
			end
		end
		if(isTaken == false) then
			-- We've found the first (lowest) available number
			playerNumber = i
			print("getFirstAvailablePlayerNumber()", "numberOfBaseplates:", numberOfBaseplates, "numberOfPlayers:", numberOfPlayers, "playerNumber:", playerNumber)
			assigning = false
			return playerNumber
		end
	end
	
	-- Shouldn't get here
	print("All baseplates are full.  That shouldn't happen.")
	assigning = false
	return 0
end

function onPlayerRespawn(player)

	-- only interested in events where the player gets a new character
	if player.Character == nil then return end

	print("onPlayerRespawn()", player.Name, "getting playerNumber...")
	if player:FindFirstChild("playerNumber") == nil then
		playerNumber = Instance.new("IntValue")
		playerNumber.Name = "playerNumber"
		playerNumber.Value = getFirstAvailablePlayerNumber(player)
		playerNumber.Parent = player
	end

	print("onPlayerRespawn()", player.Name, "playerNumber:", player.playerNumber.Value, "yielding...")

	wait()
	
	local char = player.Character.Torso
	local placeToSpawnTo = game.Workspace.SpawnPoints:FindFirstChild("SpawnLocation"..tostring(player.playerNumber.Value))
	if placeToSpawnTo ~= nil then 
		print("onPlayerRespawn()", player.Name, "playerNumber:", player.playerNumber.Value, "placeToSpawnTo:", placeToSpawnTo.Name)
		-- set Y position 3 studs above spawn position (otherwise player's torso is stuck in ground)
		char.CFrame = CFrame.new( placeToSpawnTo.Position + Vector3.new(0,3,0) )
	else 
		-- Couldn't find spawn location with that name.
		-- So, spawn in the normal spawn location (outside the plates)
		-- Extra players without baseplates are given playerNumber 0, and they spawn here.
		print("Spawning", player.Name, ", playerNumber:", player.playerNumber.Value, "in neutral spawner.")
	end

	-- Remove the forcefield because it's ugly.
	waitForChild(player.Character, "ForceField")
	--forceField:Remove()

	-- draw fancy crap
	local fire1 = Instance.new("Fire")
	fire1.Color = Color3.new(1, 1, 1)
	fire1.SecondaryColor = Color3.new(0, 0, 1)
	fire1.Heat = 20
	fire1.Size = 10
	fire1.Parent = placeToSpawnTo
	--debris:AddItem(fire1, 5.00)
	
	local fire2 = Instance.new("Fire")
	fire2.Color = Color3.new(0.02, 0.02, 0.1)
	fire2.SecondaryColor = Color3.new(0.1, 0.1, 0.10)
	fire2.Heat = 0
	fire2.Size = 2.5

	fire2.Parent = player.Character.Torso
	--debris:AddItem(fire2, 10.00)
	
	wait(0.2)
	fire1.Size = 8
	wait(0.2)
	fire1.Color = Color3.new(.8, .8, .8)
	fire1.Size = 5
	wait(0.2)
	fire1.Size = 3
	wait(0.2)
	fire1.Enabled = false;
	wait(2)
	fire2.Enabled = false;

	print("Fire created")

end

function onPlayerEntered(newPlayer)

	-- start to listen for new humanoid
	newPlayer.Changed:connect(function(property) onPlayerPropChanged(property, newPlayer) end )
	onPlayerRespawn(newPlayer)
end


function onPlayerPropChanged(property, player)

	if property == "Character" then
		onPlayerRespawn(player)
	end

end

game.Players.ChildAdded:connect(onPlayerEntered)
print("ControlSpawning script", "Players.ChildAdded event has been added.")

-- In Play Solo mode, the event doesn't fire.  So, we have to manually fire it.
-- Wait for Player
print("Waiting for any child in game.Players...")
waitForAnyChild(game.Players)
local players = game.Players:GetChildren()
if(players[1]:FindFirstChild("playerNumber") == nil) then
	print("Manually adding playerNumber")
	onPlayerEntered(players[1])
else
	print("Player already has playerNumber.")
end

Thanks.