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:
parent
a26219c837
commit
d8a64f3316
135 changed files with 7654 additions and 6079 deletions
|
|
@ -1,6 +1,6 @@
|
|||
[
|
||||
[
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "001ee924-4432-49b8-b36b-b617d376c561",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5603, 93, 0],
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "008c5583-538b-4a11-a7c0-3fbd453b9a25",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5733, 91, 0],
|
||||
|
|
@ -32,7 +32,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "079c93fb-f739-40a5-a21d-0a4aba793bc8",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5575, 16, 10],
|
||||
|
|
@ -48,7 +48,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "08ada2f5-25a8-4964-a067-c74348006ff5",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5604, 166, 0],
|
||||
|
|
@ -64,7 +64,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "09ded4e4-5965-4d2b-b5bd-d19dd22d1d78",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5404, 93, 10],
|
||||
|
|
@ -81,7 +81,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "0f0f2698-3569-4115-8e04-3792d50dfabc",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5594, 182, 0],
|
||||
|
|
@ -99,7 +99,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "10bd98c5-918f-4da9-9073-5bd147f09113",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5475, 190, 0],
|
||||
|
|
@ -115,7 +115,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "18fc907b-29dc-48b4-ad1c-7dbc4d94c838",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5730, 93, 0],
|
||||
|
|
@ -131,7 +131,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "19050742-7cad-48c2-b1bd-1a6da29d076c",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5817, 83, 0],
|
||||
|
|
@ -147,7 +147,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "1d32e77e-c8dd-4626-81e5-ef5e71cc2c4d",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5468, 109, 35],
|
||||
|
|
@ -164,7 +164,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "1d390a29-becb-4f59-b28d-a07fec3f5f60",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5727, 72, 0],
|
||||
|
|
@ -180,7 +180,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "21d404c6-8dcc-49a1-b03c-ae4ef9898b55",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5804, 12, 0],
|
||||
|
|
@ -196,7 +196,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "2237b125-9c62-49d2-8969-0a408f480409",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5416, 59, -15],
|
||||
|
|
@ -212,7 +212,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "22645272-781c-4559-9897-622f9c8c78cf",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5698, 57, 5],
|
||||
|
|
@ -228,7 +228,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "2771037f-84f2-43da-98d9-db67d02d1431",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5557, 222, 0],
|
||||
|
|
@ -246,7 +246,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "29b1dfff-7701-4436-9bf1-9b31e8ee667c",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5711, 97, 0],
|
||||
|
|
@ -264,7 +264,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "2d37c623-d85a-4986-878b-3db1485a3932",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5760, 99, 0],
|
||||
|
|
@ -282,7 +282,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "30d586e5-c20c-44c1-af6c-5b73b505fdf6",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5723, 73, 0],
|
||||
|
|
@ -298,7 +298,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "314487e0-1198-40a4-b0c9-d37c010700b4",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5411, 163, 0],
|
||||
|
|
@ -316,7 +316,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "32fbcd32-5e8c-4061-b8d3-760447f9d436",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5394, 11, 30],
|
||||
|
|
@ -332,7 +332,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "3b03d43c-d591-4845-bf47-815b88c21c29",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5441, 187, 0],
|
||||
|
|
@ -341,7 +341,10 @@
|
|||
"minDelay": "00:05:00",
|
||||
"maxDelay": "00:10:00",
|
||||
"team": 0,
|
||||
"spawnBounds": { "start": { "x": 5426, "y": 172, "z": 0 }, "end": { "x": 5456, "y": 202, "z": 43 } },
|
||||
"spawnBounds": {
|
||||
"start": { "x": 5426, "y": 172, "z": 0 },
|
||||
"end": { "x": 5456, "y": 202, "z": 43 }
|
||||
},
|
||||
"walkingRange": 30,
|
||||
"entries": [
|
||||
{ "name": "EvilMage", "maxCount": 5, "probability": 100 },
|
||||
|
|
@ -349,7 +352,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "3bed0f7f-ea30-4440-8a18-93377ac6ce62",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5456, 157, 0],
|
||||
|
|
@ -365,7 +368,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "3ed65348-422d-4f40-86e9-14b3cb8fa14b",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5595, 82, 0],
|
||||
|
|
@ -382,7 +385,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "46f4e0e9-6b99-4e2e-a7ca-2a4c8a429f52",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5605, 202, 0],
|
||||
|
|
@ -398,7 +401,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "481e0770-ef9b-4f8c-975f-06f954ede9d8",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5474, 176, 0],
|
||||
|
|
@ -414,7 +417,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "490f88ed-d12a-419f-9c25-02766dd7acbe",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5725, 78, 0],
|
||||
|
|
@ -430,7 +433,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "4cf19ca1-b747-42ff-b6ba-647eb155a930",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5615, 173, 0],
|
||||
|
|
@ -446,7 +449,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "4df550f5-2395-4415-bce2-780cef42016e",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5546, 118, -5],
|
||||
|
|
@ -462,7 +465,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "4ec81dd8-9d60-4705-81bd-8cd7e50ba6c6",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5402, 58, -20],
|
||||
|
|
@ -478,7 +481,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "509eea60-a86e-406f-80dd-32310ad518cd",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5405, 185, 0],
|
||||
|
|
@ -494,7 +497,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "521558b3-b945-413e-b3fb-3d8ec3498ce2",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5410, 170, 0],
|
||||
|
|
@ -510,7 +513,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "54528337-9b35-44af-80d4-ef8176ac81d2",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5701, 60, 5],
|
||||
|
|
@ -526,7 +529,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "56012eb5-81d3-4912-9910-4a08a69ac977",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5717, 58, 5],
|
||||
|
|
@ -542,7 +545,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "5b5cc1fc-cbae-4895-b1f8-f05ee581851c",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5615, 18, 10],
|
||||
|
|
@ -558,7 +561,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "67c32364-17d1-4910-9dc2-0c5f849e3c3a",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5603, 116, 0],
|
||||
|
|
@ -574,7 +577,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "69104c32-673c-44d2-9326-7d4d03633df3",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5730, 90, 0],
|
||||
|
|
@ -590,7 +593,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "69e9d6d7-5fa3-40e6-bae3-5eb077de6a00",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5469, 211, 0],
|
||||
|
|
@ -608,7 +611,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "6a7ec713-9962-445d-90c4-78bb4424b61c",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5404, 43, 30],
|
||||
|
|
@ -624,7 +627,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "6cd6d9d8-95d2-4517-bce2-bc0172947842",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5412, 164, 0],
|
||||
|
|
@ -641,7 +644,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "6d97533a-8934-4eff-95f5-1ade2f51a092",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5708, 43, 0],
|
||||
|
|
@ -658,7 +661,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "6e6b46bf-7fdd-44c9-a7be-4f5d4a5ad13f",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5536, 119, -5],
|
||||
|
|
@ -674,7 +677,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "6f6ac8eb-4d03-40b4-9a85-ecfadeae978d",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5400, 45, 30],
|
||||
|
|
@ -690,7 +693,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "719a5843-5c2b-4fe2-9606-5cfe1bea7fcc",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5439, 137, 20],
|
||||
|
|
@ -706,7 +709,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "725c89d8-4f6d-429b-ac19-f467eaab6f3d",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5819, 50, 0],
|
||||
|
|
@ -723,7 +726,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "72ee6353-de85-4b30-bd7e-5b3bb8274c8e",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5434, 100, 20],
|
||||
|
|
@ -739,7 +742,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "7492a94d-efd9-4505-a057-1e260cc4adbb",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5828, 42, 0],
|
||||
|
|
@ -756,7 +759,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "7661fbb1-6302-4c11-9ee6-14cc5f24b79e",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5392, 10, 30],
|
||||
|
|
@ -772,7 +775,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "773e4496-e32b-4ab8-aac2-969f0c927494",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5577, 194, 0],
|
||||
|
|
@ -789,7 +792,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "7d79079a-6f9c-479b-86fc-46e2a5361c83",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5443, 36, -10],
|
||||
|
|
@ -805,7 +808,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "7e839e78-3211-4cac-9773-fa08866d4026",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5403, 235, 10],
|
||||
|
|
@ -821,7 +824,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "8115af0b-b4a8-4c92-8fd6-a3e6353257e8",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5505, 180, 0],
|
||||
|
|
@ -837,7 +840,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "82bf7919-cc1a-43ba-b4cd-f8dc919ce842",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5437, 11, 0],
|
||||
|
|
@ -853,7 +856,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "885a80e9-bfa3-4078-8ae6-a97eea5abb1e",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5723, 77, 0],
|
||||
|
|
@ -869,7 +872,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "888398f2-e222-44e8-aa2c-85fee9df40b7",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5492, 56, 20],
|
||||
|
|
@ -885,7 +888,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "8a352d4f-c130-4c91-b8a1-0beded1ed79a",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5415, 189, 0],
|
||||
|
|
@ -901,7 +904,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "8ad8e084-ea10-46e2-9767-fa71ee0c5add",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5616, 184, 0],
|
||||
|
|
@ -917,7 +920,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "8d197175-de78-46d5-a9ce-23947f16d376",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5818, 80, 0],
|
||||
|
|
@ -933,7 +936,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "8e8968c9-b416-4792-9b0c-3670a4b23695",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5845, 57, 0],
|
||||
|
|
@ -949,7 +952,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "953785e9-e0b7-4464-bd7d-9fb1b2f6b535",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5570, 118, 5],
|
||||
|
|
@ -965,7 +968,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "9633f2a9-53e9-477f-900d-ec62e3ad68d8",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5468, 100, 35],
|
||||
|
|
@ -981,7 +984,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "97536e41-0cd7-4692-884c-25dd30d94b99",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5620, 21, 10],
|
||||
|
|
@ -997,7 +1000,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "991c1f24-db8a-4a4e-8620-1d07266240fb",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5721, 12, 10],
|
||||
|
|
@ -1013,7 +1016,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "9a838c4b-48f3-4181-832e-c77b2067e8c2",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5549, 79, 0],
|
||||
|
|
@ -1030,7 +1033,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "9ae367fa-1674-4515-874c-639dc46b0983",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5474, 20, 0],
|
||||
|
|
@ -1046,7 +1049,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "9b565f16-387d-48d3-b5c9-bb230a1f2175",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5387, 41, 20],
|
||||
|
|
@ -1063,7 +1066,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "a0d04624-3586-4efd-b7d3-2ec4258544bd",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5699, 61, 0],
|
||||
|
|
@ -1079,7 +1082,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "a1cd5afc-94a1-4674-ab44-62265f6978dd",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5752, 44, 0],
|
||||
|
|
@ -1097,7 +1100,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "a1ff514a-58c1-4173-9577-188a2a41b3d5",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5724, 118, 0],
|
||||
|
|
@ -1114,7 +1117,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "a30b9f6a-dcb9-4e6b-8968-61dca09727f8",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5456, 143, 20],
|
||||
|
|
@ -1130,7 +1133,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "a5729af1-b157-4483-a1c3-6ec1ca5c057c",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5608, 190, 0],
|
||||
|
|
@ -1146,7 +1149,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "a96bff59-e6a9-4ab9-872d-bfe06a6d55fd",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5649, 101, 10],
|
||||
|
|
@ -1162,7 +1165,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "a9e6fa28-2c45-4b1c-bcda-19a702017cc2",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5405, 200, 0],
|
||||
|
|
@ -1178,7 +1181,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "aafa33d0-8132-46b6-88d5-fc65bef565ef",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5875, 44, 0],
|
||||
|
|
@ -1194,7 +1197,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "ab9458c7-cafb-4752-813c-822bb1dbc3a6",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5595, 147, 10],
|
||||
|
|
@ -1210,7 +1213,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "ac1ca0f0-ce5f-4aca-b1b5-6b80ea586a4e",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5545, 153, 20],
|
||||
|
|
@ -1226,7 +1229,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "ac52c146-adc0-4501-84c0-c9d38f301dce",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5493, 51, 20],
|
||||
|
|
@ -1242,7 +1245,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "ad47daba-e2ba-49ba-a625-23f6b5803519",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5572, 113, 5],
|
||||
|
|
@ -1258,7 +1261,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "adbef39f-4d4f-4b24-ac09-16b247e1aa60",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5553, 146, 20],
|
||||
|
|
@ -1274,7 +1277,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "b3a3061a-1a09-41cf-bb40-2d6503a76301",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5817, 78, 0],
|
||||
|
|
@ -1290,7 +1293,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "b6cce94b-7e83-4d5e-aa5a-620dd839887f",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5425, 58, 10],
|
||||
|
|
@ -1307,7 +1310,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "b9b42bc5-e1f5-4b91-924c-88c12a7ae994",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5733, 93, 0],
|
||||
|
|
@ -1323,7 +1326,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "baadf71e-a920-4903-8852-0c06cb1cf279",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5477, 183, 0],
|
||||
|
|
@ -1340,7 +1343,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "bd0003c3-3bd7-43e1-a8aa-f0518996d54a",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5549, 60, 0],
|
||||
|
|
@ -1357,7 +1360,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "be48657e-5a30-4917-9f02-9eeb8e55430e",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5715, 58, 2],
|
||||
|
|
@ -1373,7 +1376,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "bed0b85f-695c-441c-ba0e-dcb292dc561f",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5701, 58, 2],
|
||||
|
|
@ -1389,7 +1392,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "c18e446d-8c84-4f2d-8b78-a67767b70920",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5445, 12, 0],
|
||||
|
|
@ -1405,7 +1408,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "c8b77b20-a7ba-4791-b5c3-feda828d6c7f",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5594, 139, 10],
|
||||
|
|
@ -1421,7 +1424,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "cd11b1a6-10bb-4c7f-9eb9-fb89c49f1cff",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5477, 67, 20],
|
||||
|
|
@ -1438,7 +1441,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "d07b5d4b-bf25-46aa-b179-37265ef7c5e5",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5398, 148, 20],
|
||||
|
|
@ -1454,7 +1457,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "d1a66cc8-5ebf-4a29-9c4d-7724f82d2db4",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5568, 36, 0],
|
||||
|
|
@ -1470,7 +1473,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "d4a93223-fe95-4565-824d-a75653d2e466",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5448, 33, -10],
|
||||
|
|
@ -1486,7 +1489,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "d750d4b4-310a-461d-9288-ddc0658fe807",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5593, 141, 10],
|
||||
|
|
@ -1503,7 +1506,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "d9160a0d-2b7d-479e-a737-6dd383189d54",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5474, 139, 20],
|
||||
|
|
@ -1519,7 +1522,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "da517822-6aee-42d2-955e-61f32f64248c",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5717, 60, 0],
|
||||
|
|
@ -1535,7 +1538,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "da924d39-dbec-4eab-87de-90db6d447919",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5527, 210, 0],
|
||||
|
|
@ -1552,7 +1555,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "ddd573db-303c-4e55-8b3d-276b8185ddc7",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5399, 11, 30],
|
||||
|
|
@ -1568,7 +1571,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "e0e358ad-1171-4102-a7fc-d6c934dca6af",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5412, 200, 0],
|
||||
|
|
@ -1586,7 +1589,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "e1baaf02-08a2-48f0-995a-e0f605750a9c",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5406, 177, 0],
|
||||
|
|
@ -1602,7 +1605,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "e2e06115-367a-4fde-9f22-fbcbea8f9bb8",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5684, 117, 0],
|
||||
|
|
@ -1618,7 +1621,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "e740c0d1-2ab2-43c6-acda-fe9874666ac4",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5421, 117, 0],
|
||||
|
|
@ -1634,7 +1637,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "e7ae4e7b-0861-4ff2-b25d-bf84299ac1e0",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5546, 113, -5],
|
||||
|
|
@ -1650,7 +1653,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "e7f17883-f57f-40fd-a1dd-140010fb9699",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5396, 226, 10],
|
||||
|
|
@ -1666,7 +1669,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "e9fbf301-1258-4a79-b9e7-4d63acc98240",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5715, 61, 5],
|
||||
|
|
@ -1682,7 +1685,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "eb4b7903-2927-4029-b565-8ebdc5da5b44",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5571, 158, -10],
|
||||
|
|
@ -1699,7 +1702,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "edc5910f-203a-4888-83a4-cf67cea2cc43",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5606, 25, 10],
|
||||
|
|
@ -1715,7 +1718,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "eeed29d5-5317-4534-ad38-3c0992c39684",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5390, 145, 20],
|
||||
|
|
@ -1731,7 +1734,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "f026769e-09f2-46db-bc0a-e5294bee1910",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5432, 158, 0],
|
||||
|
|
@ -1747,7 +1750,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "f1141039-567b-499e-b3e9-4749a47f6ced",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5434, 89, 20],
|
||||
|
|
@ -1763,7 +1766,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "f216166d-1cad-4be4-9bc0-37d09a0a2d6a",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5661, 16, -10],
|
||||
|
|
@ -1779,7 +1782,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "f61afcad-3fea-45bb-8cb9-b7e278859277",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5423, 112, 0],
|
||||
|
|
@ -1795,7 +1798,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "f73d08aa-ffec-4132-accc-5eacbe40e8a8",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5468, 106, 35],
|
||||
|
|
@ -1811,7 +1814,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "f97a9dbc-694a-4fce-8ff9-5f6bb478274c",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5856, 107, 10],
|
||||
|
|
@ -1827,7 +1830,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "fd5f3ab6-1ba5-4db0-8598-6b7d91486ac3",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5412, 201, 0],
|
||||
|
|
@ -1844,7 +1847,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "Spawner",
|
||||
"$type": "Spawner",
|
||||
"guid": "ffbfcdb1-28bb-472c-9886-e2f86381c699",
|
||||
"name": "Spawner (119)",
|
||||
"location": [5394, 230, 10],
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue