# Problem with random room generation

RRG script

``````local Rooms = workspace.Rooms
local previousRoom = workspace.StartRoom
local Axis
local OppositePointPosition
local PointPosition
local ChosenRoom

local GAxis

local Possible

local MaxGenerations = 50
local Generated = 0

local AvailableRooms = {}

for _,room in pairs(Rooms:GetChildren()) do
table.insert(AvailableRooms, room)
end

while wait(15) do
if Generated >= MaxGenerations then
print("Exceded generations")
break
else

GAxis = math.random(1,4)
if GAxis == 1 then
Axis = "North"
if previousRoom:WaitForChild("CheckValues"):WaitForChild("North").Value ~= true then
local X = ((previousRoom:GetExtentsSize().X/2)+previousRoom:GetPrimaryPartCFrame().X)-1
local Y = previousRoom:GetPrimaryPartCFrame().Y
local Z = previousRoom:GetPrimaryPartCFrame().Z
PointPosition = Vector3.new(X,Y,Z)
Possible = true
else
Possible = false
end
elseif GAxis == 2 then
Axis = "South"
if previousRoom:WaitForChild("CheckValues"):WaitForChild("South").Value ~= true then
local X = (((previousRoom:GetExtentsSize().X/2)-previousRoom:GetPrimaryPartCFrame().X)*(-1))+1
local Y = previousRoom:GetPrimaryPartCFrame().Y
local Z = previousRoom:GetPrimaryPartCFrame().Z
PointPosition = Vector3.new(X,Y,Z)
Possible = true
else
Possible = false
end
elseif GAxis == 3 then
Axis = "East"
if previousRoom:WaitForChild("CheckValues"):WaitForChild("East").Value ~= true then
local X = previousRoom:GetPrimaryPartCFrame().X
local Y = previousRoom:GetPrimaryPartCFrame().Y
local Z = (((previousRoom:GetExtentsSize().Z/2)-previousRoom:GetPrimaryPartCFrame().Z)*(-1))+1
PointPosition = Vector3.new(X,Y,Z)
Possible = true
else
Possible = false
end
elseif GAxis == 4 then
Axis = "West"
if previousRoom:WaitForChild("CheckValues"):WaitForChild("West").Value ~= true then
local X = previousRoom:GetPrimaryPartCFrame().X
local Y = previousRoom:GetPrimaryPartCFrame().Y
local Z = ((previousRoom:GetExtentsSize().Z/2)+previousRoom:GetPrimaryPartCFrame().Z)-1
PointPosition = Vector3.new(X,Y,Z)
Possible = true
else
Possible = false
end
end

if Possible then

local GChosenRoom = math.random(1,#Rooms:GetChildren())
ChosenRoom = AvailableRooms[GChosenRoom]:Clone()

if Axis == "North" then
local X = (((ChosenRoom:GetExtentsSize().X/2)-ChosenRoom:GetPrimaryPartCFrame().X)*(-1))+1
local Y = ChosenRoom:GetPrimaryPartCFrame().Y
local Z = ChosenRoom:GetPrimaryPartCFrame().Z
OppositePointPosition = Vector3.new(X,Y,Z)
elseif Axis == "South" then
local X = ((ChosenRoom:GetExtentsSize().X/2)+ChosenRoom:GetPrimaryPartCFrame().X)-1
local Y = ChosenRoom:GetPrimaryPartCFrame().Y
local Z = ChosenRoom:GetPrimaryPartCFrame().Z
OppositePointPosition = Vector3.new(X,Y,Z)
elseif Axis == "East" then
local X = ChosenRoom:GetPrimaryPartCFrame().X
local Y = ChosenRoom:GetPrimaryPartCFrame().Y
local Z = ((ChosenRoom:GetExtentsSize().Z/2)+ChosenRoom:GetPrimaryPartCFrame().Z)-1
OppositePointPosition = Vector3.new(X,Y,Z)
elseif Axis == "West" then
local X = ChosenRoom:GetPrimaryPartCFrame().X
local Y = ChosenRoom:GetPrimaryPartCFrame().Y
local Z = (((ChosenRoom:GetExtentsSize().Z/2)-ChosenRoom:GetPrimaryPartCFrame().Z)*(-1))+1
OppositePointPosition = Vector3.new(X,Y,Z)
end

ChosenRoom.Parent = workspace
ChosenRoom.Name = "CRoom"

ChosenRoom:WaitForChild("PrimaryPart").Position = OppositePointPosition

ChosenRoom:SetPrimaryPartCFrame(CFrame.new(PointPosition))

ChosenRoom:WaitForChild("PrimaryPart").Position = ChosenRoom:WaitForChild("Reset").Position

previousRoom = ChosenRoom
Generated += 1

else
print("Overlapping", GAxis, Axis)
end

for _,room in pairs(workspace:GetChildren()) do
if room.Name == "CRoom" or room.Name == "StartRoom" then
for _,checkBlock in pairs(room:WaitForChild("CheckBlocks"):GetChildren()) do
for i,v in pairs(workspace:GetPartsInPart(checkBlock)) do
if v ~= nil then
for _,checkValue in pairs(room:WaitForChild("CheckValues"):GetChildren()) do
if checkValue.Name == checkBlock.Name then
checkValue.Value = true
end
end
end

end
end
end
end
end
end
``````

Problem:

I also observed that overlapping happens only in the south and north, the first check works, on the second check, it brakes