コード例 #1
0
ファイル: Program.cs プロジェクト: zach-cloud/stormlibsharp
        static void Main(string[] args)
        {
            Console.WriteLine("Attach a native debugger now and press <enter> to continue.");
            Console.ReadLine();

            try
            {
                using (CascStorageContext casc = new CascStorageContext(WOW_DATA_DIRECTORY_X64))
                {
                    Console.WriteLine("Successfully loaded CASC storage context.");
                    Console.WriteLine("Game type is {0}, build {1}", casc.GameClient, casc.GameBuild);
                    Console.WriteLine("{0} total file(s)", casc.FileCount);
                    Console.WriteLine("Has listfile: {0}", casc.HasListfile);
                    Console.ReadLine();

                    using (var file = casc.OpenFile(@"Interface\GLUES\LOADINGSCREENS\LoadingScreen_HighMaulRaid.blp"))
                    {
                        File.WriteAllBytes("LoadingScreen_HighMaulRaid.blp", file.ReadAllBytes());
                    }
                    Console.WriteLine("Successfully extracted LoadingScreen_HighMaulRaid.blp");
                    try
                    {
                        using (var file = casc.OpenFileByEncodingKey(Convert.FromBase64String("2Pfre+Ss0jYg7lo3ZRYRtA==")))
                        {
                            File.WriteAllBytes("BloodElfFemaleFaceLower16_02.blp", file.ReadAllBytes());
                        }
                        Console.WriteLine("Successfully extracted BloodElfFemaleFaceLower16_02.blp via encoding key");
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex);
                    }
                    Console.ReadLine();

                    foreach (var file in casc.SearchFiles("*", WOW_LISTFILE_PATH))
                    {
                        Console.WriteLine("{0}: {1} [{2}]", file.FileName, file.PlainFileName, Convert.ToBase64String(file.EncodingKey));
                    }
                    Console.ReadLine();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            /*
             * string listFile = null;
             * using (MpqArchive archive = new MpqArchive(@"d:\Projects\base-Win.MPQ", FileAccess.Read))
             * {
             *  using (MpqFileStream file = archive.OpenFile("(listfile)"))
             *  using (StreamReader sr = new StreamReader(file))
             *  {
             *      listFile = sr.ReadToEnd();
             *      Console.WriteLine(listFile);
             *  }
             *
             *  archive.ExtractFile("(listfile)", @"d:\projects\base-win-listfile.txt");
             * }
             *
             * using (MpqArchive archive = MpqArchive.CreateNew(@"d:\projects\mynewmpq.mpq", MpqArchiveVersion.Version4))
             * {
             *  archive.AddFileFromDisk(@"D:\projects\base-win-listfile.txt", "base-win-listfile.txt");
             *
             *  int retval = archive.AddListFile(@"base-win-listfile.txt");
             *  archive.Compact("base-win-listfile.txt");
             *  archive.Flush();
             * } */

            Console.WriteLine("<enter> to exit.");
            Console.ReadLine();
        }
コード例 #2
0
        public List <string> GetAllPaths()
        {
            List <string> returner = new List <string>();

            //Look in map file first
            if (ProjectProperties.CurrentProjectPropperties.InputMap != null &&
                ProjectProperties.CurrentProjectPropperties.InputMap.Exists)
            {
                if (ProjectProperties.CurrentProjectPropperties.InputMap is FileInfo)
                {
                    using (
                        MpqEditor.MpqReader reader =
                            new MpqEditor.MpqReader(ProjectProperties.CurrentProjectPropperties.InputMap.FullName))
                    {
                        string[] files = reader.FindFiles(SupportedFiles);
                        foreach (string file in files)
                        {
                            if (!returner.Contains(file))
                            {
                                returner.Add(file);
                            }
                        }
                    }
                }
            }
            //Look in standard library after
            if (Options.General.SC2Exe == null ||
                !Options.General.SC2Exe.Exists)
            {
                RegistryKey key = Registry.LocalMachine;
                key = key.OpenSubKey("SOFTWARE\\Wow6432Node\\Blizzard Entertainment\\Starcraft II Retail");
                Options.General.SC2Exe = new FileInfo((string)key.GetValue("GamePath"));
            }
            string sc2Dir = Options.General.SC2Exe.Directory.FullName;

            //no need to find new versions, just peek into the data directory to get all file path.
            //SC2Assets\Assets\Textures

            DirectoryInfo versionDir = new DirectoryInfo(Options.General.SC2Exe.Directory + @"\SC2Data");
            String        strModDir  = versionDir.FullName;

            using (CascStorageContext casc = new CascStorageContext(strModDir))
            {
                var files = casc.SearchFiles("*");//currently, only * operation is supported.

                foreach (var file in files)
                {
                    //ignore
                    if (!file.FileName.Contains(@"base.sc2assets/Assets/Textures/"))
                    {
                        continue;
                    }
                    bool supported = false;
                    foreach (var ftype in SupportedFiles)
                    {
                        if (file.FileName.EndsWith(ftype.Substring(1)))
                        {
                            supported = true;
                        }
                    }
                    if (!supported)
                    {
                        continue;
                    }
                    //add files to returner
                    if (!returner.Contains(file.FileName))
                    {
                        returner.Add(file.FileName);
                    }
                }
            }

            //look in mod directories

            Stack <DirectoryInfo> modDirs = new Stack <DirectoryInfo>();

            modDirs.Push(new DirectoryInfo(Options.General.SC2Exe.Directory + @"\Mods"));

            List <FileInfo> modfiles = new List <FileInfo>();

            //parse base mods and store SC2Mod files
            while (modDirs.Count != 0)
            {
                DirectoryInfo curVdir = modDirs.Pop();
                if (!curVdir.Exists)
                {
                    continue;
                }

                foreach (var subDir in curVdir.GetDirectories())
                {
                    List <FileInfo> filesToSearch = new List <FileInfo>();

                    filesToSearch.AddRange(subDir.GetFiles("*.SC2Mod"));

                    if (filesToSearch.Count > 0)
                    {
                        modfiles.AddRange(filesToSearch);
                    }

                    filesToSearch.Clear();
                }
            }

            //Read Assets\Textures\files
            foreach (var archive in modfiles)
            {
                MpqEditor.MpqReader fileReader = new MpqEditor.MpqReader(archive.FullName);
                {
                    if (!fileReader.Valid)
                    {
                        continue;
                    }

                    //fileReader.FindFiles("*.SC2Data");
                    foreach (var supportedfile in SupportedFiles)
                    {
                        string[] textureFiles = fileReader.FindFiles("Assets\\Textures\\" + supportedfile);
                        foreach (var imagefile in textureFiles)
                        {
                            if (!returner.Contains(imagefile))
                            {
                                returner.Add(imagefile);
                            }
                        }
                    }
                    fileReader.Dispose();
                }
            }


            //no need to find new versions

            //StarCraft II\Versions\<newest>\patch.SC2Archive\Mods\Core.SC2Mod\Base.SC2Assets\Assets\Textures\..
            //StarCraft II\Versions\<newest>\patch.SC2Archive\Mods\Liberty.SC2Mod\Base.SC2Assets\Assets\Textures\..
            //StarCraft II\Versions\<newest>\patch.SC2Archive\Campaigns\Liberty.SC2Campaign\Base.SC2Assets\Assets\Textures\..
            //StarCraft II\Mods\Core.SC2Mod\base.SC2Assets\Assets\Textures\..
            //StarCraft II\Mods\Liberty.SC2Mod\base.SC2Assets\Assets\Textures\..
            //StarCraft II\Mods\Liberty.SC2Mod\enGB.SC2Assets\Assets\Textures\..

            //StarCraft II\*.SC2Assets|Assets\Textures\..
            returner.Sort();
            return(returner);
        }