diff --git a/Projects/UOContent.Tests/Tests/Engines/Spawners/Json/ExportImportFileTests.cs b/Projects/UOContent.Tests/Tests/Engines/Spawners/Json/ExportImportFileTests.cs new file mode 100644 index 000000000..fa5b891b0 --- /dev/null +++ b/Projects/UOContent.Tests/Tests/Engines/Spawners/Json/ExportImportFileTests.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.IO; +using Server; +using Server.Engines.Spawners; +using Server.Json; +using Xunit; + +namespace UOContent.Tests.Engines.Spawners.Json; + +[Collection("Sequential UOContent Tests")] +public class ExportImportFileTests +{ + [Fact] + public void Serialize_ThenDeserialize_File_PreservesSpawner() + { + var spawner = new Spawner(3, TimeSpan.FromMinutes(4), TimeSpan.FromMinutes(8), 1, + new Rectangle3D(200, 200, 0, 9, 9, 0), "Tanner"); + spawner.MoveToWorld(new Point3D(204, 204, 0), Map.Felucca); + + var path = Path.GetTempFileName(); + try + { + JsonConfig.Serialize(path, new List { spawner }, SpawnerJsonSerializer.Options); + + var loaded = JsonConfig.Deserialize>(path, SpawnerJsonSerializer.Options); + var s = Assert.IsType(Assert.Single(loaded)); + Assert.Equal(3, s.Count); + Assert.Equal(1, s.Team); + Assert.Equal(new Rectangle3D(200, 200, 0, 9, 9, 0), s.SpawnBounds); + + s.Delete(); + } + finally + { + File.Delete(path); + spawner?.Delete(); + } + } +} diff --git a/Projects/UOContent/Engines/Spawners/Commands/ExportSpawnersCommand.cs b/Projects/UOContent/Engines/Spawners/Commands/ExportSpawnersCommand.cs index df092997d..37feccc3a 100644 --- a/Projects/UOContent/Engines/Spawners/Commands/ExportSpawnersCommand.cs +++ b/Projects/UOContent/Engines/Spawners/Commands/ExportSpawnersCommand.cs @@ -66,9 +66,7 @@ public class ExportSpawnersCommand : BaseCommand NetState.FlushAll(); - var options = JsonConfig.GetOptions(new TextDefinitionConverterFactory()); - - var spawnRecords = new List(list.Count); + var spawnRecords = new List(list.Count); for (var i = 0; i < list.Count; i++) { // Not a spawner, not on a valid map, or is in a container @@ -85,9 +83,7 @@ public class ExportSpawnersCommand : BaseCommand continue; } - var dynamicJson = DynamicJson.Create(spawner.GetType()); - spawner.ToJson(dynamicJson, options); - spawnRecords.Add(dynamicJson); + spawnRecords.Add(spawner); } if (spawnRecords.Count == 0) @@ -98,7 +94,7 @@ public class ExportSpawnersCommand : BaseCommand e.Mobile.SendMessage("Exporting spawners..."); - JsonConfig.Serialize(path, spawnRecords, options); + JsonConfig.Serialize(path, spawnRecords, SpawnerJsonSerializer.Options); e.Mobile.SendMessage($"Spawners exported to {path}"); }