This commit is contained in:
Chenx221 2024-11-01 00:09:27 +08:00
parent 2559d4a438
commit 119ecb9cf9
Signed by: chenx221
GPG Key ID: D7A9EC07024C3021
2 changed files with 109 additions and 104 deletions

View File

@ -8,8 +8,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Magick.NET-Q16-AnyCPU" Version="13.10.0" />
<PackageReference Include="Magick.NET.Core" Version="13.10.0" />
<PackageReference Include="Magick.NET-Q16-AnyCPU" Version="14.0.0" />
<PackageReference Include="Magick.NET.Core" Version="14.0.0" />
<PackageReference Include="NLua" Version="1.7.3" />
<PackageReference Include="System.Threading.Tasks" Version="4.3.0" />
</ItemGroup>

View File

@ -12,26 +12,39 @@ namespace ArtemisFgTools
Console.WriteLine("请输入立绘fg文件夹的所在路径无需\"\"");
string? fgImagePath = Console.ReadLine();
Console.WriteLine("要合并的游戏有找到exlist吗(y/n) ");
Console.WriteLine("有找到exlist吗(y/n) ");
string spModeStr = Console.ReadLine() ?? throw new Exception("Invalid input");
bool spMode = (spModeStr == "n") || (spModeStr == "y" ? false : throw new Exception("Invalid input"));
string? luaFilePath = Console.ReadLine();
if (spMode)
{
dosth();
return;
}
Console.WriteLine("请输入保存位置:");
string? savePath = Console.ReadLine();
if (!Directory.Exists(savePath))
Directory.CreateDirectory(savePath);
if (string.IsNullOrEmpty(fgImagePath) || string.IsNullOrEmpty(luaFilePath) || string.IsNullOrEmpty(savePath))
if (spMode)
{
Console.WriteLine("请输入script文件夹的所在路径");
string? scriptPath = Console.ReadLine();
if (string.IsNullOrEmpty(fgImagePath) || string.IsNullOrEmpty(savePath) || string.IsNullOrEmpty(scriptPath))
{
Console.WriteLine("路径不能为空");
return;
}
if (!Directory.Exists(fgImagePath) || !Directory.Exists(scriptPath))
{
Console.WriteLine("路径不存在");
return;
}
List<FgObject> fgObjects = FetchFgObjectsFromScript(scriptPath);
Process(fgImagePath, savePath, size, fgObjects);
//我忘了size是干啥的了...
return;
}
Console.WriteLine("请输入exlist的文件路径");
string? luaFilePath = Console.ReadLine();
if (string.IsNullOrEmpty(fgImagePath) || string.IsNullOrEmpty(savePath) || string.IsNullOrEmpty(luaFilePath))
{
Console.WriteLine("路径不能为空");
return;
@ -41,10 +54,6 @@ namespace ArtemisFgTools
Console.WriteLine("路径不存在");
return;
}
if (!Directory.Exists(savePath))
{
Directory.CreateDirectory(savePath);
}
Dictionary<object, object>? dictionary = ParseLuaTable(luaFilePath);
@ -53,9 +62,7 @@ namespace ArtemisFgTools
if (dictionary["fg"] is Dictionary<object, object> fgDictionary)
{
if (fgDictionary["size"] is not List<object> size || size.Count == 0)
{
throw new Exception("size not found or empty");
}
fgDictionary.Remove("size");
//convert to FgObject
@ -78,95 +85,93 @@ namespace ArtemisFgTools
}
}
//jmp
foreach (var fgObject in fgObjects)
{
foreach (var siz in size)
{
if (siz != null && fgObject.Path != null)
{
string savePathWithSizePart = Path.Combine(savePath, fgObject.Path, siz.ToString() ?? string.Empty);
string pathWithSize = Path.Combine(fgImagePath, fgObject.Path, siz.ToString() ?? string.Empty);
foreach (var pose in fgObject.Pose)
{
Parallel.ForEach(fgObject.Fuku, fuku =>
{
//💢 skip //For ハミダシクリエイティブ
if (fuku == "99")
{
return;
}
bool special = false;
string special_text = "";
string fuku_current = fuku;
int index = fuku_current.IndexOf('|');
if (index != -1)
{
special = true;
special_text = fuku_current[(index + 1)..];
fuku_current = fuku_current[..index];
}
// <head><siz><pose[0]><fuku><pose[1]>0
// *sp:fuku: 02 | 0099→02fuku & 0099face
string baseImg = Path.Combine(pathWithSize, $"{fgObject.Head}{siz}{pose[0]}{fuku_current}{pose[1]}0.png");
foreach (var face in fgObject.Face[pose[0]])
{
string layerImg = Path.Combine(pathWithSize, $"{face}.png");
string layer2Img = special ? Path.Combine(pathWithSize, $"{pose[0]}{special_text}.png") : ""; //眼镜
string savePathWithAll = Path.Combine(savePathWithSizePart, $"{fgObject.Head}{siz}{pose[0]}{fuku_current}{pose[1]}0_{face}" + (special ? ($"_{pose[0]}{special_text}.png") : (".png")));
ProcessAndSave(baseImg, layerImg, layer2Img, savePathWithAll, special);
}
});
}
}
}
string siz2 = "fa"; //别急着换下一个还有个fa //这里的代码和上面那块一样
if (fgObject.Path != null)
{
string savePathWithSizePart = Path.Combine(savePath, fgObject.Path, siz2.ToString() ?? string.Empty);
string pathWithSize = Path.Combine(fgImagePath, fgObject.Path, siz2.ToString() ?? string.Empty);
foreach (var pose in fgObject.Pose)
{
Parallel.ForEach(fgObject.Fuku, fuku =>
{
//💢 skip //For ハミダシクリエイティブ
if (fuku == "99")
{
return;
}
bool special = false;
string special_text = "";
string fuku_current = fuku;
int index = fuku_current.IndexOf('|');
if (index != -1)
{
special = true;
special_text = fuku_current[(index + 1)..];
fuku_current = fuku_current[..index];
}
string baseImg = Path.Combine(pathWithSize, $"{fgObject.Head}no{pose[0]}{fuku_current}{pose[1]}0.png");
foreach (var face in fgObject.Face[pose[0]])
{
string layerImg = Path.Combine(pathWithSize, $"{face}.png");
string layer2Img = special ? Path.Combine(pathWithSize, $"{pose[0]}{special_text}.png") : "";
string savePathWithAll = Path.Combine(savePathWithSizePart, $"{fgObject.Head}no{pose[0]}{fuku_current}{pose[1]}0_{face}" + (special ? ($"_{pose[0]}{special_text}.png") : (".png")));
ProcessAndSave(baseImg, layerImg, layer2Img, savePathWithAll, special);
}
});
}
}
}
Process(fgImagePath, savePath, size, fgObjects);
}
else
{
Console.WriteLine("fg not found");
}
}
}
private static void dosth()
private static void Process(string? fgImagePath, string? savePath, List<object> size, List<FgObject> fgObjects)
{
throw new NotImplementedException();
foreach (var fgObject in fgObjects)
{
foreach (var siz in size)
{
if (siz != null && fgObject.Path != null)
{
string savePathWithSizePart = Path.Combine(savePath, fgObject.Path, siz.ToString() ?? string.Empty);
string pathWithSize = Path.Combine(fgImagePath, fgObject.Path, siz.ToString() ?? string.Empty);
foreach (var pose in fgObject.Pose)
{
Parallel.ForEach(fgObject.Fuku, fuku =>
{
//💢 skip //For ハミダシクリエイティブ
if (fuku == "99")
{
return;
}
bool special = false;
string special_text = "";
string fuku_current = fuku;
int index = fuku_current.IndexOf('|');
if (index != -1)
{
special = true;
special_text = fuku_current[(index + 1)..];
fuku_current = fuku_current[..index];
}
// <head><siz><pose[0]><fuku><pose[1]>0
// *sp:fuku: 02 | 0099→02fuku & 0099face
string baseImg = Path.Combine(pathWithSize, $"{fgObject.Head}{siz}{pose[0]}{fuku_current}{pose[1]}0.png");
foreach (var face in fgObject.Face[pose[0]])
{
string layerImg = Path.Combine(pathWithSize, $"{face}.png");
string layer2Img = special ? Path.Combine(pathWithSize, $"{pose[0]}{special_text}.png") : ""; //眼镜
string savePathWithAll = Path.Combine(savePathWithSizePart, $"{fgObject.Head}{siz}{pose[0]}{fuku_current}{pose[1]}0_{face}" + (special ? ($"_{pose[0]}{special_text}.png") : (".png")));
ProcessAndSave(baseImg, layerImg, layer2Img, savePathWithAll, special);
}
});
}
}
}
string siz2 = "fa"; //别急着换下一个还有个fa //这里的代码和上面那块一样
if (fgObject.Path != null)
{
string savePathWithSizePart = Path.Combine(savePath, fgObject.Path, siz2.ToString() ?? string.Empty);
string pathWithSize = Path.Combine(fgImagePath, fgObject.Path, siz2.ToString() ?? string.Empty);
foreach (var pose in fgObject.Pose)
{
Parallel.ForEach(fgObject.Fuku, fuku =>
{
//💢 skip //For ハミダシクリエイティブ
if (fuku == "99")
{
return;
}
bool special = false;
string special_text = "";
string fuku_current = fuku;
int index = fuku_current.IndexOf('|');
if (index != -1)
{
special = true;
special_text = fuku_current[(index + 1)..];
fuku_current = fuku_current[..index];
}
string baseImg = Path.Combine(pathWithSize, $"{fgObject.Head}no{pose[0]}{fuku_current}{pose[1]}0.png");
foreach (var face in fgObject.Face[pose[0]])
{
string layerImg = Path.Combine(pathWithSize, $"{face}.png");
string layer2Img = special ? Path.Combine(pathWithSize, $"{pose[0]}{special_text}.png") : "";
string savePathWithAll = Path.Combine(savePathWithSizePart, $"{fgObject.Head}no{pose[0]}{fuku_current}{pose[1]}0_{face}" + (special ? ($"_{pose[0]}{special_text}.png") : (".png")));
ProcessAndSave(baseImg, layerImg, layer2Img, savePathWithAll, special);
}
});
}
}
}
}
private static void ProcessAndSave(string baseImg, string layerImg, string layer2Img, string target, bool special)