Corrected UniqueId implementation.
Thanks @Anaminus!
This commit is contained in:
parent
3209d87331
commit
f2d751a4c9
@ -656,8 +656,10 @@ namespace RobloxFiles.BinaryFormat.Chunks
|
||||
{
|
||||
readProperties(i =>
|
||||
{
|
||||
var buffer = reader.ReadBytes(16);
|
||||
return new Guid(buffer);
|
||||
var index = reader.ReadUInt32();
|
||||
var time = reader.ReadUInt32();
|
||||
var random = reader.ReadUInt64();
|
||||
return new UniqueId(index, time, random);
|
||||
});
|
||||
|
||||
break;
|
||||
@ -1293,9 +1295,10 @@ namespace RobloxFiles.BinaryFormat.Chunks
|
||||
{
|
||||
props.ForEach(prop =>
|
||||
{
|
||||
var guid = prop.CastValue<Guid>();
|
||||
byte[] buffer = guid.ToByteArray();
|
||||
writer.Write(buffer);
|
||||
var uniqueId = prop.CastValue<UniqueId>();
|
||||
writer.Write(uniqueId.Index);
|
||||
writer.Write(uniqueId.Time);
|
||||
writer.Write(uniqueId.Random);
|
||||
});
|
||||
|
||||
break;
|
||||
|
16
DataTypes/UniqueId.cs
Normal file
16
DataTypes/UniqueId.cs
Normal file
@ -0,0 +1,16 @@
|
||||
namespace RobloxFiles.DataTypes
|
||||
{
|
||||
public struct UniqueId
|
||||
{
|
||||
public readonly uint Time;
|
||||
public readonly uint Index;
|
||||
public readonly ulong Random;
|
||||
|
||||
public UniqueId(uint time, uint index, ulong random)
|
||||
{
|
||||
Time = time;
|
||||
Index = index;
|
||||
Random = random;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,9 +1,10 @@
|
||||
using System;
|
||||
using System.Xml;
|
||||
using RobloxFiles.DataTypes;
|
||||
|
||||
namespace RobloxFiles.Tokens
|
||||
{
|
||||
public class UniqueId : IXmlPropertyToken
|
||||
public class UniqueIdToken : IXmlPropertyToken
|
||||
{
|
||||
public string XmlPropertyToken => "UniqueId";
|
||||
|
||||
@ -13,7 +14,13 @@ namespace RobloxFiles.Tokens
|
||||
|
||||
if (Guid.TryParse(hex, out var guid))
|
||||
{
|
||||
prop.Value = guid;
|
||||
var bytes = guid.ToByteArray();
|
||||
var random = BitConverter.ToUInt64(bytes, 0);
|
||||
|
||||
var time = BitConverter.ToUInt32(bytes, 8);
|
||||
var index = BitConverter.ToUInt32(bytes, 12);
|
||||
|
||||
prop.Value = new UniqueId(time, index, random);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -22,7 +29,18 @@ namespace RobloxFiles.Tokens
|
||||
|
||||
public void WriteProperty(Property prop, XmlDocument doc, XmlNode node)
|
||||
{
|
||||
var guid = prop.CastValue<Guid>();
|
||||
var uniqueId = prop.CastValue<UniqueId>();
|
||||
var random = BitConverter.GetBytes(uniqueId.Random);
|
||||
|
||||
var time = BitConverter.GetBytes(uniqueId.Time);
|
||||
var index = BitConverter.GetBytes(uniqueId.Index);
|
||||
|
||||
var bytes = new byte[16];
|
||||
random.CopyTo(bytes, 0);
|
||||
time.CopyTo(bytes, 8);
|
||||
index.CopyTo(bytes, 12);
|
||||
|
||||
var guid = new Guid(bytes);
|
||||
node.InnerText = guid.ToString("N");
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user