项目重命名
This commit is contained in:
parent
709d4f2b56
commit
46a7fc20a1
@ -1,7 +0,0 @@
|
||||
{
|
||||
"profiles": {
|
||||
"EscudeLSF": {
|
||||
"commandName": "Project"
|
||||
}
|
||||
}
|
||||
}
|
@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.11.35312.102
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EscudeLSF", "EscudeLSF\EscudeLSF.csproj", "{3DD9B6A4-5DD0-43FA-92EF-33DED4622A2B}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EscudeTools", "EscudeTools\EscudeTools.csproj", "{3DD9B6A4-5DD0-43FA-92EF-33DED4622A2B}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
12
EscudeTools/DatabaseGraphics.cs
Normal file
12
EscudeTools/DatabaseGraphics.cs
Normal file
@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace EscudeTools
|
||||
{
|
||||
internal class DatabaseGraphics
|
||||
{
|
||||
}
|
||||
}
|
12
EscudeTools/DatabaseLocalize.cs
Normal file
12
EscudeTools/DatabaseLocalize.cs
Normal file
@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace EscudeTools
|
||||
{
|
||||
internal class DatabaseLocalize
|
||||
{
|
||||
}
|
||||
}
|
12
EscudeTools/DatabaseScripts.cs
Normal file
12
EscudeTools/DatabaseScripts.cs
Normal file
@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace EscudeTools
|
||||
{
|
||||
internal class DatabaseScripts
|
||||
{
|
||||
}
|
||||
}
|
12
EscudeTools/DatabaseSounds.cs
Normal file
12
EscudeTools/DatabaseSounds.cs
Normal file
@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace EscudeTools
|
||||
{
|
||||
internal class DatabaseSounds
|
||||
{
|
||||
}
|
||||
}
|
140
EscudeTools/MasterDb.cs
Normal file
140
EscudeTools/MasterDb.cs
Normal file
@ -0,0 +1,140 @@
|
||||
using System.Text;
|
||||
|
||||
namespace EscudeTools
|
||||
{
|
||||
public class Sheet
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public uint Cols { get; set; }
|
||||
public Column[] Columns { get; set; }
|
||||
|
||||
public class Column
|
||||
{
|
||||
public ushort Type { get; set; }
|
||||
public ushort Size { get; set; }
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
public class DatabaseLoader
|
||||
{
|
||||
public static byte[] LoadFile(string file)
|
||||
{
|
||||
return File.ReadAllBytes(file);
|
||||
}
|
||||
|
||||
public static byte[] DbLoad(string file)
|
||||
{
|
||||
byte[] db = LoadFile(file);
|
||||
int p = 0;
|
||||
|
||||
if (BitConverter.ToUInt32(db, p) != 0x0062646D) // check file magic number == "mdb"
|
||||
{
|
||||
// Handle error (e.g., log or throw an exception)
|
||||
throw new InvalidOperationException($"db_load: {file}");
|
||||
}
|
||||
p += 4;
|
||||
|
||||
while (BitConverter.ToUInt32(db, p) != 0)
|
||||
{
|
||||
uint size = BitConverter.ToUInt32(db, p);
|
||||
var sheet = new Sheet
|
||||
{
|
||||
Columns = new Sheet.Column[1] // Initialize with 1 column (adjust as needed)
|
||||
};
|
||||
p += 4 + (int)size;
|
||||
|
||||
uint dataSize = BitConverter.ToUInt32(db, p);
|
||||
byte[] data = new byte[dataSize];
|
||||
Array.Copy(db, p + 4, data, 0, dataSize);
|
||||
p += 4 + (int)dataSize;
|
||||
|
||||
uint textSize = BitConverter.ToUInt32(db, p);
|
||||
byte[] text = new byte[textSize];
|
||||
Array.Copy(db, p + 4, text, 0, textSize);
|
||||
p += 4 + (int)textSize;
|
||||
|
||||
sheet.Name = Encoding.UTF8.GetString(text); // Assuming UTF-8 encoding
|
||||
uint totalSize = 0;
|
||||
for (int i = 0; i < sheet.Cols; i++)
|
||||
{
|
||||
sheet.Columns[i].Name = Encoding.UTF8.GetString(text); // Adjust accordingly
|
||||
totalSize += sheet.Columns[i].Size;
|
||||
}
|
||||
|
||||
uint index = 0;
|
||||
for (int i = 0; i < sheet.Columns.Length; i++)
|
||||
{
|
||||
if (sheet.Columns[i].Type == 4) // 假设4表示可变长字符串类型
|
||||
{
|
||||
for (uint j = index; j < dataSize; j += totalSize)
|
||||
{
|
||||
// 假设 data 是 byte[],我们需要将 byte[] 转换为 uint 数组
|
||||
uint currentValue = BitConverter.ToUInt32(data, (int)j); // 从字节数组中读取当前的 uint 值
|
||||
currentValue += (uint)text; // 加上 text 的值
|
||||
Array.Copy(BitConverter.GetBytes(currentValue), 0, data, (int)j, sizeof(uint)); // 将更新后的值写回 data
|
||||
}
|
||||
}
|
||||
index += sheet.Columns[i].Size; // 更新索引
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return db; // Return the database as a byte array
|
||||
}
|
||||
public static bool DbSet(byte[] db, string name, uint elemSize, out byte[] data, out int count)
|
||||
{
|
||||
data = null;
|
||||
count = 0;
|
||||
|
||||
if (string.IsNullOrEmpty(name))
|
||||
{
|
||||
throw new ArgumentException("Invalid argument: name cannot be null or empty.", nameof(name));
|
||||
}
|
||||
|
||||
if (db == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(db));
|
||||
}
|
||||
|
||||
int p = 0;
|
||||
if (BitConverter.ToUInt32(db, p) != 0x0062646D)
|
||||
{
|
||||
throw new InvalidOperationException($"db_set: {name}");
|
||||
}
|
||||
p += 4;
|
||||
|
||||
while (BitConverter.ToUInt32(db, p) != 0)
|
||||
{
|
||||
var sheet = new Sheet(); // Create a new instance for each sheet
|
||||
// Assume sheet.Name is set somewhere during loading...
|
||||
|
||||
if (sheet.Name == name)
|
||||
{
|
||||
uint size = 0;
|
||||
for (int i = 0; i < sheet.Cols; i++)
|
||||
{
|
||||
size += sheet.Columns[i].Size;
|
||||
}
|
||||
|
||||
if (size != elemSize)
|
||||
{
|
||||
throw new InvalidOperationException($"db_set: {name} - Data size mismatch.");
|
||||
}
|
||||
|
||||
p += 4 + (int)(BitConverter.ToUInt32(db, p));
|
||||
size = BitConverter.ToUInt32(db, p);
|
||||
data = new byte[size];
|
||||
Array.Copy(db, p + 4, data, 0, size);
|
||||
count = (int)(size / elemSize);
|
||||
return true;
|
||||
}
|
||||
|
||||
p += 4 + (int)(BitConverter.ToUInt32(db, p)); // Move past the data
|
||||
p += 4 + (int)(BitConverter.ToUInt32(db, p)); // Move past text size
|
||||
}
|
||||
|
||||
throw new InvalidOperationException($"db_set: {name} not found.");
|
||||
}
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
using ImageMagick;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace EscudeLSF
|
||||
namespace EscudeTools
|
||||
{
|
||||
internal class Program
|
||||
{
|
||||
@ -13,7 +13,6 @@ namespace EscudeLSF
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
switch (args[0])
|
||||
{
|
||||
case "-h":
|
||||
@ -26,7 +25,7 @@ namespace EscudeLSF
|
||||
}
|
||||
//static void DisplayHelp()
|
||||
//{
|
||||
// Console.WriteLine("Usage: EscudeLSF.exe [-r <filepath>] [-d <directory>] [-s <filepath>] [-h]");
|
||||
// Console.WriteLine("Usage: EscudeTools.exe [-r <filepath>] [-d <directory>] [-s <filepath>] [-h]");
|
||||
// Console.WriteLine("Options:");
|
||||
// Console.WriteLine(" <filepath> Single lsf process");
|
||||
// Console.WriteLine(" -r <filepath> Read single lsf file");
|
Loading…
Reference in New Issue
Block a user