refactor(spawners): replace DynamicJson with typed SpawnerDto records (#2505)

## Summary

Removes the dated `DynamicJson` JSON helper and migrates spawner JSON (de)serialization to a polymorphic `record SpawnerDto` hierarchy. `DynamicJson` was the last remaining consumer (regions moved off it in #1400).

The key correctness improvement: **System.Text.Json deserializes plain DTO records, never a live `Item`.** Previously, deserializing directly into an `Item` meant STJ constructed world-registered objects *before* the data was validated — a malformed/hand-edited spawn file could leave orphaned spawner Items in the world save. Now a parse failure is GC-only; `dto.ToSpawner()` constructs the spawner only from a fully-validated DTO and self-cleans on failure.

## What changed

- **New:** `SpawnerDto` (abstract) + `SpawnerDataDto` / `RegionSpawnerDto` / `ProximitySpawnerDto`, each marked with a reusable `[JsonDiscoverableType]` opt-in attribute. Auto-discovered at the `Configure` phase — no manual registration list (avoids the regions `Register<T>()` footgun), open to custom spawner subtypes.
- **Symmetric mapping:** `BaseSpawner.ToDto()` (export) ⇄ `SpawnerDto.ToSpawner()` (import). `ToSpawner()` deletes-and-rethrows on any failure, so the importer can never orphan an Item.
- **`SpawnerJsonSerializer`** wires `$type` polymorphism on the `SpawnerDto` root with loud collision/constructibility validation.
- **Import/export commands** rewired to the typed DTO path (reflection `FindTypeByName`/`CreateInstance` removed).
- **Data migration:** the 109 `Distribution/Data/Spawns/**` files moved from `"type"`→`"$type"` and legacy `homeRange`→`spawnBounds`. The runtime still *reads* legacy `homeRange` for external files. The `homeRange→spawnBounds` formula is proven equivalent to the runtime conversion (`BoundsEquivalenceTests`, hr=0/1/3/7).
- **Deleted:** `Projects/Server/Json/DynamicJson.cs`.

Sparse export output matches the legacy `ToJson` (nullable DTO properties + `WhenWritingNull`). Binary world-save serialization is untouched.

## Tests

- DTO round-trip per spawner type; sparse-default omission; legacy `homeRange` read; export/import file round-trip.
- `Import_MalformedFile_LeaksNoWorldItems` — proves a mid-array parse failure constructs zero world Items.
- `AllSpawnFilesLoadTests` — every migrated spawn file deserializes and builds.
- Duplicate-discriminator validation.
- UOContent.Tests 485/485, Server.Tests 710/710, build clean.

## Follow-up (not in this PR)

`Rectangle3DConverter.Write` (in `Projects/Server/`) omits `z1/z2` when `Start.Z == -128`, so a future server-side export of a `homeRange`-style spawner round-trips depth 256→255. Pre-existing and out of scope here (Server change); the migrated data reads correctly. Worth a separate small converter PR.
This commit is contained in:
Kamron Batman 2026-06-25 23:24:45 -07:00 • committed by GitHub
parent a26219c837
commit d8a64f3316
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
135 changed files with 7654 additions and 6079 deletions

View file

@ -1,6 +1,6 @@
[
[
{
"type": "Spawner",
"$type": "Spawner",
"guid": "005c0fd4-1893-489e-9a09-14c53b246567",
"name": "Spawner (501)",
"location": [96, 540, -1],
@ -17,7 +17,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "016a082b-0696-40c3-815b-c3dbef373d50",
"name": "Spawner (501)",
"location": [173, 615, -1],
@ -36,7 +36,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "06d87817-7b93-45c4-9696-35c26ca4218d",
"name": "Spawner (501)",
"location": [120, 415, -1],
@ -53,7 +53,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "12d3edf5-87f3-4fb4-9ca5-8462b94a81d8",
"name": "Spawner (501)",
"location": [134, 651, -1],
@ -71,7 +71,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "183ea3fc-7ed8-4f54-bd05-513be50f48d6",
"name": "Spawner (501)",
"location": [79, 521, -1],
@ -87,7 +87,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "1a384aa9-3d4c-4df7-82df-58e658f4bf5f",
"name": "Spawner (501)",
"location": [147, 646, -1],
@ -104,7 +104,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "24b2ba02-2289-4cb3-a957-e3ec7629c0b1",
"name": "Spawner (501)",
"location": [64, 488, -1],
@ -122,7 +122,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "42b06210-4cd3-49d6-a5d1-74e5ab0cc77a",
"name": "Spawner (501)",
"location": [977, 218, 23],
@ -138,7 +138,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "47256f4f-b709-4c19-866b-2d7bdd896fd6",
"name": "Spawner (501)",
"location": [78, 546, -1],
@ -156,7 +156,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "477ff85e-e7ac-4a85-a99f-75d1b3e9eb74",
"name": "Spawner (501)",
"location": [110, 649, -1],
@ -174,7 +174,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "4849d20d-77fc-4f0d-a513-a352a5849467",
"name": "Spawner (501)",
"location": [123, 387, -1],
@ -190,7 +190,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "624d9055-be69-4b42-9aa8-f8876a6c3cbf",
"name": "Spawner (501)",
"location": [88, 332, -1],
@ -206,7 +206,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "66d98c69-5788-471a-b93c-d82e252471b2",
"name": "Spawner (501)",
"location": [110, 540, -1],
@ -224,7 +224,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "752b7dfa-4f8c-4bb6-875e-2f18385881b5",
"name": "Spawner (501)",
"location": [111, 352, -1],
@ -241,7 +241,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "9a661087-c1ec-4503-9451-8873a8c24bd9",
"name": "Spawner (501)",
"location": [175, 660, -1],
@ -259,7 +259,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a4392a5c-8729-40c2-bd31-4b145cba2f1a",
"name": "Spawner (501)",
"location": [106, 685, -1],
@ -276,7 +276,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "bd077bc0-b36c-41b4-9e4c-e3f067d6846e",
"name": "Spawner (501)",
"location": [99, 387, -1],
@ -292,7 +292,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "cdd374da-1e88-4389-ac42-a6c63ba30d0b",
"name": "Spawner (501)",
"location": [97, 467, -1],
@ -310,7 +310,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "e3fd2f65-4f1e-4af5-8cab-26493d9c5350",
"name": "Spawner (501)",
"location": [142, 692, -1],
@ -326,7 +326,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f093fd90-d7b6-48a7-b5f3-c2524f4ca2ca",
"name": "Spawner (501)",
"location": [100, 499, -1],
@ -343,7 +343,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f3743807-ec35-485a-82b5-f3cd3ba27bc0",
"name": "Spawner (501)",
"location": [70, 376, -1],

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
[
[
{
"type": "Spawner",
"$type": "Spawner",
"guid": "03f1632a-1fc5-4132-92a7-288b4baf9ae9",
"name": "Spawner (503)",
"location": [744, 1347, 25],
@ -19,7 +19,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "217af4ba-df3f-4134-b360-8f8f921e8a01",
"name": "Spawner (503)",
"location": [721, 1274, 25],
@ -38,7 +38,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "366108fc-b366-4620-b8bb-4d04014d40b7",
"name": "Spawner (503)",
"location": [625, 1317, 25],
@ -56,7 +56,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "3cc46920-b82d-4c3b-b622-611f7b416b66",
"name": "Spawner (503)",
"location": [803, 1338, 25],
@ -73,7 +73,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "3eced8bf-e4d6-484b-ae5f-6519e827a787",
"name": "Spawner (503)",
"location": [679, 1224, 25],
@ -89,7 +89,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "40d3a681-f9b5-4866-b6c2-93aa8d211660",
"name": "Spawner (503)",
"location": [834, 1351, 25],
@ -105,7 +105,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "40d40ab7-a774-4443-8225-790b81878d3a",
"name": "Spawner (503)",
"location": [768, 1192, 25],
@ -124,7 +124,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "42f392a2-faec-48fe-b8fa-44c394ce4f31",
"name": "Spawner (503)",
"location": [844, 1318, 25],
@ -144,7 +144,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "4400a7f9-33b7-4f12-993e-6370e8422577",
"name": "Spawner (503)",
"location": [812, 1222, 25],
@ -162,7 +162,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "59135bf6-67a7-42db-ae76-2d9d53ee8d6b",
"name": "Spawner (503)",
"location": [628, 1310, 25],
@ -178,7 +178,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "5a5e3558-be1a-49cc-a5cc-201c160e6c7b",
"name": "Spawner (503)",
"location": [711, 1322, 25],
@ -197,7 +197,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "63828858-74cb-4daa-a2e3-d79928cd539d",
"name": "Spawner (503)",
"location": [630, 1225, 25],
@ -215,7 +215,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "660e512a-833e-42d2-b13d-8d9aee2b8e68",
"name": "Spawner (503)",
"location": [667, 1343, 25],
@ -231,7 +231,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "787cabab-33ea-4938-a32d-5f3443af22c4",
"name": "Spawner (503)",
"location": [712, 1238, 25],
@ -247,7 +247,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "7c22ce54-d85a-48c0-8388-25f26d1c7904",
"name": "Spawner (503)",
"location": [756, 1236, 25],
@ -266,7 +266,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "8065872f-41df-44a9-b382-d5d16e9f31da",
"name": "Spawner (503)",
"location": [683, 1231, 25],
@ -282,7 +282,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "8ca277a3-a47d-4c33-8470-60d67d1fb2c7",
"name": "Spawner (503)",
"location": [628, 1272, 25],
@ -300,7 +300,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "962520ff-e7ec-4187-b385-5550af5428cb",
"name": "Spawner (503)",
"location": [844, 1198, 25],
@ -320,7 +320,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "9780bf47-bc15-4bdd-8dc6-0a5ec2abddea",
"name": "Spawner (503)",
"location": [740, 1284, 25],
@ -336,7 +336,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "9bf1fbe7-640a-44fe-89c5-b8771032d64b",
"name": "Spawner (503)",
"location": [807, 1287, 25],
@ -355,7 +355,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "ae3ea0e1-e260-4f24-a0f2-7a617cbe7bbe",
"name": "Spawner (503)",
"location": [713, 1351, 25],
@ -364,7 +364,10 @@
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": { "start": { "x": 693, "y": 1331, "z": -128 }, "end": { "x": 733, "y": 1371, "z": 40 } },
"spawnBounds": {
"start": { "x": 693, "y": 1331, "z": -128 },
"end": { "x": 733, "y": 1371, "z": 40 }
},
"walkingRange": 20,
"entries": [
{ "name": "Crane", "maxCount": 2, "probability": 100 },
@ -372,7 +375,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "c7bce2da-6a6c-4d0f-9c79-70c5a2895962",
"name": "Spawner (503)",
"location": [853, 1287, 25],
@ -391,7 +394,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "cb8699ff-ca4c-44b1-9dd8-422e6e31fbbf",
"name": "Spawner (503)",
"location": [636, 1331, 25],
@ -409,7 +412,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "d9dd4287-6d11-4e50-b4b1-834c431ee60b",
"name": "Spawner (503)",
"location": [710, 1350, 25],
@ -418,14 +421,17 @@
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": { "start": { "x": 690, "y": 1330, "z": -128 }, "end": { "x": 730, "y": 1370, "z": 40 } },
"spawnBounds": {
"start": { "x": 690, "y": 1330, "z": -128 },
"end": { "x": 730, "y": 1370, "z": 40 }
},
"walkingRange": 20,
"entries": [
{ "name": "Bird", "maxCount": 4, "probability": 100 }
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "dbffb36b-2e05-4968-96f6-c8f53ddeb50a",
"name": "Spawner (503)",
"location": [706, 1208, 25],
@ -441,7 +447,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "df568bbb-9e8c-4594-a32b-85dd93540f10",
"name": "Spawner (503)",
"location": [770, 1344, 25],
@ -460,7 +466,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "e828c6c6-2867-4d26-a77a-ab581c4a7dcc",
"name": "Spawner (503)",
"location": [843, 1247, 25],
@ -477,7 +483,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f3688f98-8e8b-4100-8952-4f90020ab8ae",
"name": "Spawner (503)",
"location": [857, 1166, 25],
@ -496,7 +502,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f4d88eea-fd00-4029-bf05-960a4a03a082",
"name": "Spawner (503)",
"location": [690, 1288, 25],

View file

@ -1,6 +1,6 @@
[
[
{
"type": "Spawner",
"$type": "Spawner",
"guid": "03112703-010a-4495-90de-3dceafabf6bb",
"name": "Spawner (504)",
"location": [502, 589, 24],
@ -16,7 +16,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "0360875a-9408-4f4a-a42c-200f359baccb",
"name": "Spawner (504)",
"location": [756, 1302, 25],
@ -32,7 +32,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "1159a610-a01a-4cac-841f-ca37fcf2ab21",
"name": "Spawner (504)",
"location": [1177, 985, 38],
@ -48,7 +48,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "117e79c9-e92c-4094-89af-ceef02b6d875",
"name": "Spawner (504)",
"location": [724, 1297, 25],
@ -64,7 +64,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "11f9b7fa-b1ea-4a93-848a-5339c852afa5",
"name": "Spawner (504)",
"location": [695, 1297, 25],
@ -80,7 +80,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "1457ebfc-398e-415e-b091-20427af4fb70",
"name": "Spawner (504)",
"location": [691, 1264, 47],
@ -96,7 +96,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "152e7156-8c9c-4aae-a560-7972868cbc57",
"name": "Spawner (504)",
"location": [789, 1278, 25],
@ -112,7 +112,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "15590b9b-8815-4906-8e9e-d08a54b6a2f1",
"name": "Spawner (504)",
"location": [773, 1248, 26],
@ -128,7 +128,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "16523597-999a-4504-aa59-7b01c881978d",
"name": "Spawner (504)",
"location": [689, 1255, 25],
@ -144,7 +144,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "1990cbea-3f71-44da-aec2-0af4e07e3618",
"name": "Spawner (504)",
"location": [702, 1298, 25],
@ -160,7 +160,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "1b386724-c26f-4714-80b3-edaaa46b3ab4",
"name": "Spawner (504)",
"location": [683, 1298, 25],
@ -176,7 +176,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "1bef801b-5ac8-4cde-a3bd-71fff904d997",
"name": "Spawner (504)",
"location": [679, 1207, 25],
@ -192,7 +192,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "1f9e3288-f988-4ea3-95e8-251aa38d064c",
"name": "Spawner (504)",
"location": [692, 1213, 25],
@ -208,7 +208,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "21467215-aae1-4e1c-bf72-1137b91b71eb",
"name": "Spawner (504)",
"location": [730, 1282, 25],
@ -224,7 +224,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "294130b1-fd5a-4cef-9c68-a5491f5e59c6",
"name": "Spawner (504)",
"location": [226, 786, 57],
@ -240,7 +240,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "30f1eaf5-633e-494a-aadb-2997f3e8d0a4",
"name": "Spawner (504)",
"location": [735, 1256, 30],
@ -260,7 +260,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "33f10364-0097-42d5-95b1-c3f73750fda0",
"name": "Spawner (504)",
"location": [720, 1213, 45],
@ -276,7 +276,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "3df1960a-2e81-4997-ab85-3f1062065c7d",
"name": "Spawner (504)",
"location": [763, 247, 71],
@ -292,7 +292,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "448a5e8c-0682-488b-ba85-4a457ed8329c",
"name": "Spawner (504)",
"location": [742, 1304, 25],
@ -308,7 +308,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "4830fbdc-9c83-4e22-af7a-cd868807eb9c",
"name": "Spawner (504)",
"location": [297, 637, 15],
@ -324,7 +324,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "57f4d4ba-3841-4d12-bec6-37b059c49840",
"name": "Spawner (504)",
"location": [248, 1089, 10],
@ -340,7 +340,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "5ada367e-0bcb-487e-9e44-ef259bfec2c7",
"name": "Spawner (504)",
"location": [781, 1219, 25],
@ -356,7 +356,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "67fe5dc9-67d2-4e5f-afab-03691f497fed",
"name": "Spawner (504)",
"location": [661, 1209, 25],
@ -372,7 +372,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "698d030e-cf3f-40fd-be6e-4a92866dbfb1",
"name": "Spawner (504)",
"location": [668, 1254, 25],
@ -388,7 +388,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "7dad1cc2-dfab-490e-915f-8d00ed39f14c",
"name": "Spawner (504)",
"location": [749, 1303, 25],
@ -405,7 +405,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "80122c8e-85c4-41a7-a347-d8c0074e6031",
"name": "Spawner (504)",
"location": [371, 431, 32],
@ -421,7 +421,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "840e2e09-7a7e-43cc-a5d0-a5be3d4e00d6",
"name": "Spawner (504)",
"location": [669, 1266, 47],
@ -437,7 +437,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "876d5b73-9f59-4446-8144-dd997bf93916",
"name": "Spawner (504)",
"location": [1152, 936, 65],
@ -453,7 +453,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "8c714386-6b61-4f4e-9eec-f75cd78010a6",
"name": "Spawner (504)",
"location": [732, 1256, 30],
@ -469,7 +469,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "901b6857-11f1-4c9f-bb1f-1399406dc3b6",
"name": "Spawner (504)",
"location": [399, 549, 15],
@ -485,7 +485,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "95447e64-a9d3-45ca-81c7-318441ca97d4",
"name": "Spawner (504)",
"location": [1111, 495, 18],
@ -501,7 +501,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "97d04faf-bf2f-4085-bdb9-2a6538c4a97a",
"name": "Spawner (504)",
"location": [720, 1211, 25],
@ -517,7 +517,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a4b62432-203b-4b3e-894c-651e62d68567",
"name": "Spawner (504)",
"location": [739, 1223, 45],
@ -533,7 +533,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "af820fc2-57d8-4b19-9a54-9bb57f9736cb",
"name": "Spawner (504)",
"location": [1221, 494, 27],
@ -549,7 +549,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "b4b940cb-17ef-4234-842c-2bdcbd7827f0",
"name": "Spawner (504)",
"location": [779, 1259, 26],
@ -565,7 +565,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "b5b2efe1-d96b-4d37-ac13-ec6251ad23f9",
"name": "Spawner (504)",
"location": [895, 519, 53],
@ -581,7 +581,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "b65649fc-1b3a-4124-b063-0f0e7b35d3d2",
"name": "Spawner (504)",
"location": [979, 238, 21],
@ -597,7 +597,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "bdc0117b-2e5b-458b-90ca-0f3bfa5489e8",
"name": "Spawner (504)",
"location": [703, 1262, 25],
@ -615,7 +615,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "cfc1714e-8851-4cf8-a9a5-bb1d4d9236b0",
"name": "Spawner (504)",
"location": [558, 534, 32],
@ -631,7 +631,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "d001030a-99d7-4146-83f9-b5e1aff453b0",
"name": "Spawner (504)",
"location": [729, 1249, 25],
@ -647,7 +647,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "d64f79d1-bb69-4aab-8099-04cc92244b60",
"name": "Spawner (504)",
"location": [806, 1308, 25],
@ -663,7 +663,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "dc6b9648-9165-491e-87b2-f5950d8e38ad",
"name": "Spawner (504)",
"location": [744, 1210, 25],
@ -679,7 +679,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "e081b4f9-5c48-4808-82e7-f8bb95309a19",
"name": "Spawner (504)",
"location": [744, 1219, 25],
@ -695,7 +695,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f44766ae-31e3-46fa-94ce-869a53621012",
"name": "Spawner (504)",
"location": [662, 1210, 25],
@ -711,7 +711,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f50b6789-7be4-43f0-a1be-c53e85a6997b",
"name": "Spawner (504)",
"location": [675, 1265, 25],
@ -727,7 +727,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f6481ae3-b345-40ab-aaa2-2eea59aee211",
"name": "Spawner (504)",
"location": [781, 1301, 26],
@ -743,7 +743,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "fb70140d-b0d9-41c7-9975-c8136c4ee686",
"name": "Spawner (504)",
"location": [1166, 802, 27],

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
[
[
{
"type": "Spawner",
"$type": "Spawner",
"guid": "115246e3-d444-4ad4-ad93-ba5f98ade944",
"name": "Spawner (506)",
"location": [71, 29, -1],
@ -19,7 +19,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "6561df12-d971-4504-9a84-fba65d6e3339",
"name": "Spawner (506)",
"location": [111, 20, -1],
@ -38,7 +38,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "694ea01f-680b-4054-9f13-bf9e7317a6d8",
"name": "Spawner (506)",
"location": [107, 23, -1],
@ -54,7 +54,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "922f0ff6-6efc-4787-aab1-32b8c41831ab",
"name": "Spawner (506)",
"location": [54, 67, -1],
@ -73,7 +73,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "9cbd85a7-68f8-401d-a8c3-b2a220b2e431",
"name": "Spawner (506)",
"location": [16, 56, -1],
@ -92,7 +92,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a0525c92-565a-4b15-b6b0-61c6be263ae7",
"name": "Spawner (506)",
"location": [102, 84, -1],
@ -111,7 +111,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "ba3f54b0-b977-476e-be97-2ad5ba39dc19",
"name": "Spawner (506)",
"location": [83, 114, -1],
@ -130,7 +130,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "dc1fe934-3641-4ddd-8b6c-207ccf0861ef",
"name": "Spawner (506)",
"location": [116, 61, -1],
@ -149,7 +149,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "ee2e7f73-a95f-40e6-8493-80dbe4c2ea65",
"name": "Spawner (506)",
"location": [25, 19, -1],