This MainScript is designed to spawn a "Template" after the player has touched "Landing2" and this will keep repeating after the player dies. (I shall repeat myself). A player would touch "Landing2" for the value in leaderstats to get +1 which is the "Sub-Level" and another "Template" would spawn and repeat and repeat, but then I realized that this was getting repetitive as now I want other rooms to spawn instead of the same "Template" spawning over and over again after the player touches "Landing2" and I'm having trouble randomizing it. please help.

Note: This game is supposed to be based on SCP-087 but I changed a couple of things like instead of SCP-087-1, I just replaced it with Gordon Ramsay and I just want it to spawn a few rooms in the stairwell instead of just stairs

Another note: I just putted here portions of the MainScript as it would be too long of a question.

local Players = require(game.ServerScriptService.LeaderBoardModule)

game.Lighting.TimeOfDay = 0

local Template = workspace.Template

local SubLevel = 1
local HeightOffset = Template:GetExtentsSize().Y - 4
local MinSPCShowAtLVLFromPlr = 5
local MaxSPCShowAtLVLFromPlr = 10
local SCP_Brain = script["SCP-087 Brain"]:Clone()
local SummonedSCP = false
local TemplateTble = {Total = 0}
local Pad1 = {}
local Pad2 = {}

TemplateTble:init(Template)
--[[ Clear our function out from the table so it's not included in the for loops below and break things ]]
TemplateTble["init"] = nil



local TemplateMiddlePart = (function()
	local Part = nil
	local TemplateBits = TemplateTble
	local SX = 0
	local SY = 0
	local SZ = 0
	local CenterPoint = Vector3.new()
	for key,Obj in next, TemplateBits do
		if(key ~= "Total") then
			--print(key,Obj)
			if(Obj.Ref:IsA("BasePart") == true) then
				local X = Obj.Ref.Position.X
				local Y = Obj.Ref.Position.Y
				local Z = Obj.Ref.Position.Z
				SX = SX + X 
				SY = SY + Y
				SZ = SZ + Z
			end
		end
	end
	SX = SX/TemplateBits.Total
	SY = SY/TemplateBits.Total
	SZ = SZ/TemplateBits.Total
	CenterPoint = Vector3.new(SX,SY,SZ)
	local Dist = math.huge
	for key,Obj in next, TemplateBits do
		if(key ~= "Total") then
			if(Obj.Ref:IsA("BasePart") == true) then
				local D = (CenterPoint - Obj.Ref.Position).magnitude
				if(D < Dist) then
					Part = Obj.Ref
					Dist = D
				end
			end
		end
	end
	return Part
end)()

function CreateNextLevel(newLevel)
	local YOffset = Template:GetExtentsSize().Y
	local Exists = workspace:FindFirstChild("Level_"..newLevel) ~= nil	
	if(Exists == false) then
		-- Right if the level doesn't exist then lets create it!...
		local Clone = Template:Clone()
		for key,Tble in next, TemplateTble do
			if(key ~= "Total") then
				local Obj = Tble.Ref
				local CCopy_Part = Clone:FindFirstChild(key,true)
				if(CCopy_Part ~= nil) then
					CCopy_Part.Parent.Position = Obj.Position -Vector3.new(0,SubLevel*(YOffset-4.5),0) 
					if(CCopy_Part.Parent.Name == "Landing2") then
						CCopy_Part.Parent.Touched:connect(function(otr) ConnectNewLevel(otr,CCopy_Part.Parent) end)
					end
					if(CCopy_Part.Parent.Name == "Landing1") then
						CCopy_Part.Parent.Touched:connect(function(otr) AddLevelToPlayer(otr,CCopy_Part.Parent.Parent) end)
					end
				end
			end

		end
		Clone.MyLevel.Value = SubLevel
		Clone.Name = "Level_"..SubLevel
		Clone.Parent = workspace 
		SubLevel = SubLevel +1
	end
end

workspace.Template.Landing1.Touched:connect(function(otr)
	local Player = otr.Parent
	AddLevelToPlayer(otr,workspace.Template)
end)

workspace.Template.Landing2.Touched:connect(function(otr) 
	local Player = otr.Parent
	ConnectNewLevel(otr,workspace.Template.Landing2)
end)