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": "35fb2ebe-b2e6-4a64-af3a-ce1eaacd9a54",
"name": "Spawner (601)",
"location": [795, 753, 53],
@ -16,7 +16,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "8d0bc27a-c900-4d7f-8811-a52f386b6d0c",
"name": "Spawner (601)",
"location": [745, 739, 16],
@ -32,7 +32,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f7e9ab99-b970-4be1-881b-9e7ef1af0d01",
"name": "Spawner (601)",
"location": [749, 475, -17],
@ -48,7 +48,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "dd5aea6e-c13b-40f4-949f-9f41eac96589",
"name": "Spawner (601)",
"location": [326, 159, 20],
@ -64,7 +64,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "5c81b759-1add-4e8a-b151-420aa778e236",
"name": "Spawner (601)",
"location": [716, 720, -11],
@ -84,7 +84,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a02bf178-9eb0-48ff-ae18-d06958f798a8",
"name": "Spawner (601)",
"location": [992, 337, 9],
@ -104,7 +104,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "3929df23-08d5-4650-89a1-6cb025fddbac",
"name": "Spawner (601)",
"location": [982, 491, -12],
@ -122,7 +122,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "941cbed7-bf9a-448d-ae6a-f741459f50d1",
"name": "Spawner (601)",
"location": [981, 491, -12],
@ -138,7 +138,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "517bfdd3-f625-4e1c-af4b-8467810e6e46",
"name": "Spawner (601)",
"location": [919, 502, -12],
@ -156,7 +156,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "592811d2-8196-4006-a774-5658b4df3ecb",
"name": "Spawner (601)",
"location": [918, 502, -12],
@ -172,7 +172,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "8ff19011-9cc1-4aaf-a795-1867c6667123",
"name": "Spawner (601)",
"location": [949, 555, -14],
@ -190,7 +190,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "1b0b5739-68fc-4048-b2be-10da4dee13b8",
"name": "Spawner (601)",
"location": [950, 555, -14],
@ -206,7 +206,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "c33dadb8-e340-4fc6-9944-627054cf96f6",
"name": "Spawner (601)",
"location": [974, 161, -11],
@ -229,7 +229,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "dcc3ba35-0e14-48fe-8a1b-8a7e5b3e4c03",
"name": "Spawner (601)",
"location": [581, 815, -45],
@ -252,7 +252,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "6dfe8446-6623-4133-8990-6d11813b2b0d",
"name": "Spawner (601)",
"location": [526, 766, -92],
@ -276,7 +276,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "6d71c735-e0cb-414d-b687-10c1a4192856",
"name": "Spawner (601)",
"location": [536, 657, 8],
@ -298,7 +298,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "29d4421f-924d-47c3-abe5-45fe5e1be9a5",
"name": "Spawner (601)",
"location": [601, 905, -60],
@ -321,7 +321,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "7dac51b3-7c0a-4f22-8652-7e29ba875fee",
"name": "Spawner (601)",
"location": [818, 927, -15],
@ -337,7 +337,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "c64053fc-272a-4fdd-9c6c-4f05a1ec02be",
"name": "Spawner (601)",
"location": [684, 579, -15],
@ -357,7 +357,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a72aa352-96b2-4163-83c0-de180a8fb7e8",
"name": "Spawner (601)",
"location": [440, 708, 24],
@ -376,7 +376,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "875d5be5-9156-4e42-a41a-973aef764aee",
"name": "Spawner (601)",
"location": [674, 828, -109],
@ -399,7 +399,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "11551b29-0ee5-4fae-8d9b-2fd60465b032",
"name": "Spawner (601)",
"location": [887, 277, 3],

View file

