47 lines
1.5 KiB
Markdown
47 lines
1.5 KiB
Markdown
# Importing rooms
|
|
|
|
Drop a JSON file here and import it from the admin panel
|
|
(`POST /admin/api/import_rooms`, form field `file` = the filename).
|
|
|
|
## What the file must look like
|
|
|
|
The same shape the room API returns — a `Results` array of full room objects, each with
|
|
its `SubRooms`, and each subroom with its `AllSaves`:
|
|
|
|
```json
|
|
{
|
|
"Results": [
|
|
{
|
|
"RoomId": 12345,
|
|
"Name": "SomeRoom",
|
|
"CreatorAccountId": 1,
|
|
"SubRooms": [
|
|
{
|
|
"SubRoomId": 1,
|
|
"Name": "Home",
|
|
"AllSaves": [
|
|
{ "SubRoomDataSaveId": 1, "DataBlob": "ABC....room", "PersistenceVersion": 227 }
|
|
]
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
`RoomId` and `SubRoomId` are reassigned on import — the server allocates its own ids, so
|
|
they cannot collide with rooms already here. A room whose `Name` already exists is skipped.
|
|
|
|
## The blobs are a separate step
|
|
|
|
Importing brings in the room, its subrooms and each save's `DataBlob` **filename** — not the
|
|
file. Until the matching `.room` file exists in `Data/CDN/RoomBlobs`, `FilterUnservableSaves`
|
|
hides that save and the room loads its base Unity scene instead of the saved build. That is
|
|
deliberate: a room that loads plain beats a room that will not load at all.
|
|
|
|
The import response lists every blob still missing (`blobsMissing`). Put those files in
|
|
`Data/CDN/RoomBlobs` under exactly the filename in the save, and the room starts loading its
|
|
build with no code change and no restart.
|
|
|
|
A zero-byte blob counts as missing.
|