using System;
using System.IO;
using System.Collections.Generic;
namespace JSONtoACEConverter
{
class Program
{
static void EnsureDirectoryExists(string filePath)
{
FileInfo fi = new FileInfo(filePath);
if (!fi.Directory.Exists)
Directory.CreateDirectory(fi.DirectoryName);
}
static void Main(string[] args)
{
if (args != null && args.Length > 0)
{
if (!args[0].Contains(".json"))
{
FileInfo fileInfo = new FileInfo(args[0]);
if (fileInfo.Directory.Exists)
{
if (ACE.Adapter.Lifestoned.LifestonedLoader.TryLoadWeenies(args[0], out List<Lifestoned.DataModel.Gdle.Weenie> gdleResults))
{
foreach (var gdleResult in gdleResults)
{
if (ACE.Adapter.Lifestoned.LifestonedConverter.TryConvert(gdleResult, out ACE.Database.Models.World.Weenie aceResult))
{
var weenieSQLWriter = new ACE.Database.SQLFormatters.World.WeenieSQLWriter();
string folderName = weenieSQLWriter.GetDefaultSubfolder(aceResult);
string fileName = weenieSQLWriter.GetDefaultFileName(aceResult);
var substring = fileName.Substring(6);
string name = substring;
int charLocation = substring.IndexOf(".", StringComparison.Ordinal);
if (charLocation > 0)
name = substring.Substring(0, charLocation);
var classID = aceResult.ClassId.ToString("00000");
EnsureDirectoryExists(folderName);
using (StreamWriter outputFile = new StreamWriter(Path.Combine(folderName, fileName)))
{
// Create the file header
outputFile.WriteLine("--");
outputFile.WriteLine("--Current Database: `ace_world`");
outputFile.WriteLine("--");
outputFile.WriteLine();
outputFile.WriteLine("USE `ace_world`;");
outputFile.WriteLine();
outputFile.WriteLine($"/* Weenie - {name} ({classID}) */");
weenieSQLWriter.CreateSQLDELETEStatement(aceResult, outputFile);
outputFile.WriteLine();
weenieSQLWriter.CreateSQLINSERTStatement(aceResult, outputFile);
outputFile.WriteLine();
}
}
else
Console.WriteLine($"JSON data conversion failed for {gdleResult.Name}.");
}
}
else
Console.WriteLine("JSON files loading failed.");
}
else
Console.WriteLine("Invalid Path.");
}
else
{
if (File.Exists(args[0]))
{
string result;
switch(args[0])
{
case "worldspawn.json":
result = GDLEWorldSpawnDataConverter(args[0]);
if (result != null)
Console.WriteLine(result);
break;
case "events.json":
break;
case "quests.json":
break;
case "spells.json":
break;
case "recipes.json":
break;
default:
result = WeenieDataConverter(args[0]);
if (result != null)
Console.WriteLine(result);
break;
}
}
else
Console.WriteLine("Supplied file failed to open.");
}
}
else
Console.WriteLine("No input provided.");
}
static string WeenieDataConverter(string file)
{
if (ACE.Adapter.Lifestoned.LifestonedLoader.TryLoadWeenie(file, out Lifestoned.DataModel.Gdle.Weenie gdleResult))
{
if (ACE.Adapter.Lifestoned.LifestonedConverter.TryConvert(gdleResult, out ACE.Database.Models.World.Weenie aceResult))
{
var weenieSQLWriter = new ACE.Database.SQLFormatters.World.WeenieSQLWriter();
string folderName = weenieSQLWriter.GetDefaultSubfolder(aceResult);
string fileName = weenieSQLWriter.GetDefaultFileName(aceResult);
var substring = fileName.Substring(6);
string name = substring;
int charLocation = substring.IndexOf(".", StringComparison.Ordinal);
if (charLocation > 0)
name = substring.Substring(0, charLocation);
var classID = aceResult.ClassId.ToString("00000");
EnsureDirectoryExists(folderName);
using (StreamWriter outputFile = new StreamWriter(Path.Combine(folderName, fileName)))
{
// Create the file header
outputFile.WriteLine("--");
outputFile.WriteLine("--Current Database: `ace_world`");
outputFile.WriteLine("--");
outputFile.WriteLine();
outputFile.WriteLine("USE `ace_world`;");
outputFile.WriteLine();
outputFile.WriteLine($"/* Weenie - {name} ({classID}) */");
weenieSQLWriter.CreateSQLDELETEStatement(aceResult, outputFile);
outputFile.WriteLine();
weenieSQLWriter.CreateSQLINSERTStatement(aceResult, outputFile);
outputFile.WriteLine();
}
}
else
return "JSON data conversion failed.";
}
else
return "JSON file load failed.";
return null;
}
static string GDLEWorldSpawnDataConverter(string file)
{
if (ACE.Adapter.GDLE.GDLELoader.TryLoadWorldSpawnsConverted(file, out List<ACE.Database.Models.World.LandblockInstance> results, out List<ACE.Database.Models.World.LandblockInstanceLink> links))
{
var worldSpawnSQLWriter = new ACE.Database.SQLFormatters.World.LandblockInstanceWriter();
}
else
return "JSON file load and conversion failed.";
return null;
}
}
}
Comments