forked from Snoooopy/MetroUnlocker
107 lines
2.5 KiB
C#
107 lines
2.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.IO;
|
|
|
|
namespace MetroUnlocker.LibTSForge.PhysicalStore
|
|
{
|
|
public class ModernBlock
|
|
{
|
|
public BlockType Type;
|
|
public uint Flags;
|
|
public uint Unknown;
|
|
public byte[] Key;
|
|
public string KeyAsStr
|
|
{
|
|
get
|
|
{
|
|
return Utils.DecodeString(Key);
|
|
}
|
|
set
|
|
{
|
|
Key = Utils.EncodeString(value);
|
|
}
|
|
}
|
|
public byte[] Value;
|
|
public string ValueAsStr
|
|
{
|
|
get
|
|
{
|
|
return Utils.DecodeString(Value);
|
|
}
|
|
set
|
|
{
|
|
Value = Utils.EncodeString(value);
|
|
}
|
|
}
|
|
public uint ValueAsInt
|
|
{
|
|
get
|
|
{
|
|
return BitConverter.ToUInt32(Value, 0);
|
|
}
|
|
set
|
|
{
|
|
Value = BitConverter.GetBytes(value);
|
|
}
|
|
}
|
|
public byte[] Data;
|
|
public string DataAsStr
|
|
{
|
|
get
|
|
{
|
|
return Utils.DecodeString(Data);
|
|
}
|
|
set
|
|
{
|
|
Data = Utils.EncodeString(value);
|
|
}
|
|
}
|
|
public uint DataAsInt
|
|
{
|
|
get
|
|
{
|
|
return BitConverter.ToUInt32(Data, 0);
|
|
}
|
|
set
|
|
{
|
|
Data = BitConverter.GetBytes(value);
|
|
}
|
|
}
|
|
|
|
public void Encode(BinaryWriter writer)
|
|
{
|
|
writer.Write((uint)Type);
|
|
writer.Write(Flags);
|
|
writer.Write((uint)Value.Length);
|
|
writer.Write((uint)Data.Length);
|
|
writer.Write(Unknown);
|
|
writer.Write(Value);
|
|
writer.Write(Data);
|
|
}
|
|
|
|
public static ModernBlock Decode(BinaryReader reader)
|
|
{
|
|
uint type = reader.ReadUInt32();
|
|
uint flags = reader.ReadUInt32();
|
|
|
|
uint valueLen = reader.ReadUInt32();
|
|
uint dataLen = reader.ReadUInt32();
|
|
uint unk3 = reader.ReadUInt32();
|
|
|
|
byte[] value = reader.ReadBytes((int)valueLen);
|
|
byte[] data = reader.ReadBytes((int)dataLen);
|
|
|
|
return new ModernBlock
|
|
{
|
|
Type = (BlockType)type,
|
|
Flags = flags,
|
|
Unknown = unk3,
|
|
Value = value,
|
|
Data = data,
|
|
};
|
|
}
|
|
}
|
|
}
|