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": "8c2124f4-e175-4198-8cf8-9cf64804fc22",
"name": "Spawner (408)",
"location": [98, 1656, 0],
@ -24,7 +24,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "eaa69fa3-4076-4fc5-950a-fe175713bbd3",
"name": "Spawner (408)",
"location": [104, 1655, 0],

View file

@ -1,6 +1,6 @@
[
[
{
"type": "Spawner",
"$type": "Spawner",
"guid": "114d80f2-07e6-49e3-9418-6e7c30291028",
"name": "Spawner (406)",
"location": [142, 1921, 0],
@ -16,7 +16,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "15b169f9-fe9e-4ef7-973b-cb0619b9937d",
"name": "Spawner (406)",
"location": [82, 1875, 0],
@ -33,7 +33,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "17abd9d2-3b7a-44ec-a724-57c202236788",
"name": "Spawner (406)",
"location": [179, 1869, 0],
@ -50,7 +50,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "28535caf-b979-4745-8a87-e62691d7cb11",
"name": "Spawner (406)",
"location": [145, 1898, 0],
@ -68,7 +68,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "2d629e57-63db-4610-b6d2-cf3bfd34f0b0",
"name": "Spawner (406)",
"location": [181, 1883, 0],
@ -87,7 +87,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "347e85d2-c752-4abf-86c7-bda2a2051033",
"name": "Spawner (406)",
"location": [183, 1961, 0],
@ -104,7 +104,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "364cc553-16d0-428d-bf97-061c3ddfd120",
"name": "Spawner (406)",
"location": [170, 1974, 0],
@ -121,7 +121,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "435ce67b-aad4-4ed0-b621-73ab4b6b0042",
"name": "Spawner (406)",
"location": [81, 1892, 0],
@ -139,7 +139,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "4854c18d-7bf2-4f8c-a69f-7679204b6d7d",
"name": "Spawner (406)",
"location": [155, 1869, 0],
@ -156,7 +156,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "50c87975-6021-46cb-bbe1-58c45ba776b7",
"name": "Spawner (406)",
"location": [77, 1883, 0],
@ -173,7 +173,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "856c181e-183a-4231-acc8-5146301c56c6",
"name": "Spawner (406)",
"location": [185, 1920, 0],
@ -189,7 +189,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "9f02ef97-7699-4a65-8cd6-615aa50cc318",
"name": "Spawner (406)",
"location": [139, 1868, 0],
@ -209,7 +209,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "b5fed5a1-35db-4f09-b4b6-8017146a8bf3",
"name": "Spawner (406)",
"location": [174, 1900, 0],
@ -227,7 +227,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "dccae74d-bafa-40ff-9984-7a2a0af5d8de",
"name": "Spawner (406)",
"location": [140, 1974, 0],
@ -244,7 +244,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "fb6ee275-c5c2-4780-9180-76e3a4ac1a97",
"name": "Spawner (406)",
"location": [134, 1947, 0],

View file

@ -1,6 +1,6 @@
[
[
{
"type": "Spawner",
"$type": "Spawner",
"guid": "0bb98d0c-0614-431b-a6ce-c30718f447c8",
"name": "Spawner (401)",
"location": [447, 25, -1],
@ -16,7 +16,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "0e708303-8a2d-4207-bdc3-d7f732e04efe",
"name": "Spawner (401)",
"location": [496, 75, 0],
@ -32,7 +32,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "1210b304-4b1a-47be-a503-9f490764d069",
"name": "Spawner (401)",
"location": [287, 81, -1],
@ -48,7 +48,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "13e0051b-bff0-4826-9e89-73ea9ec64e7a",
"name": "Spawner (401)",
"location": [320, 207, -1],
@ -64,7 +64,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "182c0603-13fa-414f-849c-dcbde31a739a",
"name": "Spawner (401)",
"location": [479, 168, -1],
@ -81,7 +81,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "20977621-9e81-4c25-b802-19fa12fc3633",
"name": "Spawner (401)",
"location": [323, 90, -1],
@ -98,7 +98,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "218aaa26-c02b-4605-8c79-c9879523ea0b",
"name": "Spawner (401)",
"location": [356, 40, -1],
@ -115,7 +115,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "298afdb1-74fb-4668-9bc2-5f625a61caed",
"name": "Spawner (401)",
"location": [478, 206, -1],
@ -131,7 +131,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "2a98c34c-cb3d-4d28-8c12-1a3cf7cc58ad",
"name": "Spawner (401)",
"location": [330, 136, 0],
@ -147,7 +147,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "2be25342-c032-406a-af47-8eb5994c0875",
"name": "Spawner (401)",
"location": [427, 256, -1],
@ -163,7 +163,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "32a2e0d8-8246-42ff-8e13-c15b51a9f73f",
"name": "Spawner (401)",
"location": [470, 30, -2],
@ -180,7 +180,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "42bbf95d-6b39-4df6-a4f4-7a8d385b49ef",
"name": "Spawner (401)",
"location": [442, 205, -1],
@ -196,7 +196,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "48538f93-9afa-44c9-baab-b1c3612bdde5",
"name": "Spawner (401)",
"location": [356, 234, -1],
@ -212,7 +212,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "5110399b-8443-448e-a68c-f59ac2303716",
"name": "Spawner (401)",
"location": [441, 78, -1],
@ -229,7 +229,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "55898d74-f2cf-4c30-953e-e5f3d9a3b5bf",
"name": "Spawner (401)",
"location": [278, 233, 0],
@ -246,7 +246,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "59819649-f460-4934-ba36-a89a98aa13f2",
"name": "Spawner (401)",
"location": [320, 114, -1],
@ -262,7 +262,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "59d35721-49b5-4ff9-9c91-fad1b3d4b953",
"name": "Spawner (401)",
"location": [395, 33, -1],
@ -278,7 +278,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "5bc9de9b-c7d7-4152-9fd1-19e57598100e",
"name": "Spawner (401)",
"location": [320, 114, -1],
@ -294,7 +294,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "5c28d40c-81f7-428d-b661-6e272aeabf3d",
"name": "Spawner (401)",
"location": [480, 227, -1],
@ -310,7 +310,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "613d79a6-10e0-4465-9937-142ee7e701b0",
"name": "Spawner (401)",
"location": [289, 154, 5],
@ -326,7 +326,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "646d5241-162f-477e-a05c-17ba7eb95a83",
"name": "Spawner (401)",
"location": [379, 147, -1],
@ -343,7 +343,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "6492e163-beb3-4abc-a674-921cbf5ba5df",
"name": "Spawner (401)",
"location": [356, 234, -1],
@ -359,7 +359,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "693a953a-75cf-43df-9708-b781c8a04439",
"name": "Spawner (401)",
"location": [325, 172, -1],
@ -376,7 +376,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "74182f58-a286-4576-9615-f92bbd4e7b71",
"name": "Spawner (401)",
"location": [378, 236, -1],
@ -392,7 +392,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "92450262-dc59-4666-b8bd-233fa481ddcb",
"name": "Spawner (401)",
"location": [400, 174, -1],
@ -408,7 +408,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "93ce2586-d403-49a2-acbb-034ef0ee797a",
"name": "Spawner (401)",
"location": [278, 233, 0],
@ -424,7 +424,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "968ff190-b606-41f5-8cf0-36e15d3fd7d4",
"name": "Spawner (401)",
"location": [382, 82, -1],
@ -440,7 +440,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "9e641eb9-2f8a-41ae-afb9-24a4b5879a0a",
"name": "Spawner (401)",
"location": [305, 28, 0],
@ -456,7 +456,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a1434ffe-19f2-4076-b1ce-28e59dc9f627",
"name": "Spawner (401)",
"location": [496, 75, 0],
@ -472,7 +472,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a42b1d2c-dcd4-4d43-aada-f5707a5f9e9f",
"name": "Spawner (401)",
"location": [468, 141, -1],
@ -488,7 +488,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a81f4ff2-ee77-4e1f-968d-335a0ecbe7b9",
"name": "Spawner (401)",
"location": [427, 256, -1],
@ -505,7 +505,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "b0f74ae9-9e85-4525-9903-6e69c2f818e4",
"name": "Spawner (401)",
"location": [309, 15, 0],
@ -523,7 +523,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "bbfc66e4-a4fd-486a-960e-5cb7c64c2e72",
"name": "Spawner (401)",
"location": [456, 48, -1],
@ -540,7 +540,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "c2ca4b73-4847-47ab-83de-c3f0abb570a9",
"name": "Spawner (401)",
"location": [493, 202, -1],
@ -556,7 +556,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "c85f6fd0-ad43-4e05-a43e-b49002b7f22c",
"name": "Spawner (401)",
"location": [372, 201, -1],
@ -573,7 +573,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "cf26832d-8e20-4277-8491-91461dd2995e",
"name": "Spawner (401)",
"location": [487, 118, -1],
@ -590,7 +590,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "d03c82ab-0be4-4818-8708-14afba5d8eee",
"name": "Spawner (401)",
"location": [366, 13, -1],
@ -606,7 +606,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "d5daa218-49a1-446c-a871-a7ebc77cacf9",
"name": "Spawner (401)",
"location": [480, 227, -1],
@ -622,7 +622,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "d8a6cfe1-0e71-423a-94e9-4ad92ef8d73d",
"name": "Spawner (401)",
"location": [330, 136, 0],
@ -638,7 +638,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "d99b3aa7-013c-4dd9-8258-ec68e91e6bf5",
"name": "Spawner (401)",
"location": [443, 128, -1],
@ -656,7 +656,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "dcade1a7-1652-4eb7-a550-d9ed7a7449ac",
"name": "Spawner (401)",
"location": [442, 205, -1],
@ -673,7 +673,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "e12bb836-80f3-4ce1-b068-9d2485922b0f",
"name": "Spawner (401)",
"location": [290, 28, 0],
@ -689,7 +689,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "e764f652-de2c-420f-8419-7d29a2d6cd9c",
"name": "Spawner (401)",
"location": [287, 81, -1],
@ -706,7 +706,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f20c08f3-28e9-47a3-b24e-b31370ce2c18",
"name": "Spawner (401)",
"location": [447, 25, -1],
@ -722,7 +722,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f909d2a4-b3bf-4d0c-b07c-f36839c99209",
"name": "Spawner (401)",
"location": [479, 168, -1],
@ -738,7 +738,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f9c8b1af-1ea5-466d-90a1-e956f8c8de31",
"name": "Spawner (401)",
"location": [266, 26, 0],
@ -754,7 +754,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "ff72dd04-bba5-4a6f-8899-d851b4c1fe88",
"name": "Spawner (401)",
"location": [480, 227, -1],

View file

@ -1,6 +1,6 @@
[
[
{
"type": "Spawner",
"$type": "Spawner",
"guid": "0b34e749-7a4e-4dc8-8b84-6d6444d80525",
"name": "Spawner (407)",
"location": [335, 1920, 0],
@ -16,7 +16,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "3ba58850-4bed-4935-8a37-e0c703f3b768",
"name": "Spawner (407)",
"location": [366, 1928, 0],
@ -35,7 +35,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "3d9f4f90-3f61-4dc1-9715-0d614c34c99c",
"name": "Spawner (407)",
"location": [382, 1913, 0],
@ -51,7 +51,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "46f54372-6b9c-4e33-9f35-99fc01204b59",
"name": "Spawner (407)",
"location": [427, 1923, 5],
@ -71,7 +71,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "4a9e68d9-d730-402c-96cc-979f6d08fcfa",
"name": "Spawner (407)",
"location": [357, 1898, 5],
@ -87,7 +87,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "50f241e9-15cf-4561-9a1c-0fe8522d01cd",
"name": "Spawner (407)",
"location": [415, 1897, 5],
@ -103,7 +103,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "613eb20c-bb8e-4f16-8561-bd839851b463",
"name": "Spawner (407)",
"location": [390, 1883, 0],
@ -122,7 +122,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a451b30c-88b8-411d-99b6-3a66cdfd0cd5",
"name": "Spawner (407)",
"location": [355, 1918, 0],
@ -139,7 +139,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "aaca3ab0-5ea8-4af5-ac5f-c037d41b00fa",
"name": "Spawner (407)",
"location": [347, 1888, 5],
@ -158,7 +158,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "af7b61de-563e-4559-9905-d5113f0e7c02",
"name": "Spawner (407)",
"location": [392, 1917, 0],
@ -180,7 +180,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "b8196e8f-9f8f-4362-b188-6bb06dbfea9d",
"name": "Spawner (407)",
"location": [336, 1891, 0],
@ -197,7 +197,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "b9da636f-3e98-4924-a7da-8ac3d0141e5f",
"name": "Spawner (407)",
"location": [1742, 990, -84],
@ -214,7 +214,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "c1e202ec-c6ba-4c76-8a26-29767ae27907",
"name": "Spawner (407)",
"location": [346, 1910, 0],
@ -231,7 +231,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "ebe544f9-9a54-4822-bb37-ee11ba1059db",
"name": "Spawner (407)",
"location": [384, 1932, 10],
@ -248,7 +248,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "eea9dc24-23e1-4198-8dbc-b22bddb5a71c",
"name": "Spawner (407)",
"location": [1740, 990, -80],
@ -264,7 +264,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "ef581668-95b6-4e1b-b43f-06e805e2e646",
"name": "Spawner (407)",
"location": [348, 1948, 0],
@ -284,7 +284,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f5972024-9852-4b8d-96a2-bf1afc05c588",
"name": "Spawner (407)",
"location": [346, 1959, 0],

View file

@ -1,6 +1,6 @@
[
[
{
"type": "Spawner",
"$type": "Spawner",
"guid": "0c628980-8a6f-45e1-bdc8-ed7ea16765fd",
"name": "Spawner (402)",
"location": [2205, 145, -90],
@ -16,7 +16,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "135a20a6-0885-4a61-9a55-a01593f3e874",
"name": "Spawner (402)",
"location": [1482, 347, -50],
@ -37,7 +37,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "2db6869c-b590-4f82-a5eb-edb7afdd18e4",
"name": "Spawner (402)",
"location": [1274, 300, -50],
@ -58,7 +58,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "2efda65d-ebc3-4251-b6a3-356d42cca581",
"name": "Spawner (402)",
"location": [2291, 295, -90],
@ -74,7 +74,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "41a269ac-0492-4a16-bbc3-449c7efa9ef9",
"name": "Spawner (402)",
"location": [2121, 597, -50],
@ -95,7 +95,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "63d80004-20f7-48d8-bcc8-639a8d83c099",
"name": "Spawner (402)",
"location": [766, 114, -90],
@ -116,7 +116,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "67b52f00-d808-4db4-91ca-9313330d0b40",
"name": "Spawner (402)",
"location": [1710, 403, -50],
@ -137,7 +137,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "6ef4d890-5038-4d39-977c-5eb15448543a",
"name": "Spawner (402)",
"location": [1659, 112, -80],
@ -158,7 +158,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a1e3857a-952a-47c2-9311-d6bcc3806c45",
"name": "Spawner (402)",
"location": [1980, 660, -50],
@ -179,7 +179,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a7be1139-619a-4d84-a98a-8ea04c550827",
"name": "Spawner (402)",
"location": [1869, 480, -50],
@ -200,7 +200,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "abaa8a2d-9997-4bff-b033-a9dfa78d46f9",
"name": "Spawner (402)",
"location": [2030, 500, -50],
@ -221,7 +221,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "b48ebb7a-8bfc-4c48-a0ab-f82ca41e38ac",
"name": "Spawner (402)",
"location": [1381, 340, -50],
@ -242,7 +242,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "b85a0fee-612e-4bd9-8489-28fbcdc60ef5",
"name": "Spawner (402)",
"location": [1137, 223, -50],
@ -263,7 +263,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "be2f76e8-a03b-42b9-b39c-c641f03ee091",
"name": "Spawner (402)",
"location": [1206, 191, -50],
@ -284,7 +284,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "dec6f03f-a79d-414a-8b8b-c46af723371a",
"name": "Spawner (402)",
"location": [1587, 386, -50],
@ -305,7 +305,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "e2af6c55-d320-4255-a85f-c694f8d9886b",
"name": "Spawner (402)",
"location": [2233, 555, -90],
@ -326,7 +326,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "e3f940e1-3225-416f-a9ba-717b28fb944a",
"name": "Spawner (402)",
"location": [1023, 192, -50],

View file

@ -1,6 +1,6 @@
[
[
{
"type": "Spawner",
"$type": "Spawner",
"guid": "0cb005f6-2405-41d4-b9b6-9ad8c75a6851",
"name": "Spawner (403)",
"location": [1372, 1225, -90],
@ -20,7 +20,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "2abcbbd3-3842-46f6-95f1-41b743bb7083",
"name": "Spawner (403)",
"location": [1364, 596, -86],
@ -38,7 +38,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "415080ef-9b67-4529-8651-f82d4e0fba5c",
"name": "Spawner (403)",
"location": [1205, 700, -88],
@ -56,7 +56,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "778c0ad2-e39e-4c61-9b1c-e45b6a9b554e",
"name": "Spawner (403)",
"location": [1257, 1326, -90],
@ -74,7 +74,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "9a42ced3-e2d2-4d65-bb78-3903a4092c9f",
"name": "Spawner (403)",
"location": [1343, 1196, -90],
@ -90,7 +90,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "b187d6bd-fe00-43c8-906d-f18ee330f432",
"name": "Spawner (403)",
"location": [911, 194, -79],
@ -108,7 +108,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "c4a2ba68-4d62-480c-a9a9-b893f56a1a5d",
"name": "Spawner (403)",
"location": [1598, 1819, -110],
@ -126,7 +126,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "c93264b1-19bd-47d9-ae8d-261e8d36fc30",
"name": "Spawner (403)",
"location": [1665, 356, -50],
@ -144,7 +144,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "ea44d8fe-27b9-4650-9c22-fed0630e5cc3",
"name": "Spawner (403)",
"location": [1322, 1225, -90],
@ -164,7 +164,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f4837b68-40f5-42db-b907-f4fe65248cf9",
"name": "Spawner (403)",
"location": [1343, 1248, -90],

View file

@ -1,6 +1,6 @@
[
[
{
"type": "Spawner",
"$type": "Spawner",
"guid": "6bbb82e4-b0d1-4a23-a9da-5d35911ce762",
"name": "Spawner (404)",
"location": [2231, 1605, -95],

View file

@ -1,6 +1,6 @@
[
[
{
"type": "Spawner",
"$type": "Spawner",
"guid": "0d9c6323-7da9-4e12-861a-76fd30b3e3dc",
"name": "Spawner (405)",
"location": [950, 520, -55],
@ -17,7 +17,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "0db7d5e9-beaa-43a2-ac46-2802ac962fcb",
"name": "Spawner (405)",
"location": [2068, 1372, -75],
@ -34,7 +34,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "3d301c77-1ade-4823-b2ff-f1d4e0ed2bf0",
"name": "Spawner (405)",
"location": [1029, 520, -55],
@ -51,7 +51,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "3d69c950-70d4-48c5-8729-be8848330c1a",
"name": "Spawner (405)",
"location": [2045, 1397, -90],
@ -67,7 +67,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "3dcbbc92-14ac-4798-8753-41aa3b6b2450",
"name": "Spawner (405)",
"location": [2023, 1379, -80],
@ -85,7 +85,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "54deea77-bc1e-446b-8274-ea23bddb369e",
"name": "Spawner (405)",
"location": [989, 527, -50],
@ -101,7 +101,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "55fab330-6d2a-4823-a666-3dfa33dceeb6",
"name": "Spawner (405)",
"location": [1977, 1365, -80],
@ -118,7 +118,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "72a7f47d-d4cb-4530-9ba6-3878482279b2",
"name": "Spawner (405)",
"location": [2078, 1327, -80],
@ -135,7 +135,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "79aa68b8-d2bd-4a4d-ad84-422588aeaaff",
"name": "Spawner (405)",
"location": [1016, 514, -70],
@ -151,7 +151,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "7a10d380-53e3-48c9-9c5b-07a3c215032a",
"name": "Spawner (405)",
"location": [1027, 494, -70],
@ -167,7 +167,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "7bd799ab-c7fb-446e-b6cb-580d1fe2f7fb",
"name": "Spawner (405)",
"location": [976, 512, -50],
@ -184,7 +184,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "81e4af4e-3310-4864-8517-a032d487716f",
"name": "Spawner (405)",
"location": [1992, 1315, -90],
@ -200,7 +200,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "8ed338dc-51c1-40b3-a91a-7ebd8d91131b",
"name": "Spawner (405)",
"location": [2060, 1283, -80],
@ -218,7 +218,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "9347985d-23a4-4044-9a5c-79939c9f7df0",
"name": "Spawner (405)",
"location": [2037, 1311, -85],
@ -234,7 +234,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "99cde945-5b9c-4cff-924f-a59142bcbdb9",
"name": "Spawner (405)",
"location": [989, 520, -50],
@ -251,7 +251,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "9ad9f47f-17bc-4790-9a84-1e9aee66478f",
"name": "Spawner (405)",
"location": [2011, 1326, -80],
@ -268,7 +268,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a0c83d13-2354-494f-9535-d4e587cc7a6b",
"name": "Spawner (405)",
"location": [2025, 1387, -80],
@ -286,7 +286,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a263ccfc-65e1-4181-93b6-6e1c7914f5b8",
"name": "Spawner (405)",
"location": [2048, 1343, -85],
@ -303,7 +303,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a4200c02-8035-48bc-b79d-8b45225ffd4f",
"name": "Spawner (405)",
"location": [1004, 527, -50],
@ -322,7 +322,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "b4f71d7e-8c76-47db-a1c1-b81c4484741b",
"name": "Spawner (405)",
"location": [2027, 1353, -90],
@ -341,7 +341,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "b7226aea-9fd0-4079-8e21-70a7a443d0b2",
"name": "Spawner (405)",
"location": [1056, 1434, -85],
@ -357,7 +357,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "c1bda852-fee4-45ee-aa79-630980bc44e9",
"name": "Spawner (405)",
"location": [1003, 512, -50],
@ -377,7 +377,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "d6de9f30-1ee9-4914-853c-be075bd119ce",
"name": "Spawner (405)",
"location": [2083, 1322, -80],
@ -395,7 +395,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "df531ac9-d2b0-48ae-bc19-dc043d6af3de",
"name": "Spawner (405)",
"location": [993, 511, -50],
@ -413,7 +413,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "e08eb38c-0b25-4387-8999-f9d8a0a877aa",
"name": "Spawner (405)",
"location": [961, 517, -70],
@ -429,7 +429,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "eb50b13f-dd98-42c1-bfa0-2599bdc85de3",
"name": "Spawner (405)",
"location": [2066, 1282, -80],
@ -446,7 +446,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f62df843-74a7-4bb0-a101-53d1dc4cb806",
"name": "Spawner (405)",
"location": [976, 527, -50],
@ -466,7 +466,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "fa9dbd50-e0ca-4206-a197-0fe85a349900",
"name": "Spawner (405)",
"location": [2017, 1356, -90],