public static UEProperty Read(BinaryReader reader) { if (reader.PeekChar() < 0) { return(null); } var name = reader.ReadUEString(); if (name == null) { return(null); } if (name == "None") { return new UENoneProperty { Name = name } } ; var type = reader.ReadUEString(); var valueLength = reader.ReadInt64(); return(UESerializer.Deserialize(name, type, valueLength, reader)); }
public UEArrayProperty(BinaryReader reader, long valueLength) { ItemType = reader.ReadUEString(); var terminator = reader.ReadByte(); if (terminator != 0) { throw new FormatException($"Offset: 0x{reader.BaseStream.Position - 1:x8}. Expected terminator (0x00), but was (0x{terminator:x2})"); } // valueLength starts here var count = reader.ReadInt32(); Items = new UEProperty[count]; switch (ItemType) { case "StructProperty": Items = Read(reader, count); break; case "ByteProperty": Items = UEByteProperty.Read(reader, valueLength, count); break; default: { for (var i = 0; i < count; i++) { Items[i] = UESerializer.Deserialize(null, ItemType, -1, reader); } break; } } }
static void Main(string[] args) { if (args.Length != 1) { Console.WriteLine("Usage:"); Console.WriteLine(" gvas-converter path_to_save_file|path_to_json"); return; } var ext = Path.GetExtension(args[0]).ToLower(); if (ext == ".json") { Console.WriteLine("Not implemented atm"); } else { Console.WriteLine("Parsing UE4 save file structure..."); Gvas save; using (var stream = File.Open(args[0], FileMode.Open, FileAccess.Read, FileShare.Read)) save = UESerializer.Read(stream); Console.WriteLine("Converting to json..."); var json = JsonConvert.SerializeObject(save, new JsonSerializerSettings { Formatting = Formatting.Indented }); Console.WriteLine("Saving json..."); using (var stream = File.Open(args[0] + ".json", FileMode.Create, FileAccess.Write, FileShare.Read)) using (var writer = new StreamWriter(stream, new UTF8Encoding(false))) writer.Write(json); } Console.WriteLine("Done."); Console.ReadKey(true); }
public static UEProperty[] Read(BinaryReader reader, int count) { if (reader.PeekChar() < 0) { return(null); } var name = reader.ReadUEString(); var type = reader.ReadUEString(); var valueLength = reader.ReadInt64(); return(UESerializer.Deserialize(name, type, valueLength, count, reader)); }
public UEMapProperty(BinaryReader reader, long valueLength) { KeyType = reader.ReadUEString(); ValueType = reader.ReadUEString(); var unknown = reader.ReadBytes(5); if (unknown.Any(b => b != 0)) { throw new InvalidOperationException($"Offset: 0x{reader.BaseStream.Position-5:x8}. Expected ??? to be 0, but was 0x{unknown.AsHex()}"); } var count = reader.ReadInt32(); for (var i = 0; i < count; i++) { UEProperty key, value; if (KeyType == "StructProperty") { key = Read(reader); } else { key = UESerializer.Deserialize(null, KeyType, -1, reader); } var values = new List <UEProperty>(); do { if (ValueType == "StructProperty") { value = Read(reader); } else { value = UESerializer.Deserialize(null, ValueType, -1, reader); } values.Add(value); } while (!(value is UENoneProperty)); Map.Add(new UEKeyValuePair { Key = key, Values = values }); } if (count == 0) { //Read(reader); Read(reader); } }
static void Main(string[] args) { Console.WriteLine(); Console.WriteLine(@" __ __"); Console.WriteLine(@" /__ \ / /\ (_ "); Console.WriteLine(@" \_| \/ /--\ __) v" + GetAppVersion()); Console.WriteLine(); if (args.Length != 1) { Console.WriteLine(); Console.WriteLine("Usage:"); Console.WriteLine(); Console.WriteLine(" gvas-converter [path_to_save_file]"); Console.WriteLine(); return; } Console.WriteLine("Parsing UE4 save file structure..."); Gvas save; if (!File.Exists(args[0])) { Console.WriteLine("Error: File not found"); return; } using (var stream = File.Open(args[0], FileMode.Open, FileAccess.Read, FileShare.Read)) save = UESerializer.Read(stream); Console.WriteLine("Converting to JSON..."); var json = JsonConvert.SerializeObject(save, new JsonSerializerSettings { Formatting = Formatting.Indented }); Console.WriteLine("Saving JSON..."); using (var stream = File.Open(args[0] + ".json", FileMode.Create, FileAccess.Write, FileShare.Read)) using (var writer = new StreamWriter(stream, new UTF8Encoding(false))) writer.Write(json); Console.WriteLine("Done"); Console.ReadKey(true); }
static void ReadSave(FileInfo file) { var bytes = ReadBytes(file.FullName); var parsedFile = new SaveFile(file, bytes); Console.WriteLine($"{bytes.Length} bytes in {file.Name}: {bytes[0]}, {bytes[1]}, {bytes[2]}, {bytes[3]}"); Gvas save; using (var stream = File.Open(file.FullName, FileMode.Open, FileAccess.Read, FileShare.Read)) save = UESerializer.Read(stream); var json = JsonConvert.SerializeObject(save, new JsonSerializerSettings { Formatting = Formatting.Indented }); using (var stream = File.Open(file.FullName + ".json", FileMode.Create, FileAccess.Write, FileShare.Read)) using (var writer = new StreamWriter(stream, new UTF8Encoding(false))) writer.Write(json); //Console.WriteLine(FormatSave(parsedFile.Text)); }
private void SavePlaylist(object sender, EventArgs e) { var dir = Path.GetDirectoryName(_playlistPath); var pname = _playlistNameTextbox.Text; var path = Path.Combine(dir, pname + KOVAAK_PLAYLIST_EXTENSION); var fexists = File.Exists(path); if (!fexists || overwriteCheckbox.Checked) { PlaylistName.Value = pname; PlaylistScenarios.Items = new KovaakHandler().ExportPlaylist(_shuffledPlaylist, (UEGenericStructProperty)PlaylistScenarios.Items[0]); File.WriteAllText(path, string.Empty); using (var stream = File.Open(path, FileMode.Append)) UESerializer.WriteKovaakSpecific(_playlist, stream); new UserMessages().ValidIO(); } else if (fexists && !overwriteCheckbox.Checked) { new UserMessages().InvalidOverwrite(); } }
static void Main(string[] args) { if (args.Length != 2) { Console.WriteLine("Usage:"); Console.WriteLine(" gvas-converter infile outfile"); return; } var ext = Path.GetExtension(args[0]).ToLower(); if (ext == ".json") { Console.WriteLine("Loading json..."); Gvas data = JsonConvert.DeserializeObject <Gvas>(File.ReadAllText(args[0]), new GvasJsonConverter()); var stream = File.Open(args[1], FileMode.Create, FileAccess.Write); Console.WriteLine("Converting and saving file..."); UESerializer.Write(stream, data); } else { Console.WriteLine("Parsing UE4 save file structure..."); Gvas save; using (var stream = File.Open(args[0], FileMode.Open, FileAccess.Read, FileShare.Read)) save = UESerializer.Read(stream); Console.WriteLine("Converting to json..."); var json = JsonConvert.SerializeObject(save, new JsonSerializerSettings { Formatting = Formatting.Indented }); Console.WriteLine("Saving json..."); using (var stream = File.Open(args[1], FileMode.Create, FileAccess.Write, FileShare.Read)) using (var writer = new StreamWriter(stream, new UTF8Encoding(false))) writer.Write(json); } Console.WriteLine("Done."); }
private void LoadPlaylist(object sender, EventArgs e) { var fd = new OpenFileDialog(); fd.DefaultExt = "plo"; fd.AddExtension = true; fd.Filter = "Playlist (*.plo) | *.plo"; var res = fd.ShowDialog(); if (res.Accept()) { try { using (var stream = File.Open(fd.FileName, FileMode.Open, FileAccess.Read, FileShare.Read)) _playlist = UESerializer.Read(stream); } catch { _playlist = null; new UserMessages().InvalidIO(); } if (_playlist != null && PlaylistScenarios.Items.Count() > 0) { _playlistPath = fd.FileName; _shuffledPlaylist = new KovaakHandler().ImportPlaylist(PlaylistScenarios.Items); _importedListPlaylist = new GroupUtil().UngroupBySame(_shuffledPlaylist); _playlistNameTextbox.Text = $"{PlaylistName.Value} - Shuffled"; UpdateProgramState(); } } else { new UserMessages().InvalidIO(); } }
public UESetProperty(BinaryReader reader, long valueLength) { var ItemType = reader.ReadUEString(); if (ItemType == "IntProperty") { ItemType += "Array"; } var terminator = reader.ReadByte(); if (terminator != 0) { throw new FormatException($"Offset: 0x{reader.BaseStream.Position - 1:x8}. Expected terminator (0x00), but was (0x{terminator:x2})"); } reader.ReadInt32(); var count = reader.ReadInt32(); Address = $"0x{ reader.BaseStream.Position - 1:x8}"; Items = new UEProperty[count]; switch (ItemType) { case "StructProperty": Items = Read(reader, count); break; case "ByteProperty": Items = UEByteProperty.Read(reader, valueLength, count); break; case "IntPropertyArray": for (var i = 0; i < count; i++) { var value = reader.ReadInt32(); Items[i] = new UEIntProperty() { Value = value }; Debug.WriteLine(String.Format(" {0} {1}", ((UEIntProperty)Items[i]).Value, $"0x{reader.BaseStream.Position - 1:x8}")); } break; case "EnumProperty": for (var i = 0; i < count; i++) { Items[i] = new UEEnumProperty() { Value = reader.ReadUEString(), }; Debug.WriteLine(String.Format(" {0} ({1}) {2}", ((UEEnumProperty)Items[i]).EnumType, ((UEEnumProperty)Items[i]).Value, $"0x{reader.BaseStream.Position - 1:x8}")); } break; case "SoftObjectProperty": for (var i = 0; i < count; i++) { Items[i] = new UEStringProperty() { Value = reader.ReadUEString(), }; Debug.WriteLine(String.Format(" {0} {1}", ((UEStringProperty)Items[i]).Value, $"0x{reader.BaseStream.Position - 1:x8}")); } break; default: { for (var i = 0; i < count; i++) { Items[i] = UESerializer.Deserialize(null, ItemType, -1, reader); } break; } } }
public UEMapProperty(BinaryReader reader, long valueLength) { var keyType = reader.ReadUEString(); var valueType = reader.ReadUEString(); if (valueType == "IntProperty") { valueType += "Array"; } var unknown = reader.ReadBytes(5); if (unknown.Any(b => b != 0)) { throw new InvalidOperationException($"Offset: 0x{reader.BaseStream.Position-5:x8}. Expected ??? to be 0, but was 0x{unknown.AsHex()}"); } var count = reader.ReadInt32(); for (var i = 0; i < count; i++) { UEProperty key, value; if (keyType == "StructProperty") { key = Read(reader); } else { key = UESerializer.Deserialize(null, keyType, -1, reader); } var values = new List <UEProperty>(); switch (valueType) { case "StructProperty": value = Read(reader); break; case "BoolProperty": value = new UEBoolProperty() { Value = reader.ReadBoolean() }; Debug.WriteLine(String.Format(" {0}: {1}", ((UEStringProperty)key).Value, ((UEBoolProperty)value).Value)); break; case "FloatProperty": var bytes = reader.ReadBytes(4); value = new UEFloatProperty() { Value = System.BitConverter.ToSingle(bytes, 0) }; Debug.WriteLine(String.Format(" {0}: {1}", ((UEStringProperty)key).Value, ((UEFloatProperty)value).Value)); break; case "EnumProperty": var length = reader.ReadInt32(); var valueBytes = reader.ReadBytes(length); Encoding Utf8 = new UTF8Encoding(false); if (length > 0) { value = new UEEnumProperty() { Value = Utf8.GetString(valueBytes, 0, valueBytes.Length - 1) }; Debug.WriteLine(String.Format(" {0}: {1}", ((UEStringProperty)key).Value, ((UEFloatProperty)value).Value)); } else { value = new UEEnumProperty(); Debug.WriteLine(String.Format(" {0}: {1}", ((UEStringProperty)key).Value, "")); } break; default: value = UESerializer.Deserialize(null, valueType, -1, reader); break; } values.Add(value); Map.Add(new UEKeyValuePair { Key = key, Values = values }); } }