Release v0.4.9.1
AddParam, AET
This commit is contained in:
+43
-6
@@ -1,4 +1,6 @@
|
||||
namespace KKdBaseLib.Auth2D
|
||||
//Original: AetSet.bt Version: 5.0 by samyuu
|
||||
|
||||
namespace KKdBaseLib.Auth2D
|
||||
{
|
||||
public struct Header
|
||||
{
|
||||
@@ -122,11 +124,46 @@
|
||||
|
||||
public enum TransferBlendMode : byte
|
||||
{
|
||||
Alpha = 3,
|
||||
Additive = 5,
|
||||
DstColorZero = 6,
|
||||
SrcAlphaOneMinusSrcColor = 7,
|
||||
Transparent = 8,
|
||||
None = 0,
|
||||
Copy = 1,
|
||||
Behind = 2,
|
||||
Normal = 3,
|
||||
Dissolve = 4,
|
||||
Add = 5,
|
||||
Multiply = 6,
|
||||
Screen = 7,
|
||||
Overlay = 8,
|
||||
SoftLight = 9,
|
||||
HardLight = 10,
|
||||
Darken = 11,
|
||||
Lighten = 12,
|
||||
ClassicDifference = 13,
|
||||
Hue = 14,
|
||||
Saturation = 15,
|
||||
Color = 16,
|
||||
Luminosity = 17,
|
||||
StenciilAlpha = 18,
|
||||
StencilLuma = 19,
|
||||
SilhouetteAlpha = 20,
|
||||
SilhouetteLuma = 21,
|
||||
LuminescentPremul = 22,
|
||||
AlphaAdd = 23,
|
||||
ClassicColorDodge = 24,
|
||||
ClassicColorBurn = 25,
|
||||
Exclusion = 26,
|
||||
Difference = 27,
|
||||
ColorDodge = 28,
|
||||
ColorBurn = 29,
|
||||
LinearDodge = 30,
|
||||
LinearBurn = 31,
|
||||
LinearLight = 32,
|
||||
VividLight = 33,
|
||||
PinLight = 34,
|
||||
HardMix = 35,
|
||||
LighterColor = 36,
|
||||
DarkerColor = 37,
|
||||
Subtract = 38,
|
||||
Divide = 39,
|
||||
}
|
||||
|
||||
public enum TransferFlags : byte
|
||||
|
||||
@@ -6,12 +6,12 @@
|
||||
<Configuration></Configuration>
|
||||
<Copyright>korenkonder © 2019-2020</Copyright>
|
||||
<Description>A base library</Description>
|
||||
<FileVersion>0.4.9.0</FileVersion>
|
||||
<FileVersion>0.4.9.1</FileVersion>
|
||||
<PackageId>KKdBaseLib</PackageId>
|
||||
<Product>KKdBaseLib</Product>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<Title>KKdBaseLib</Title>
|
||||
<Version>0.4.9.0</Version>
|
||||
<Version>0.4.9.1</Version>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
|
||||
@@ -49,6 +49,12 @@
|
||||
set { if (keyArray != null && valArray != null && index < keyArray.Length &&
|
||||
index < valArray.Length) { keyArray[index] = value.Key; valArray[index] = value.Value; } } }
|
||||
|
||||
public KeyValuePair<TKey, TValue> this[long index, bool list]
|
||||
{ get => keyArray != null && valArray != null && index > -1 && index < keyArray.Length &&
|
||||
index < valArray.Length ? new KeyValuePair<TKey, TValue>(keyArray[index], valArray[index]) : default;
|
||||
set { if (keyArray != null && valArray != null && index > -1 && index < keyArray.Length &&
|
||||
index < valArray.Length) { keyArray[index] = value.Key; valArray[index] = value.Value; } } }
|
||||
|
||||
public TValue this[TKey key]
|
||||
{ get => valArray != null && valArray.Length > 0 && CK(key, out int index) ? valArray[index] : default;
|
||||
set { if (valArray != null && valArray.Length > 0) if (CK(key, out int index)) valArray[index] = value; else Add(key, value); } }
|
||||
|
||||
@@ -43,6 +43,10 @@ namespace KKdBaseLib
|
||||
{ get => array != null && index < array.Length ? array[index] : default;
|
||||
set { if (array != null && index < array.Length) array[index] = value; } }
|
||||
|
||||
public T this[long index]
|
||||
{ get => array != null && index < array.Length ? array[index] : default;
|
||||
set { if (array != null && index < array.Length) array[index] = value; } }
|
||||
|
||||
public IEnumerator GetEnumerator() => enumerator = new Enumerator(array);
|
||||
|
||||
IEnumerator<T> IEnumerable<T>.GetEnumerator() => enumerator = new Enumerator(array);
|
||||
|
||||
@@ -36,6 +36,10 @@ namespace KKdBaseLib
|
||||
{ get => Object is MsgPack[] Array ? Array[index] : default;
|
||||
set { if (Object is MsgPack[] Array) { Array[index] = value; Object = Array; } } }
|
||||
|
||||
public MsgPack this[long index]
|
||||
{ get => Object is MsgPack[] Array ? Array[index] : default;
|
||||
set { if (Object is MsgPack[] Array) { Array[index] = value; Object = Array; } } }
|
||||
|
||||
public MsgPack this[string key]
|
||||
{ get => Object is KKdList<MsgPack> List ? List[ElementIndex(key)] : default;
|
||||
set { if (Object is KKdList<MsgPack> List && value.Object != null)
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
using KKdBaseLib;
|
||||
using KKdMainLib.IO;
|
||||
|
||||
namespace KKdMainLib
|
||||
{
|
||||
public unsafe struct AddParam : System.IDisposable
|
||||
{
|
||||
private long i;
|
||||
private Stream _IO;
|
||||
|
||||
public HeaderData Header;
|
||||
|
||||
public void MotHeadReader(string file)
|
||||
{
|
||||
Header = new HeaderData();
|
||||
|
||||
_IO = File.OpenReader(file + ".adp");
|
||||
Header.Count = _IO.RI64();
|
||||
Header.DataLength = _IO.RI64();
|
||||
Header.DataOffset = _IO.RI64();
|
||||
|
||||
if (Header.Count < 1 || Header.DataOffset > _IO.P || Header.DataLength > _IO.LI64
|
||||
- Header.DataOffset || Header.Count * 0x20 > _IO.LI64 - Header.DataOffset) { _IO.C(); return; }
|
||||
|
||||
Header.Data = new HeaderData.Sub[Header.Count];
|
||||
byte[] data = _IO.RBy(Header.DataLength, Header.DataOffset);
|
||||
_IO.C();
|
||||
|
||||
fixed (byte* ptr = data)
|
||||
{
|
||||
HeaderData.Sub* hPtr = (HeaderData.Sub*)ptr;
|
||||
for (i = 0; i < Header.Count; i++)
|
||||
Header.Data[i] = hPtr[i];
|
||||
}
|
||||
|
||||
data = null;
|
||||
}
|
||||
|
||||
public void MotHeadWriter(string file)
|
||||
{
|
||||
if (Header.Data == null || Header.Data.LongLength < 1) return;
|
||||
|
||||
Header.Count = Header.Data.LongLength;
|
||||
Header.DataLength = Header.Count * 0x20;
|
||||
Header.DataOffset = 0x18L;
|
||||
|
||||
byte[] data = new byte[Header.DataLength];
|
||||
fixed (byte* ptr = data)
|
||||
{
|
||||
HeaderData.Sub* hPtr = (HeaderData.Sub*)ptr;
|
||||
for (i = 0; i < Header.Count; i++)
|
||||
hPtr[i] = Header.Data[i];
|
||||
}
|
||||
|
||||
_IO = File.OpenWriter(file + ".adp", true);
|
||||
_IO.W(Header.Count);
|
||||
_IO.W(Header.DataLength);
|
||||
_IO.W(Header.DataOffset);
|
||||
_IO.W(data);
|
||||
_IO.C();
|
||||
data = null;
|
||||
}
|
||||
|
||||
public void MsgPackReader(string file, bool json)
|
||||
{
|
||||
Header = new HeaderData();
|
||||
|
||||
MsgPack addParam;
|
||||
MsgPack msgPack = file.ReadMPAllAtOnce(json);
|
||||
if ((addParam = msgPack["AddParam", true]).IsNull) return;
|
||||
|
||||
Header.Count = addParam.Array.LongLength;
|
||||
Header.Data = new HeaderData.Sub[Header.Count];
|
||||
for (i = 0; i < Header.Count; i++)
|
||||
{
|
||||
ref HeaderData.Sub sub = ref Header.Data[i];
|
||||
sub.Time = addParam[i].RF32("Time");
|
||||
sub.Flags = addParam[i].RI32("Flags");
|
||||
sub.Frame = addParam[i].RI32("Frame");
|
||||
sub.ID = addParam[i].RI32("ID");
|
||||
sub.Value = addParam[i].RF32("Value");
|
||||
|
||||
sub.PVBranch = addParam[i].RnI32("PVBranch") ?? 0;
|
||||
float? f = addParam[i].RnF32("Value");
|
||||
if (f.HasValue)
|
||||
{
|
||||
if (sub.ID == 0) { float v = 0; *(uint*)&v = addParam[i].RU32("Value"); sub.Value = v; }
|
||||
else sub.Value = f.Value;
|
||||
}
|
||||
else { float v = 0; *(uint*)&v = 0xFFFFFFFF; sub.Value = v; }
|
||||
|
||||
}
|
||||
|
||||
msgPack.Dispose();
|
||||
}
|
||||
|
||||
public void MsgPackWriter(string file, bool json)
|
||||
{
|
||||
if (Header.Data == null || Header.Data.LongLength < 1) return;
|
||||
|
||||
MsgPack addParam = new MsgPack(Header.Data.LongLength, "AddParam");
|
||||
fixed (HeaderData.Sub* ptr = Header.Data)
|
||||
for (i = 0; i < Header.Count; i++)
|
||||
{
|
||||
ref HeaderData.Sub sub = ref Header.Data[i];
|
||||
addParam[i] = MsgPack.New.Add("Time", sub.Time).Add("Flags", sub.Flags).Add("Frame", sub.Frame);
|
||||
|
||||
if (sub.PVBranch > 0)
|
||||
addParam[i] = addParam[i].Add("PVBranch", sub.PVBranch);
|
||||
|
||||
addParam[i] = addParam[i].Add("ID", sub.ID);
|
||||
|
||||
if (sub.ID == 0)
|
||||
addParam[i] = addParam[i].Add("Value", *(uint*)&ptr[i].Value);
|
||||
else if (*(uint*)&ptr[i].Value != 0xFFFFFFFF)
|
||||
addParam[i] = addParam[i].Add("Value", sub.Value);
|
||||
|
||||
}
|
||||
addParam.WriteAfterAll(true, file, json);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{ if (_IO != null) { if (_IO.CanRead || _IO.CanWrite) _IO.D(); _IO = null; } Header = default; }
|
||||
|
||||
public struct HeaderData
|
||||
{
|
||||
public long Count;
|
||||
public long DataLength;
|
||||
public long DataOffset;
|
||||
|
||||
public Sub[] Data;
|
||||
|
||||
public struct Sub
|
||||
{
|
||||
public float Time;
|
||||
public int Flags;
|
||||
public int Frame;
|
||||
public int Pad0C;
|
||||
public int PVBranch;
|
||||
public int ID;
|
||||
public float Value;
|
||||
public int Pad1C;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -303,14 +303,14 @@ namespace KKdMainLib.IO
|
||||
public string RSUTF8 (long? length) => RBy(length).ToUTF8 ();
|
||||
public string RSASCII(long? length) => RBy(length).ToASCII();
|
||||
|
||||
public byte[] RBy(long length, int offset = -1)
|
||||
public byte[] RBy(long length, long offset = -1)
|
||||
{ byte[] Buf = new byte[length]; if (offset > -1) s.Position = offset;
|
||||
s.Read(Buf, 0, (int)length); return Buf; }
|
||||
|
||||
public int RBy(long length, byte[] buf, long offset = -1)
|
||||
{ if (offset > -1) s.Position = offset; return s.Read(buf, 0, (int)length); }
|
||||
|
||||
public byte[] RBy(long? length, int offset = -1)
|
||||
public byte[] RBy(long? length, long offset = -1)
|
||||
{ if (length == null) return new byte[0]; else return RBy((long)length, offset); }
|
||||
|
||||
public void RBy(long length, byte bits, byte[] buf, long offset = -1)
|
||||
|
||||
@@ -6,12 +6,12 @@
|
||||
<Configuration></Configuration>
|
||||
<Copyright>korenkonder © 2018-2020</Copyright>
|
||||
<Description>A simple library for working with Project Diva AC/DT/F/AFT/F2/X/FT/M39 files</Description>
|
||||
<FileVersion>0.4.9.0</FileVersion>
|
||||
<FileVersion>0.4.9.1</FileVersion>
|
||||
<PackageId>KKdMainLib</PackageId>
|
||||
<Product>KKdMainLib</Product>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<Title>KKdMainLib</Title>
|
||||
<Version>0.4.9.0</Version>
|
||||
<Version>0.4.9.1</Version>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
|
||||
+40
-29
@@ -3,7 +3,7 @@ using KKdMainLib.IO;
|
||||
|
||||
namespace KKdMainLib
|
||||
{
|
||||
public struct MotHead
|
||||
public struct MotHead : System.IDisposable
|
||||
{
|
||||
private int i, i0, i1;
|
||||
private Stream _IO;
|
||||
@@ -92,7 +92,8 @@ namespace KKdMainLib
|
||||
for (i0 = 0; i0 < Header.Data[i].Array.Length; i0++)
|
||||
{
|
||||
ref HeaderData.Sub.Data Data = ref Header.Data[i].Array[i0];
|
||||
if (!GetSize(Data.Type, out i1)) goto RETURN;
|
||||
if ((i1 = GetSize(Data.Type)) < 1) continue;
|
||||
|
||||
|
||||
if (Data.Offset > 0)
|
||||
{
|
||||
@@ -152,27 +153,25 @@ RETURN:
|
||||
for (i0 = Header.Data[i].Array.Length - 1; i0 > -1; i0--)
|
||||
{
|
||||
ref HeaderData.Sub.Data data = ref Header.Data[i].Array[i0];
|
||||
if (data.Array != null)
|
||||
if (data.Array.Length > 0 &&
|
||||
GetSize(data.Type, out int Size))
|
||||
{
|
||||
if (data.Type == 0x3E) _IO.A(0x20, true);
|
||||
data.Offset = _IO.P;
|
||||
|
||||
if (Size == 0x01) _IO.W(( byte)data.Array[0]);
|
||||
else if (Size == 0x02) _IO.W((short)data.Array[0]);
|
||||
else
|
||||
{
|
||||
if (_IO.P % 0x4 != 0) _IO.A(0x04, true);
|
||||
Size /= 4;
|
||||
|
||||
data.Offset = _IO.P;
|
||||
for (i1 = 0; i1 < data.Array.Length && i1 < Size; i1++)
|
||||
_IO.W(data.Array[i1]);
|
||||
|
||||
for (; i1 < Size; i1++) _IO.W(0);
|
||||
}
|
||||
}
|
||||
int Size = GetSize(data.Type);
|
||||
if (data.Array == null || data.Array.Length < 1 || Size < 1) continue;
|
||||
|
||||
if (data.Type == 0x3E) _IO.A(0x20, true);
|
||||
data.Offset = _IO.P;
|
||||
|
||||
if (Size == 0x01) _IO.W(( byte)data.Array[0]);
|
||||
else if (Size == 0x02) _IO.W((short)data.Array[0]);
|
||||
else
|
||||
{
|
||||
if (_IO.P % 0x4 != 0) _IO.A(0x04, true);
|
||||
Size /= 4;
|
||||
|
||||
data.Offset = _IO.P;
|
||||
for (i1 = 0; i1 < data.Array.Length && i1 < Size; i1++)
|
||||
_IO.W(data.Array[i1]);
|
||||
|
||||
for (; i1 < Size; i1++) _IO.W(0);
|
||||
}
|
||||
}
|
||||
|
||||
if (Header.Data[i].Array2 != null)
|
||||
@@ -678,16 +677,26 @@ RETURN:
|
||||
motHead.WriteAfterAll(true, file, json);
|
||||
}
|
||||
|
||||
private static bool GetSize(int Type, out int Size)
|
||||
{
|
||||
Size = Type switch
|
||||
private static int GetSize(int Type) =>
|
||||
Type switch
|
||||
{
|
||||
0x02 => 0x02,
|
||||
0x03 => 0x04,
|
||||
0x04 => 0x04,
|
||||
0x07 => 0x08,
|
||||
0x08 => 0x08,
|
||||
0x0D => 0x0C,
|
||||
0x11 => 0x1C,
|
||||
0x1D => 0x30,
|
||||
0x20 => 0x10,
|
||||
0x21 => 0x18,
|
||||
0x35 => 0x14,
|
||||
0x36 => 0x14,
|
||||
0x37 => 0x14,
|
||||
0x38 => 0x14,
|
||||
0x39 => 0x14,
|
||||
0x3A => 0x14,
|
||||
0x3B => 0x04,
|
||||
0x3C => 0x10,
|
||||
0x3D => 0x08,
|
||||
0x3E => 0x40,
|
||||
@@ -705,12 +714,14 @@ RETURN:
|
||||
0x4B => 0x34,
|
||||
0x4C => 0x10,
|
||||
0x4D => 0x04,
|
||||
0x4E => 0x1C,
|
||||
0x4F => 0x01,
|
||||
0x50 => 0x04,
|
||||
0x50 => 0x01,
|
||||
_ => 0x00,
|
||||
};
|
||||
return Size > 0;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{ if (_IO != null) { if (_IO.CanRead || _IO.CanWrite) _IO.D(); _IO = null; } Header = default; }
|
||||
|
||||
public struct HeaderData
|
||||
{
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="classes\A3D.cs" />
|
||||
<Compile Include="classes\ADP.cs" />
|
||||
<Compile Include="classes\AET.cs" />
|
||||
<Compile Include="classes\BLT.cs" />
|
||||
<Compile Include="classes\CCT.cs" />
|
||||
|
||||
+39
-5
@@ -56,10 +56,11 @@ namespace PD_Tool
|
||||
ConsoleDesign("3. Decrypt from DIVAFILE");
|
||||
ConsoleDesign("4. Encrypt to DIVAFILE");
|
||||
ConsoleDesign("5. DB_Tools");
|
||||
ConsoleDesign("6. AC/DT/F/AFT/FT Converting Tools");
|
||||
ConsoleDesign("7. F/F2/FT Converting Tools");
|
||||
ConsoleDesign("8. X/XHD Converting Tools");
|
||||
ConsoleDesign(json ? "9. MsgPack to JSON" : "9. JSON to MsgPack");
|
||||
ConsoleDesign("6. AC/DT/F/AFT Converting Tools");
|
||||
ConsoleDesign("7. F/F2/FT Converting Tools");
|
||||
ConsoleDesign("8. X/XHD Converting Tools");
|
||||
ConsoleDesign("9. FT/M39 Converting Tools");
|
||||
ConsoleDesign(json ? "A. MsgPack to JSON" : "A. JSON to MsgPack");
|
||||
ConsoleDesign(false);
|
||||
ConsoleDesign(json ? "M. MessagePack" : "J. JSON");
|
||||
ConsoleDesign("Q. Quit");
|
||||
@@ -87,7 +88,7 @@ namespace PD_Tool
|
||||
else if (choose == "6")
|
||||
{
|
||||
Console.Clear();
|
||||
Console.Title = "AC/DT/F/AFT/FT Converting Tools";
|
||||
Console.Title = "AC/DT/F/AFT Converting Tools";
|
||||
ConsoleDesign(true);
|
||||
ConsoleDesign(" Choose converter:");
|
||||
ConsoleDesign(false);
|
||||
@@ -170,6 +171,39 @@ namespace PD_Tool
|
||||
else choose = localChoose;
|
||||
}
|
||||
else if (choose == "9")
|
||||
{
|
||||
Console.Clear();
|
||||
Console.Title = "FT/M39 Converting Tools";
|
||||
ConsoleDesign(true);
|
||||
ConsoleDesign(" Choose converter:");
|
||||
ConsoleDesign(false);
|
||||
ConsoleDesign("1. A3DA" );
|
||||
ConsoleDesign("2. AddParam");
|
||||
ConsoleDesign("3. AET" );
|
||||
ConsoleDesign("4. DEX" );
|
||||
ConsoleDesign("5. DIVA" );
|
||||
ConsoleDesign("6. MotHead" );
|
||||
ConsoleDesign("7. MOT" );
|
||||
ConsoleDesign("8. Table" );
|
||||
ConsoleDesign("9. STR" );
|
||||
ConsoleDesign(false);
|
||||
ConsoleDesign("R. Return to Main Menu");
|
||||
ConsoleDesign(false);
|
||||
ConsoleDesign(true);
|
||||
Console.WriteLine();
|
||||
string localChoose = Console.ReadLine().ToUpper();
|
||||
if (localChoose == "1") A3D.Processor(json);
|
||||
else if (localChoose == "2") ADP.Processor(json);
|
||||
else if (localChoose == "3") AET.Processor(json);
|
||||
else if (localChoose == "4") DEX.Processor(json);
|
||||
else if (localChoose == "5") DIV.Processor();
|
||||
else if (localChoose == "6") MHD.Processor(json);
|
||||
else if (localChoose == "7") MOT.Processor(json);
|
||||
else if (localChoose == "8") TBL.Processor(json);
|
||||
else if (localChoose == "9") STR.Processor(json);
|
||||
else choose = localChoose;
|
||||
}
|
||||
else if (choose == "A")
|
||||
{
|
||||
Console.Title = json ? "MsgPack to JSON" : "JSON to MsgPack";
|
||||
Choose(1, json ? "mp" : "json", out string[] fileNames);
|
||||
|
||||
@@ -11,5 +11,5 @@ using System.Runtime.InteropServices;
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
[assembly: Guid("7B5D5A3A-A6F8-4813-C97D-ACFC98F7397E")]
|
||||
[assembly: AssemblyVersion("0.4.9.0")]
|
||||
[assembly: AssemblyFileVersion("0.4.9.0")]
|
||||
[assembly: AssemblyVersion("0.4.9.1")]
|
||||
[assembly: AssemblyFileVersion("0.4.9.1")]
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using KKdMainLib;
|
||||
using KKdMainLib.IO;
|
||||
|
||||
namespace PD_Tool
|
||||
{
|
||||
public class ADP
|
||||
{
|
||||
public static void Processor(bool json)
|
||||
{
|
||||
Console.Title = "Add Param Converter";
|
||||
Program.Choose(1, "adp", out string[] fileNames);
|
||||
if (fileNames.Length < 1) return;
|
||||
|
||||
string filepath, ext;
|
||||
AddParam adp;
|
||||
foreach (string file in fileNames)
|
||||
{
|
||||
adp = new AddParam();
|
||||
ext = Path.GetExtension(file);
|
||||
filepath = file.Replace(ext, "");
|
||||
ext = ext.ToLower();
|
||||
|
||||
Console.Title = "Add Param Converter: " + Path.GetFileNameWithoutExtension(file);
|
||||
if (ext == ".adp")
|
||||
{
|
||||
adp.MotHeadReader(filepath);
|
||||
adp.MsgPackWriter(filepath, json);
|
||||
}
|
||||
else if (ext == ".mp" || ext == ".json")
|
||||
{
|
||||
adp.MsgPackReader(filepath, ext == ".json");
|
||||
adp.MotHeadWriter(filepath);
|
||||
}
|
||||
adp.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -32,7 +32,7 @@ namespace PD_Tool
|
||||
mhd.MsgPackReader(filepath, ext == ".json");
|
||||
mhd.MotHeadWriter(filepath);
|
||||
}
|
||||
mhd = new MotHead();
|
||||
mhd.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user