2024-07-26 20:49:10 +05:00

42 lines
2.1 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Text;
using SoulstormReplayReader.Core.Extensions;
namespace SoulstormReplayReader.Core.Services;
public static class ReplayService
{
public static void Rename(Stream inStream, Stream outStream, string newName)
{
var binaryReader = new ExBinaryReader(inStream);
var binaryWriter = new BinaryWriter(outStream);
// Костыльное нахождение длины старого имени игры
binaryReader
.Skip(182) // Перемещаюсь на позицию после (GameInfo.FOLDWMAN....)
.Skip(binaryReader.ReadInt32() + 20) // DataSdscSize + 24
.Skip(85);
var bytesLengthDifference = (newName.Length - binaryReader.ReadInt32()) * 2;
binaryReader.Seek(0);
binaryWriter.Write(binaryReader.ReadBytes(149 + 4)); // Перемещаюсь к позиции перед размером FOLDINFO
binaryWriter.Write(binaryReader.ReadInt32() + bytesLengthDifference); // Переписываю, добавляя разность длинн имен
binaryWriter.Write(binaryReader.ReadBytes(21 + 4)); // Иду к позиции перед размером FOLDWMAN
var foldWmanSize = binaryReader.ReadInt32();
binaryWriter.Write(foldWmanSize);
binaryWriter.Write(binaryReader.ReadBytes(foldWmanSize + 16)); // Телепортируюсь к позиции перед размером DataBase
binaryWriter.Write(binaryReader.ReadInt32() + bytesLengthDifference); // Переписываю, добавляя разность длинн имен
binaryWriter.Write(binaryReader.ReadBytes(85)); // Первые 85 байт DataBase статичные
binaryWriter.Write(newName.Length); // После них идет длина имени игры
binaryReader.Skip(binaryReader.ReadInt32() * 2);
binaryWriter.Write(Encoding.Unicode.GetBytes(newName)); // И ее имя
while (binaryReader.HasBytes)
binaryWriter.Write(binaryReader.ReadByte());
binaryWriter.Flush();
}
}