@ -1,6 +1,6 @@
[
[
{
"type": "Spawner",
"$type": "Spawner",
"guid": "910e07be-fd79-4608-9990-5b860c14f95f",
"name": "Spawner (602)",
"location": [1109, 3744, -34],
@ -17,7 +17,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "e93d2519-a992-406d-84db-c246d4c9e68c",
"name": "Spawner (602)",
"location": [1088, 3732, -43],
@ -33,7 +33,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "5de9c1d3-274e-418f-8d1f-01357fa82fa4",
"name": "Spawner (602)",
"location": [1126, 3714, -43],
@ -49,7 +49,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "88ee3368-50a1-458c-9c99-8fb7ceddf079",
"name": "Spawner (602)",
"location": [1134, 3483, -42],
@ -71,7 +71,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "dd1b50db-06cc-4ab8-b1ae-7eb6d7ebeb03",
"name": "Spawner (602)",
"location": [1118, 3416, -42],
@ -92,7 +92,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "17ea295b-36bd-43e1-aa63-81d61bb7db98",
"name": "Spawner (602)",
"location": [1112, 3624, -45],
@ -109,7 +109,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "38fa4d5b-ab23-455a-9b32-3cfae24dacf1",
"name": "Spawner (602)",
"location": [1036, 3670, 0],
@ -126,7 +126,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "08c6d785-3e69-4343-a48e-54e876e09863",
"name": "Spawner (602)",
"location": [1012, 3652, -30],
@ -143,7 +143,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "ae84b446-e1a6-4df6-84b7-487218c2ffc0",
"name": "Spawner (602)",
"location": [996, 3406, -43],
@ -168,7 +168,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f6d1d4f5-6a84-430b-bbef-8b248d6b7c34",
"name": "Spawner (602)",
"location": [851, 3642, -43],
@ -193,7 +193,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "1faffedd-40e4-4dcf-b944-418dbd7f1300",
"name": "Spawner (602)",
"location": [934, 3564, -43],
@ -218,7 +218,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f76c2cff-e0c9-4b37-a7f8-9463975f34ac",
"name": "Spawner (602)",
"location": [965, 3489, -43],
@ -243,7 +243,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "56b271ca-0fcc-4ea4-9c2d-7b5aeec0d532",
"name": "Spawner (602)",
"location": [858, 3532, -43],
@ -260,7 +260,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "3b6298d3-c9f3-40df-af03-20af1ed36ad5",
"name": "Spawner (602)",
"location": [981, 3318, -42],
@ -277,7 +277,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "869aeec5-52eb-4041-ab43-5d943d05055f",
"name": "Spawner (602)",
"location": [881, 3344, -43],
@ -294,7 +294,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "46785472-bc5c-4563-8a5b-2ea1c0f9f465",
"name": "Spawner (602)",
"location": [1073, 3322, -42],
@ -317,7 +317,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "5f076796-65bf-4d41-88f3-78dacfab04b8",
"name": "Spawner (602)",
"location": [981, 3574, -43],
@ -334,7 +334,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "55507c03-3ae8-43ba-a2c5-7e8ecd7a3457",
"name": "Spawner (602)",
"location": [909, 3235, 38],
@ -357,7 +357,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "6d62246c-b5a5-4a2a-8f8a-3a9d54387e8a",
"name": "Spawner (602)",
"location": [802, 3231, 40],
@ -380,7 +380,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "572149ff-9542-42c1-92b9-99b71d8f2579",
"name": "Spawner (602)",
"location": [679, 3248, 38],
@ -400,7 +400,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "c05a8e56-f166-414e-babc-dcc1d14221c4",
"name": "Spawner (602)",
"location": [588, 3267, 37],
@ -423,7 +423,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "1a1cad72-ebdf-4491-a623-66d87bc45538",
"name": "Spawner (602)",
"location": [521, 3355, 38],
@ -444,7 +444,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "e23908dc-858c-4ec1-a41a-474fd7e9730d",
"name": "Spawner (602)",
"location": [511, 3273, 36],
@ -462,7 +462,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "955417f2-d918-4c43-93a6-346ca6fb4bbc",
"name": "Spawner (602)",
"location": [547, 3421, 37],
@ -483,7 +483,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "ebbbc910-1d0f-4180-8e7a-544d819906b8",
"name": "Spawner (602)",
"location": [571, 3506, 38],
@ -501,7 +501,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "153e658a-818b-4ed3-80d0-8b5f99193b6e",
"name": "Spawner (602)",
"location": [1169, 3338, -42],
@ -523,7 +523,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "18cef512-871f-4ff0-b21d-54e22e6197bc",
"name": "Spawner (602)",
"location": [689, 3711, -43],
@ -543,7 +543,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "8745bf7c-2b8b-45ae-b992-7de9c58d14fc",
"name": "Spawner (602)",
"location": [761, 3650, -43],
@ -563,7 +563,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "97c2ed7b-69c7-43db-8ccb-8591ecd90316",
"name": "Spawner (602)",
"location": [616, 3684, -43],
@ -581,7 +581,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "990f3875-b9e4-4060-8e14-7f2c4b9a69a2",
"name": "Spawner (602)",
"location": [668, 3831, -31],
@ -600,7 +600,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "0b5d810e-182e-4d7c-9a79-2dfb3ba8e5f3",
"name": "Spawner (602)",
"location": [680, 3788, -43],
@ -616,7 +616,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "8151255d-cede-4c52-bacc-fc3a1a434c45",
"name": "Spawner (602)",
"location": [760, 3810, -42],
@ -637,7 +637,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "1017634b-fad7-41ee-a13c-ec15dc0e5ae9",
"name": "Spawner (602)",
"location": [826, 3762, -43],
@ -659,7 +659,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "e2817ac3-8c77-4901-af5f-d51f0ceb7f7d",
"name": "Spawner (602)",
"location": [795, 3827, -19],
@ -675,7 +675,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "54228f45-e935-4df1-8d50-e15ec557d110",
"name": "Spawner (602)",
"location": [799, 3863, 48],
@ -697,7 +697,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "91a9c0fa-51f3-4726-aeb1-25a03911fffa",
"name": "Spawner (602)",
"location": [763, 3991, -42],
@ -718,7 +718,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "866bde45-dd02-4eef-b6c4-143bf3b6c31a",
"name": "Spawner (602)",
"location": [1129, 3163, -42],
@ -738,7 +738,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "08ce21d5-67cc-46c7-a827-68048f38e3ef",
"name": "Spawner (602)",
"location": [687, 3917, -43],
@ -754,7 +754,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "63140eed-b7f0-4ca9-87f5-5caeff3b6607",
"name": "Spawner (602)",
"location": [641, 3922, -43],
@ -775,7 +775,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "5216666c-6c47-4d72-9818-510a88ea6edc",
"name": "Spawner (602)",
"location": [1065, 2996, 74],
@ -795,7 +795,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "089d3262-1c31-4f80-aa13-d2d5383f0535",
"name": "Spawner (602)",
"location": [1099, 3010, 50],
@ -811,7 +811,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "c1db00c8-9759-4f55-8ac4-f7557a6b9242",
"name": "Spawner (602)",
"location": [1053, 2971, 50],
@ -827,7 +827,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a7437a00-ed2e-4acc-9375-b234ceffd92a",
"name": "Spawner (602)",
"location": [1062, 3026, 50],
@ -843,7 +843,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "d0e61272-a938-4b64-8713-3bac2356f1c7",
"name": "Spawner (602)",
"location": [762, 3073, 105],
@ -866,7 +866,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "27b77304-78cf-43bd-9ea3-076c491369a4",
"name": "Spawner (602)",
"location": [917, 3088, 37],
@ -889,7 +889,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "150f4f85-b244-48a4-a46f-d5b3c56951c6",
"name": "Spawner (602)",
"location": [839, 3086, 83],
@ -912,7 +912,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "9f18de9c-4862-4940-a2b2-ea02d78c2a69",
"name": "Spawner (602)",
"location": [817, 2960, 76],
@ -932,7 +932,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "4b7fcf89-dc47-4a59-8da2-bda0f810beeb",
"name": "Spawner (602)",
"location": [1106, 3138, -43],
@ -949,7 +949,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "743c46bb-a95f-4a7b-8a7f-4c4c0473fe38",
"name": "Spawner (602)",
"location": [861, 2923, 38],
@ -969,7 +969,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "de473023-c4ad-43f6-b9bd-b84d281234e8",
"name": "Spawner (602)",
"location": [648, 3131, 38],
@ -991,7 +991,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "7ad064f2-fb54-47c6-ba74-7d36d9425ea6",
"name": "Spawner (602)",
"location": [622, 3045, 35],
@ -1008,7 +1008,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "10d3d73f-7f91-4eed-bd56-fc5805653892",
"name": "Spawner (602)",
"location": [685, 2901, 36],
@ -1027,7 +1027,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f1c797af-4863-4b66-8169-795330712f08",
"name": "Spawner (602)",
"location": [562, 2942, 36],
@ -1046,7 +1046,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "fc314f2e-f697-4a0b-8bb0-f7dd51c1ed2a",
"name": "Spawner (602)",
"location": [486, 3211, 38],
@ -1064,7 +1064,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "4182343a-a4c0-4bc5-b07a-2e71cb1d3d97",
"name": "Spawner (602)",
"location": [426, 3190, 38],
@ -1084,7 +1084,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a340eb44-bdd5-4ae8-a316-570d801cc0d3",
"name": "Spawner (602)",
"location": [354, 3283, 57],
@ -1101,7 +1101,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f5ea0039-e107-461c-8091-21561b83f1d8",
"name": "Spawner (602)",
"location": [453, 3632, 37],
@ -1118,7 +1118,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "80ecee75-df9e-462a-ac4c-695f0941b8fb",
"name": "Spawner (602)",
"location": [387, 3524, 38],
@ -1135,7 +1135,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "0b95e3c9-d94c-478c-9179-0ee10faad038",
"name": "Spawner (602)",
"location": [1130, 3240, -42],
@ -1156,7 +1156,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "6eff3e1c-0886-4c54-b7d6-0b01477deca7",
"name": "Spawner (602)",
"location": [1054, 3215, 38],
@ -1175,7 +1175,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "b928e0bb-64e8-442d-bd4f-c058e9bde1c2",
"name": "Spawner (602)",
"location": [1057, 3167, 38],
@ -1195,7 +1195,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "979cdd74-3b3d-419b-9cf2-d7721332883d",
"name": "Spawner (602)",
"location": [1186, 3558, -42],
@ -1214,7 +1214,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "4383a8fc-ec81-4ae6-b57e-f28ef51d26a1",
"name": "Spawner (602)",
"location": [35, 99, -5],
@ -1231,7 +1231,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "2841721d-dcb8-41ce-84ed-ec8fca926424",
"name": "Spawner (602)",
"location": [35, 159, 0],
@ -1249,7 +1249,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "600fd870-3e98-44cf-9650-3e5e80977bc5",
"name": "Spawner (602)",
"location": [143, 158, -20],

View file

@ -1,6 +1,6 @@
[
[
{
"type": "Spawner",
"$type": "Spawner",
"guid": "1cd4979b-aac9-4287-b8af-9a31bb5526bc",
"name": "Spawner (603)",
"location": [1127, 1202, -2],
@ -16,7 +16,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "568aaef8-af43-44f6-8212-a50e96dc51d8",
"name": "Spawner (603)",
"location": [1130, 1202, -2],
@ -32,7 +32,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "c7124c0d-db07-4d72-92e4-ff8ebb54ce89",
"name": "Spawner (603)",
"location": [1128, 1165, -12],
@ -48,7 +48,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "29ebc79d-9f58-4ab8-9017-44a71fe17440",
"name": "Spawner (603)",
"location": [1108, 1153, -22],
@ -64,7 +64,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "81c4ea7e-4927-4bba-a31b-62ec12092f66",
"name": "Spawner (603)",
"location": [1110, 1169, -23],
@ -80,7 +80,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "4eddff06-5db8-4a97-ad02-9284c3437410",
"name": "Spawner (603)",
"location": [1097, 1189, -38],
@ -96,7 +96,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "bf730c77-6395-4ba6-80a4-8b004a7a78a1",
"name": "Spawner (603)",
"location": [1039, 1185, -56],
@ -113,7 +113,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f6324bc0-73ac-4936-805a-875b46164c54",
"name": "Spawner (603)",
"location": [1058, 1135, -37],
@ -129,7 +129,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "dc88d319-4808-474a-8897-8bf076d951f9",
"name": "Spawner (603)",
"location": [1064, 1106, -65],
@ -145,7 +145,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "bcc44632-3114-4d86-86c5-a9b1e05a9c98",
"name": "Spawner (603)",
"location": [1153, 1187, -32],
@ -161,7 +161,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "84dd7320-c5a2-4b62-a959-83b749d88285",
"name": "Spawner (603)",
"location": [1187, 1186, -40],
@ -177,7 +177,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "bd06c2cc-090f-47c9-98af-119591c20f30",
"name": "Spawner (603)",
"location": [1063, 1159, -42],
@ -195,7 +195,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "0784ac30-eae0-4d6e-8953-f2217416f2a8",
"name": "Spawner (603)",
"location": [1152, 1130, -42],
@ -211,7 +211,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "1485dfcd-1dea-412f-a8fe-06a3f6a076cb",
"name": "Spawner (603)",
"location": [1121, 1132, -42],
@ -227,7 +227,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "fd834a4b-778b-4f9c-9a86-c92de20ff2fe",
"name": "Spawner (603)",
"location": [1150, 963, -43],
@ -243,7 +243,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f94a912f-46d6-45b9-81c0-910a92f2aa87",
"name": "Spawner (603)",
"location": [1108, 1086, -60],
@ -259,7 +259,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "0829e9d8-84e7-41d2-9587-2d61b117f473",
"name": "Spawner (603)",
"location": [1095, 1076, -71],
@ -275,7 +275,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "587467d9-8b59-4257-a242-9890ec058b00",
"name": "Spawner (603)",
"location": [1089, 1128, -42],
@ -291,7 +291,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "9e60f208-6e14-4d77-83f0-fb067d02e804",
"name": "Spawner (603)",
"location": [1104, 1128, -52],
@ -307,7 +307,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "66d7c6f5-eeb7-4b34-af75-c82d38330ee1",
"name": "Spawner (603)",
"location": [1135, 1132, -42],
@ -323,7 +323,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "2affc9d3-8b16-4c2e-947f-45d362a4a0f4",
"name": "Spawner (603)",
"location": [1015, 1118, -42],
@ -348,7 +348,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "382e2dee-6150-4d26-960b-c07b96638749",
"name": "Spawner (603)",
"location": [1022, 1087, -42],
@ -373,7 +373,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "d072d262-08f3-4da3-9dcc-3983fa81d186",
"name": "Spawner (603)",
"location": [1039, 1072, -32],
@ -389,7 +389,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "9beef510-d580-44fc-95a6-d5ba9100cc34",
"name": "Spawner (603)",
"location": [1191, 1022, -42],
@ -406,7 +406,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "afed6e34-b8ee-4c64-b7d1-1b66629ccb97",
"name": "Spawner (603)",
"location": [1177, 995, -27],
@ -423,7 +423,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "5caafbc5-1310-408c-8a26-ec00335494c2",
"name": "Spawner (603)",
"location": [1218, 1049, -42],
@ -440,7 +440,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a7f77781-8fcb-4aa0-b398-8f9b87b59eb2",
"name": "Spawner (603)",
"location": [1178, 971, -27],
@ -456,7 +456,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "6b2a7732-7ee9-480e-abd4-db501214cb05",
"name": "Spawner (603)",
"location": [1214, 1026, -22],
@ -472,7 +472,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "b00555a0-97e8-4eb3-b609-2bb9bc5d21bd",
"name": "Spawner (603)",
"location": [1199, 1053, -42],
@ -489,7 +489,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "23b17a4f-d7e9-421c-8581-ba8eb8aff487",
"name": "Spawner (603)",
"location": [1204, 1041, -42],
@ -505,7 +505,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "25d8cb74-d701-4e5a-9074-e7c20f7cff39",
"name": "Spawner (603)",
"location": [1189, 989, -27],
@ -521,7 +521,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "95edace5-c3dc-4582-b559-1c3f9905f6f5",
"name": "Spawner (603)",
"location": [1208, 984, -1],
@ -538,7 +538,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "975d89b2-f693-48c0-b88b-9796d8e39ee8",
"name": "Spawner (603)",
"location": [1217, 1074, -52],
@ -560,7 +560,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "1b91d22a-24a2-4aee-88fa-36304f40dfdc",
"name": "Spawner (603)",
"location": [1053, 861, -32],
@ -576,7 +576,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a37dcfad-6094-4074-8fc4-ead7d8dd889c",
"name": "Spawner (603)",
"location": [1094, 1002, -16],
@ -593,7 +593,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "5a3f2d8b-8ed7-43fe-977b-a082ad4fd243",
"name": "Spawner (603)",
"location": [1124, 1008, -43],
@ -610,7 +610,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "31bf6eb1-fe34-4d25-b7cc-d0f395b2370a",
"name": "Spawner (603)",
"location": [1147, 993, -41],
@ -626,7 +626,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "399bf1fe-0c47-4945-8c14-5ee8a1d3b6b3",
"name": "Spawner (603)",
"location": [1034, 1028, -43],
@ -644,7 +644,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "df3d7a25-190a-4f00-968c-a6def4cfa15e",
"name": "Spawner (603)",
"location": [1015, 1022, -43],
@ -660,7 +660,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "4bdd2d24-47f0-4678-b220-921df1e1c213",
"name": "Spawner (603)",
"location": [1014, 1000, -43],
@ -677,7 +677,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "b1225d9f-1777-4ceb-9e03-2566fb2dc314",
"name": "Spawner (603)",
"location": [1034, 1004, -43],
@ -694,7 +694,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "af6a0287-46a1-490c-88ae-15172ec414f8",
"name": "Spawner (603)",
"location": [1024, 1018, -42],
@ -710,7 +710,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "332360f9-69c2-4c45-b36b-0325b7c6650e",
"name": "Spawner (603)",
"location": [1015, 976, -27],
@ -728,7 +728,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "4bb2f7ea-9131-47be-83a6-0f13831e76b1",
"name": "Spawner (603)",
"location": [1044, 976, -30],

View file

@ -1,6 +1,6 @@
[
[
{
"type": "Spawner",
"$type": "Spawner",
"guid": "7bd2b3c7-3c39-40c5-9c3b-98b73d060c65",
"name": "Spawner (604)",
"location": [976, 3881, -42],
@ -16,7 +16,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a80c5b72-e181-4266-8109-9c7a5eaf6a10",
"name": "Spawner (604)",
"location": [1010, 3883, -42],
@ -33,7 +33,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "99c47ee2-bbb0-4d0b-9294-18104ebb0f6b",
"name": "Spawner (604)",
"location": [1013, 3913, -42],
@ -50,7 +50,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "6b95fe1b-1c63-479d-b481-1b4d4c929a79",
"name": "Spawner (604)",
"location": [977, 3909, -42],
@ -67,7 +67,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "9c632527-c639-469c-9ded-ca859e4a8859",
"name": "Spawner (604)",
"location": [943, 3924, -42],
@ -83,7 +83,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "b317c56d-c032-4e81-aa3a-78988500a740",
"name": "Spawner (604)",
"location": [1020, 3884, -42],
@ -100,7 +100,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "556fdb4d-f7f2-4ba0-9d01-d94a76ee7a28",
"name": "Spawner (604)",
"location": [740, 3466, -19],
@ -116,7 +116,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "65b19c79-0f40-4772-9037-1cad0769456d",
"name": "Spawner (604)",
"location": [772, 3467, -20],
@ -132,7 +132,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "fd3342ae-de6c-436e-964a-e410ba1f983b",
"name": "Spawner (604)",
"location": [773, 3478, -20],
@ -150,7 +150,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "fcffbb1c-fb73-4c59-9257-52e1d6ebadb4",
"name": "Spawner (604)",
"location": [772, 3490, -20],
@ -168,7 +168,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "bb731ab1-950e-4e4b-8e55-6378eeb2c3b0",
"name": "Spawner (604)",
"location": [783, 3491, -20],
@ -185,7 +185,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "36f1b1bc-0754-4605-929a-d7c8e030a80b",
"name": "Spawner (604)",
"location": [797, 3494, 0],
@ -202,7 +202,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "28cda9f4-bbd1-451d-acb0-f568361a7d6f",
"name": "Spawner (604)",
"location": [805, 3491, -20],
@ -218,7 +218,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "0bd1f793-51e9-4dbe-ab5c-dbd452e85d8c",
"name": "Spawner (604)",
"location": [817, 3456, -10],
@ -234,7 +234,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "5f573458-bb63-4617-b2c4-c73762718dae",
"name": "Spawner (604)",
"location": [817, 3438, 0],
@ -252,7 +252,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "37378f9d-5e71-46a8-8d15-0b98d48a3d04",
"name": "Spawner (604)",
"location": [817, 3426, 0],
@ -269,7 +269,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "2088913c-0ec7-4225-8f9d-1112e817542b",
"name": "Spawner (604)",
"location": [816, 3419, 0],
@ -286,7 +286,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "094d18b0-4b1a-491d-ae33-2463d400904b",
"name": "Spawner (604)",
"location": [805, 3397, 0],
@ -304,7 +304,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "b9c41d27-d185-41dc-aa13-7258c018abc1",
"name": "Spawner (604)",
"location": [804, 3387, 0],
@ -321,7 +321,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "720f9c6d-c0e6-4f66-aca9-cca448a5d02d",
"name": "Spawner (604)",
"location": [851, 3404, -20],
@ -337,7 +337,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "0197b002-1c6d-45ac-8d7d-21706a854586",
"name": "Spawner (604)",
"location": [833, 3439, -20],
@ -354,7 +354,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "3e2450a8-7aa3-434a-a144-dfc36f784d9e",
"name": "Spawner (604)",
"location": [843, 3439, -20],
@ -371,7 +371,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "f2b8fe59-6e8b-4db1-a20c-9663efe3b725",
"name": "Spawner (604)",
"location": [702, 3435, -20],
@ -388,7 +388,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "59459615-255f-449a-b4ee-c6adf848c09a",
"name": "Spawner (604)",
"location": [727, 3425, -20],
@ -405,7 +405,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "fa9d60df-aa99-4934-bfab-35066f170481",
"name": "Spawner (604)",
"location": [715, 3446, -20],
@ -422,7 +422,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "27644d88-d3d5-458f-902d-78b7b59eaf95",
"name": "Spawner (604)",
"location": [713, 3438, -20],
@ -440,7 +440,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "2a0e5133-2658-44f4-95ca-bcc5d68ddaeb",
"name": "Spawner (604)",
"location": [794, 3446, -10],
@ -457,7 +457,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "6d91f1ff-12e5-4d75-aa5a-033ff00b9a24",
"name": "Spawner (604)",
"location": [779, 3431, -10],
@ -473,7 +473,7 @@
]
},
{
"type": "Spawner",
"$type": "Spawner",
"guid": "a1ba61c1-0fc5-46a4-b7de-1350606fb0fc",
"name": "Spawner (604)",
"location": [842, 3453, -18],