Beispiel #1
0
    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}");
    }