Example #1
0
            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);
            }
Example #2
0
            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);
            }
Example #3
0
            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);
            }
Example #4
0
            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);
            }
Example #5
0
            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);
            }
Example #6
0
            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);
            }
Example #7
0
            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);
            }
Example #8
0
 public override LeakerStatus Export(GameAsset asset, LeakerInstance instance)
 {
     return(LeakerStatus.Success);
 }
Example #9
0
 /// <summary>
 /// Checks if the given asset is null
 /// </summary>
 public bool IsNullAsset(GameAsset asset)
 {
     return(IsNullAsset(asset.NameLocation));
 }
Example #10
0
 /// <summary>
 /// Exports the given asset from the game
 /// </summary>
 public abstract LeakerStatus Export(GameAsset asset, LeakerInstance instance);