private static void CreateOrAttachToExistingRooms2(RegionAndRoomUpdater __instance, int numRegionGroups) { for (int i = 0; i < numRegionGroups; i++) { currentRegionGroup(__instance).Clear(); for (int j = 0; j < newRegions(__instance).Count; j++) { if (newRegions(__instance)[j].newRegionGroupIndex == i) { currentRegionGroup(__instance).Add(newRegions(__instance)[j]); } } if (!currentRegionGroup(__instance)[0].type.AllowsMultipleRegionsPerRoom()) { if (currentRegionGroup(__instance).Count != 1) { Log.Error("Region type doesn't allow multiple regions per room but there are >1 regions in this group."); } Room room = Room.MakeNew(map(__instance)); currentRegionGroup(__instance)[0].Room = room; newRooms(__instance).Add(room); continue; } bool multipleOldNeighborRooms; Room room2 = FindCurrentRegionGroupNeighborWithMostRegions2(__instance, out multipleOldNeighborRooms); if (room2 == null) { Room item = RegionTraverser.FloodAndSetRooms(currentRegionGroup(__instance)[0], map(__instance), null); newRooms(__instance).Add(item); } else if (!multipleOldNeighborRooms) { for (int k = 0; k < currentRegionGroup(__instance).Count; k++) { currentRegionGroup(__instance)[k].Room = room2; } reusedOldRooms(__instance).Add(room2); } else { RegionTraverser.FloodAndSetRooms(currentRegionGroup(__instance)[0], map(__instance), room2); reusedOldRooms(__instance).Add(room2); } } }