public override LeakerStatus Export(GameAsset asset, LeakerInstance instance) { var header = instance.Reader.ReadStruct <SoundAsset>(asset.HeaderAddress); if (asset.Name != instance.Reader.ReadNullTerminatedString(header.NamePointer).Split(':')[0]) { return(LeakerStatus.MemoryChanged); } Directory.CreateDirectory(instance.SoundZoneFolder); using (var writer = new StreamWriter(Path.Combine(instance.SoundZoneFolder, asset.Name + ".alias.csv"))) { writer.WriteLine("Name,Secondary,FileSpec,"); for (int j = 0; j < header.AliasCount; j++) { var aliasData = instance.Reader.ReadStruct <SoundAlias>(header.AliasesPointer + (j * 32)); for (int k = 0; k < aliasData.EntriesCount; k++) { var aliasEntryData = instance.Reader.ReadStruct <SoundAliasEntry>(aliasData.EntriesPointer + (k * 0xE8)); writer.WriteLine("{0},{1},{2},", instance.Reader.ReadNullTerminatedString(aliasEntryData.NamePtr), instance.Reader.ReadNullTerminatedString(aliasEntryData.SecondaryPointer), instance.Reader.ReadNullTerminatedString(aliasEntryData.FileSpec)); } } } return(LeakerStatus.Success); }
public override LeakerStatus Export(GameAsset asset, LeakerInstance instance) { var header = instance.Reader.ReadStruct <RawFileAsset>(asset.HeaderAddress); if (asset.Name != instance.Reader.ReadNullTerminatedString(header.NamePointer)) { return(LeakerStatus.MemoryChanged); } string path = Path.Combine("exported_files", instance.Game.Name, asset.Name); // Create path Directory.CreateDirectory(Path.GetDirectoryName(path)); MemoryStream DecodedCodeStream = Decode(instance.Reader.ReadBytes(header.RawDataPtr + 2, header.compressedLength - 2)); try { using (var outputStream = new FileStream(path, FileMode.Create)) { DecodedCodeStream.CopyTo(outputStream); } } catch { return(LeakerStatus.Exception); } return(LeakerStatus.Success); }
public override LeakerStatus Export(GameAsset asset, LeakerInstance instance) { var header = instance.Reader.ReadStruct <WeaponAsset>(asset.HeaderAddress); if (asset.Name != instance.Reader.ReadNullTerminatedString(header.NamePointer)) { return(LeakerStatus.MemoryChanged); } string path = Path.Combine("exported_files", instance.Game.Name, asset.Name); // Create path Directory.CreateDirectory(Path.GetDirectoryName(path)); return(LeakerStatus.Success); }
public override LeakerStatus Export(GameAsset asset, LeakerInstance instance) { string path = Path.Combine("exported_files", instance.Game.Name, "localizedstrings", asset.Name + ".str"); Directory.CreateDirectory(Path.GetDirectoryName(path)); var result = new StringBuilder(); result.AppendLine("VERSION \"1\""); result.AppendLine("CONFIG \"C:\\projects\\cod\\t7\\bin\\StringEd.cfg\""); result.AppendLine("FILENOTES \"Dumped via ModernWarfareLeaker by JariK\""); result.AppendLine(); var result2 = new StringBuilder(); for (int i = 0; i < AssetCount; i++) { var header = instance.Reader.ReadStruct <LocalizeAsset>(StartAddress + (i * AssetSize)); if (IsNullAsset(header.NamePointer)) { continue; } string name = instance.Reader.ReadNullTerminatedString(header.NamePointer); int idx = name.IndexOf('/'); string fileName = name.Substring(0, idx); if (asset.Name == fileName) { result.AppendLine(String.Format("REFERENCE {0}", name.Substring(idx + 1))); result.AppendLine(String.Format("LANG_ENGLISH \"{0}\"", instance.Reader.ReadNullTerminatedString(header.RawDataPtr))); result.AppendLine(); result2.AppendLine(name + "," + instance.Reader.ReadNullTerminatedString(header.RawDataPtr)); } } result.AppendLine(); result.AppendLine("ENDMARKER"); // Write result File.WriteAllText(path, result.ToString()); //File.WriteAllText(path + "2", result2.ToString()); return(LeakerStatus.Success); }
public override LeakerStatus Export(GameAsset asset, LeakerInstance instance) { var header = instance.Reader.ReadStruct <TTFAsset>(asset.HeaderAddress); if (asset.Name != instance.Reader.ReadNullTerminatedString(header.NamePointer)) { return(LeakerStatus.MemoryChanged); } string path = Path.Combine("exported_files", instance.Game.Name, asset.Name); // Create path Directory.CreateDirectory(Path.GetDirectoryName(path)); byte[] buffer = instance.Reader.ReadBytes(header.RawDataPtr, (int)header.AssetSize); File.WriteAllBytes(path, buffer); return(LeakerStatus.Success); }
public override LeakerStatus Export(GameAsset asset, LeakerInstance instance) { var header = instance.Reader.ReadStruct <StringTableAsset>(asset.HeaderAddress); if (asset.Name != instance.Reader.ReadNullTerminatedString(header.NamePointer)) { return(LeakerStatus.MemoryChanged); } string path = Path.Combine("exported_files", instance.Game.Name, asset.Name); // Create path Directory.CreateDirectory(Path.GetDirectoryName(path)); // Output result var result = new StringBuilder(); // Loop through rows int index = 0; for (int x = 0; x < header.RowCount; x++) { // Loop through columns for this row for (int y = 0; y < header.ColumnCount; y++) { int stringIndex = instance.Reader.ReadInt16(header.CellsPointer + (2 * index)); string str = instance.Reader.ReadNullTerminatedString(instance.Reader.ReadInt64(header.StringsPtr + (8 * stringIndex))); result.Append(str + ","); index++; } // Create new line result.AppendLine(); } // Write result File.WriteAllText(path, result.ToString()); return(LeakerStatus.Success); }
public override LeakerStatus Export(GameAsset asset, LeakerInstance instance) { var header = instance.Reader.ReadStruct <ScriptFileAsset>(asset.HeaderAddress); if (asset.Name != instance.Reader.ReadNullTerminatedString(header.NamePointer)) { return(LeakerStatus.MemoryChanged); } string addedScriptFolder = Path.Combine(asset.Name.Contains("scripts") ? "" : "scripts", asset.Name); string path = Path.Combine("exported_files", instance.Game.Name, addedScriptFolder); // Create path Directory.CreateDirectory(Path.GetDirectoryName(path)); MemoryStream DecodedCodeStream = Decode(instance.Reader.ReadBytes(header.buffer + 2, header.compressedLength - 2)); using (var outputStream = new FileStream(path, FileMode.Create)) { DecodedCodeStream.CopyTo(outputStream); } return(LeakerStatus.Success); }
public override LeakerStatus Export(GameAsset asset, LeakerInstance instance) { return(LeakerStatus.Success); }
/// <summary> /// Checks if the given asset is null /// </summary> public bool IsNullAsset(GameAsset asset) { return(IsNullAsset(asset.NameLocation)); }
/// <summary> /// Exports the given asset from the game /// </summary> public abstract LeakerStatus Export(GameAsset asset, LeakerInstance instance);