yes I made it, here’s an better explanation:
I have 9 stages in an folder on ServerStorage called ‘Stages’, each stage have an NumberValue called ‘Height’, which contains the size of the stage.
A bit of the script:
function NewTower()
debounce = true
Floor1 = Stages[math.random(1, #Stages)]:Clone()
local Height1 = Floor1:FindFirstChild("Height")
Floor1.PrimaryPart = Floor1:FindFirstChild("Center")
Floor1:SetPrimaryPartCFrame(Floor1.Center.CFrame)
Floor1.Parent = Tower
wait()
Floor2 = Stages[math.random(1, #Stages)]:Clone()
local Height2 = Floor2:FindFirstChild("Height")
Floor2.PrimaryPart = Floor2:FindFirstChild("Center")
Floor2:SetPrimaryPartCFrame(Floor1.Center.CFrame + Vector3.new(0, Height1.Value, 0))
Floor2:SetPrimaryPartCFrame(Floor2.Center.CFrame * CFrame.Angles(X, Y, Z))
Floor2.Parent = Tower
wait()
Floor3 = Stages[math.random(1, #Stages)]:Clone()
local Height3 = Floor3:FindFirstChild("Height")
Floor3.PrimaryPart = Floor3:FindFirstChild("Center")
Floor3:SetPrimaryPartCFrame(Floor2.Center.CFrame + Vector3.new(0, Height2.Value, 0))
Floor3:SetPrimaryPartCFrame(Floor3.Center.CFrame * CFrame.Angles(X, Y, Z))
Floor3.Parent = Tower
wait()
Floor4 = Stages[math.random(1, #Stages)]:Clone()
local Height4 = Floor4:FindFirstChild("Height")
Floor4.PrimaryPart = Floor4:FindFirstChild("Center")
Floor4:SetPrimaryPartCFrame(Floor3.Center.CFrame + Vector3.new(0, Height3.Value, 0))
Floor4:SetPrimaryPartCFrame(Floor4.Center.CFrame * CFrame.Angles(X, Y, Z))
Floor4.Parent = Tower
wait()
Floor5 = Stages[math.random(1, #Stages)]:Clone()
local Height5 = Floor5:FindFirstChild("Height")
Floor5.PrimaryPart = Floor5:FindFirstChild("Center")
Floor5:SetPrimaryPartCFrame(Floor4.Center.CFrame + Vector3.new(0, Height4.Value, 0))
Floor5:SetPrimaryPartCFrame(Floor5.Center.CFrame * CFrame.Angles(X, Y, Z))
Floor5.Parent = Tower
wait()
Floor6 = Stages[math.random(1, #Stages)]:Clone()
local Height6 = Floor6:FindFirstChild("Height")
Floor6.PrimaryPart = Floor6:FindFirstChild("Center")
Floor6:SetPrimaryPartCFrame(Floor5.Center.CFrame + Vector3.new(0, Height5.Value, 0))
Floor6:SetPrimaryPartCFrame(Floor6.Center.CFrame * CFrame.Angles(X, Y, Z))
Floor6.Parent = Tower
wait()
Floor7 = Stages[math.random(1, #Stages)]:Clone()
local Height7 = Floor7:FindFirstChild("Height")
Floor7.PrimaryPart = Floor7:FindFirstChild("Center")
Floor7:SetPrimaryPartCFrame(Floor6.Center.CFrame + Vector3.new(0, Height6.Value, 0))
Floor7:SetPrimaryPartCFrame(Floor7.Center.CFrame * CFrame.Angles(X, Y, Z))
Floor7.Parent = Tower
wait()
Floor8 = Stages[math.random(1, #Stages)]:Clone()
Floor8.PrimaryPart = Floor8:FindFirstChild("Center")
Floor8:SetPrimaryPartCFrame(Floor7.Center.CFrame + Vector3.new(0, Height7.Value, 0))
Floor8:SetPrimaryPartCFrame(Floor8.Center.CFrame * CFrame.Angles(X, Y, Z))
Floor8.Parent = Tower
debounce = false
end