public override void ExecuteList(CommandEventArgs e, List <object> list) { string path = e.Arguments.Length == 0 ? string.Empty : e.Arguments[0].Trim(); string condition = e.Arguments.Length == 2 ? e.Arguments[1].Trim() : string.Empty; if (string.IsNullOrEmpty(path)) { path = Path.Combine(Core.BaseDirectory, $"Data/Spawns/{Utility.GetTimeStamp()}.json"); } else { var directory = Path.GetDirectoryName(Path.GetFullPath(path !)) !; if (!Path.IsPathRooted(path)) { path = Path.Combine(Core.BaseDirectory, path); PathUtility.EnsureDirectory(directory); } else if (!Directory.Exists(directory)) { LogFailure("Directory doesn't exist."); return; } } NetState.FlushAll(); var options = JsonConfig.GetOptions(new TextDefinitionConverterFactory()); var spawnRecords = new List <DynamicJson>(list.Count); for (var i = 0; i < list.Count; i++) { if (list[i] is BaseSpawner spawner) { if (!string.IsNullOrEmpty(spawner.Name) && spawner.Name.StartsWith( condition, StringComparison.OrdinalIgnoreCase )) { var dynamicJson = DynamicJson.Create(spawner.GetType()); spawner.ToJson(dynamicJson, options); spawnRecords.Add(dynamicJson); } } } if (spawnRecords.Count == 0) { LogFailure("No matching spawners found."); return; } e.Mobile.SendMessage("Exporting spawners..."); JsonConfig.Serialize(path, spawnRecords, options); e.Mobile.SendMessage($"Spawners exported to {path}"); }