exceldb dumper
This commit is contained in:
parent
e6e7514c37
commit
2f8e80d86a
|
@ -1,10 +1,12 @@
|
|||
using Google.FlatBuffers;
|
||||
using System.Data.SQLite;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using SCHALE.Common.Crypto.XXHash;
|
||||
using SCHALE.Common.FlatData;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
|
||||
|
||||
namespace SCHALE.Common.Crypto
|
||||
{
|
||||
|
@ -36,8 +38,60 @@ namespace SCHALE.Common.Crypto
|
|||
}
|
||||
|
||||
#if DEBUG
|
||||
public static List<object> GetExcelList(Type type, string exceldbDir, string schema)
|
||||
{
|
||||
var excelList = new List<object>();
|
||||
using (var dbConnection = new SQLiteConnection($"Data Source = {exceldbDir}"))
|
||||
{
|
||||
dbConnection.Open();
|
||||
var command = dbConnection.CreateCommand();
|
||||
command.CommandText = $"SELECT Bytes FROM {schema}";
|
||||
using (var reader = command.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
excelList.Add(type.GetMethod($"GetRootAs{type.Name}", BindingFlags.Static | BindingFlags.Public, [typeof(ByteBuffer)])!
|
||||
.Invoke(null, [new ByteBuffer((byte[])reader[0])]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return excelList;
|
||||
}
|
||||
|
||||
public static void DumpExcelDB(string exceldbDir, string destDir)
|
||||
{
|
||||
Directory.CreateDirectory(destDir);
|
||||
|
||||
using (var dbConnection = new SQLiteConnection($"Data Source = {exceldbDir}"))
|
||||
{
|
||||
dbConnection.Open();
|
||||
|
||||
string query = "SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%';";
|
||||
|
||||
using (var command = new SQLiteCommand(query, dbConnection))
|
||||
using (var reader = command.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
string dbSchemaName = reader.GetString(0);
|
||||
string excelName = dbSchemaName.Replace("DBSchema", "Excel");
|
||||
var type = Assembly.GetAssembly(typeof(AcademyFavorScheduleExcelTable))!.GetTypes().Where(t => t.IsAssignableTo(typeof(IFlatbufferObject)) && (t.Name.Equals(excelName))).FirstOrDefault();
|
||||
|
||||
var list = GetExcelList(type, exceldbDir, dbSchemaName);
|
||||
|
||||
File.WriteAllText(Path.Join(destDir, $"{type.Name}.json"), JsonConvert.SerializeObject(list, Formatting.Indented, new StringEnumConverter()));
|
||||
|
||||
Console.WriteLine($"Dumped {type.Name} from {dbSchemaName} successfully");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void DumpExcels(string bytesDir, string destDir)
|
||||
{
|
||||
Directory.CreateDirectory(destDir);
|
||||
|
||||
foreach (var type in Assembly.GetAssembly(typeof(AcademyFavorScheduleExcelTable))!.GetTypes().Where(t => t.IsAssignableTo(typeof(IFlatbufferObject)) && t.Name.EndsWith("ExcelTable")))
|
||||
{
|
||||
var bytesFilePath = Path.Join(bytesDir, $"{type.Name}.bytes");
|
||||
|
@ -50,18 +104,10 @@ namespace SCHALE.Common.Crypto
|
|||
var bytes = File.ReadAllBytes(bytesFilePath);
|
||||
TableEncryptionService.XOR(type.Name, bytes);
|
||||
var inst = type.GetMethod($"GetRootAs{type.Name}", BindingFlags.Static | BindingFlags.Public, [typeof(ByteBuffer)])!.Invoke(null, [new ByteBuffer(bytes)]);
|
||||
try
|
||||
{
|
||||
var obj = type.GetMethod("UnPack", BindingFlags.Instance | BindingFlags.Public)!.Invoke(inst, null);
|
||||
File.WriteAllText(Path.Join(destDir, $"{type.Name}.json"), JsonConvert.SerializeObject(obj, Formatting.Indented, new StringEnumConverter()));
|
||||
Console.WriteLine($"Dumped {type.Name} successfully");
|
||||
}
|
||||
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine($"Error dumping ${type.Name}");
|
||||
}
|
||||
|
||||
|
||||
var obj = type.GetMethod("UnPack", BindingFlags.Instance | BindingFlags.Public)!.Invoke(inst, null);
|
||||
File.WriteAllText(Path.Join(destDir, $"{type.Name}.json"), JsonConvert.SerializeObject(obj, Formatting.Indented, new StringEnumConverter()));
|
||||
Console.WriteLine($"Dumped {type.Name} successfully");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -24,6 +24,8 @@
|
|||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.2" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="Serilog.AspNetCore" Version="8.0.1" />
|
||||
<PackageReference Include="System.Data.SQLite.Core" Version="1.0.118" />
|
||||
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -21,10 +21,6 @@ namespace SCHALE.GameServer
|
|||
{
|
||||
public static async Task Main(string[] args)
|
||||
{
|
||||
|
||||
//TableService.DumpExcels("E:\\documents\\Decompiling\\Extracted\\BlueArchiveJP\\SCHALE.GameServer.Custom\\SCHALE.GameServer\\SCHALE.GameServer\\bin\\Debug\\net8.0\\Resources\\excel", "E:\\documents\\Decompiling\\Extracted\\BlueArchiveJP\\SCHALE.GameServer.Custom\\SCHALE.GameServer\\SCHALE.GameServer\\bin\\Debug\\net8.0\\Resources\\dump");
|
||||
//return;
|
||||
|
||||
var config = new ConfigurationBuilder()
|
||||
.SetBasePath(Path.GetDirectoryName(AppContext.BaseDirectory)!)
|
||||
.AddJsonFile("appsettings.json")
|
||||
|
|
Loading…
Reference in New Issue