Here is a little snippet how to read the silkroad version from the sv.t
and create a sv.t in C#.
Thanks to pushedx for the explanation about the file structure.
and create a sv.t in C#.
Thanks to pushedx for the explanation about the file structure.
Code:
public static void WriteSVTFile(byte[] buffer, int newVersion)
{
pk2Reader.Blowfish bf = new pk2Reader.Blowfish(Encoding.ASCII.GetBytes("SILKROADVERSION"), 0, 8);
Array.Reverse(buffer, 4, 4);
Array.Reverse(buffer, 8, 4);
bf.Decrypt(buffer, 4, buffer, 4, 8);
Array.Reverse(buffer, 4, 4);
Array.Reverse(buffer, 8, 4);
int version;
int.TryParse(Encoding.ASCII.GetString(buffer, 4, 4), out version);
byte[] tmp = Encoding.ASCII.GetBytes(newVersion.ToString());
tmp.CopyTo(buffer, 4);
Array.Reverse(buffer, 8, 4);
Array.Reverse(buffer, 4, 4);
bf.Encrypt(buffer, 4, buffer, 4, 8);
Array.Reverse(buffer, 8, 4);
Array.Reverse(buffer, 4, 4);
File.WriteAllBytes("sv.t", buffer);
}
public static uint ReadVersion(byte[] buffer)
{
pk2Reader.Blowfish bf = new pk2Reader.Blowfish(Encoding.ASCII.GetBytes("SILKROADVERSION"), 0, 8);
Array.Reverse(buffer, 4, 4);
Array.Reverse(buffer, 8, 4);
bf.Decrypt(buffer, 4, buffer, 4, 8);
Array.Reverse(buffer, 4, 4);
Array.Reverse(buffer, 8, 4);
int version;
int.TryParse(Encoding.ASCII.GetString(buffer, 4, 4), out version);
if (PatchInfo.lastClientVersion != 0)
{
PatchInfo.lastClientVersion = (uint)version;
}
return (uint)version;
}