Beispiel #1
0
        /// <summary>
        /// Loads .cache files from given mods and dlc folder
        /// </summary>
        /// <param name="mods"></param>
        /// <param name="dlc"></param>
        public override void LoadModsArchives(string mods, string dlc)
        {
            // this is slow
            Archives.Clear();
            Items.Clear();
            FileList.Clear();

            if (!Directory.Exists(mods))
                Directory.CreateDirectory(mods);
            var modsdirs = new List<string>(Directory.GetDirectories(mods));
            modsdirs.Sort(new AlphanumComparator<string>());
            var modbundles = modsdirs.SelectMany(dir => Directory.GetFiles(dir, "*.cache", SearchOption.AllDirectories).Where(x => Cache.GetCacheTypeOfFile(x) == Cache.Cachetype.Texture)).ToList();
            foreach (var file in modbundles)
            {
                LoadModArchive(file);
            }

            if (Directory.Exists(dlc))
            {
                var dlcdirs = new List<string>(Directory.GetDirectories(dlc));
                dlcdirs.Sort(new AlphanumComparator<string>());

                var tmp = dlcdirs.Where(_ => !VanillaDlClist.Contains(new DirectoryInfo(_).Name)).ToList();
                foreach (var file in tmp
                    .SelectMany(dir => Directory.GetFiles(dir ?? "", "*.cache", SearchOption.AllDirectories)
                        .OrderBy(k => k)
                        .Where(x => Cache.GetCacheTypeOfFile(x) == Cache.Cachetype.Texture)))
                {
                    LoadModArchive(file);
                }
            }
            RebuildRootNode();
        }
Beispiel #2
0
        /// <summary>
        /// Loads the .cache soundcache files from the /Mods/ folder
        /// Note this resets everything
        /// </summary>
        /// <param name="exedir"></param>
        public void LoadModsBundles(string mods, string dlc)
        {
            if (!Directory.Exists(mods))
            {
                Directory.CreateDirectory(mods);
            }
            var modsdirs = new List <string>(Directory.GetDirectories(mods));

            modsdirs.Sort(new AlphanumComparator <string>());
            var modbundles = modsdirs.SelectMany(dir => Directory.GetFiles(dir, "*.cache", SearchOption.AllDirectories).Where(x => Cache.GetCacheTypeOfFile(x) == Cache.Cachetype.Sound)).ToList();

            foreach (var file in modbundles)
            {
                LoadModBundle(file);
            }

            if (Directory.Exists(dlc))
            {
                var dlcdirs = new List <string>(Directory.GetDirectories(dlc));
                dlcdirs.Sort(new AlphanumComparator <string>());

                var tmp = dlcdirs.Where(_ => !vanillaDLClist.Contains(new DirectoryInfo(_).Name)).ToList();
                foreach (var file in tmp
                         .SelectMany(dir => Directory.GetFiles(dir ?? "", "*.cache", SearchOption.AllDirectories)
                                     .OrderBy(k => k)
                                     .Where(x => Cache.GetCacheTypeOfFile(x) == Cache.Cachetype.Sound)))
                {
                    LoadModBundle(file);
                }
            }
            RebuildRootNode();
        }
Beispiel #3
0
        /// <summary>
        ///     Load every non-mod bundle it can find in ..\\..\\content and ..\\..\\DLC, also calls RebuildRootNode()
        /// </summary>
        /// <param name="exedir">Path to executable directory</param>
        public override void LoadAll(string exedir)
        {
            var di = new DirectoryInfo(exedir);

            if (!di.Exists)
            {
                return;
            }
            var dlc     = Path.Combine(di.Parent.Parent.FullName, "DLC");
            var content = Path.Combine(di.Parent.Parent.FullName, "content");

            var contentdirs = new List <string>(Directory.GetDirectories(content, "content*"));

            contentdirs.Sort(new AlphanumComparator <string>());
            foreach (var file in contentdirs.SelectMany(dir => Directory.GetFiles(dir, "*.cache", SearchOption.AllDirectories).Where(x => Cache.GetCacheTypeOfFile(x) == Cache.Cachetype.Collision)))
            {
                LoadArchive(file);
            }

            var patchdirs = new List <string>(Directory.GetDirectories(content, "patch*"));

            patchdirs.Sort(new AlphanumComparator <string>());
            foreach (var file in patchdirs
                     .SelectMany(dir => Directory.GetFiles(dir, "*.cache", SearchOption.AllDirectories)
                                 .Where(x => Cache.GetCacheTypeOfFile(x) == Cache.Cachetype.Collision)))
            {
                LoadArchive(file);
            }

            if (Directory.Exists(dlc))
            {
                var dlcdirs = new List <string>(Directory.GetDirectories(dlc));
                dlcdirs.Sort(new AlphanumComparator <string>());

                foreach (var file in dlcdirs
                         .Where(_ => VanillaDlClist.Contains(new DirectoryInfo(_).Name))
                         .SelectMany(dir => Directory.GetFiles(dir ?? "", "*.cache", SearchOption.AllDirectories)
                                     .OrderBy(k => k)
                                     .Where(x => Cache.GetCacheTypeOfFile(x) == Cache.Cachetype.Collision)))
                {
                    LoadArchive(file);
                }
            }
            RebuildRootNode();
        }
Beispiel #4
0
 public static string CloneCollisionCache(string old)
 {
     if (Cache.GetCacheTypeOfFile(old) == Cache.Cachetype.Collision)
     {
         var filename   = Path.GetFileName(Path.GetTempFileName());
         var desktop    = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
         var workingdir = desktop + "\\workingdir";
         var clonedir   = desktop + "\\clonedcachedir";
         try
         {
             Directory.GetFiles(clonedir + "\\Collisioncache").ToList().ForEach(x => File.Delete(x));
             Console.WriteLine("Deleted wms and bnks!");
             Directory.GetFiles(workingdir).ToList().ForEach(x => File.Delete(x));
             Console.WriteLine("Deleted soundcache clone!");
         }
         catch { }
         Console.Title = "Reading: " + old + "!";
         Console.WriteLine("-----------------------------------");
         var sc = new CollisionCache(old);
         foreach (var item in sc.Files)
         {
             item.Extract(clonedir + "\\" + item.Name);
             Console.WriteLine("Extracted: " + item.Name);
         }
         var orderedfiles = new List <string>();
         foreach (var oi in sc.Files)
         {
             foreach (var ni in Directory.GetFiles(clonedir + "\\Collisioncache").ToList().OrderBy(x => new FileInfo(x).CreationTime).ToList())
             {
                 if (("Collisioncache\\" + Path.GetFileName(ni)) == oi.Name)
                 {
                     orderedfiles.Add(ni);
                 }
             }
         }
         CollisionCache.Write(orderedfiles, workingdir + "\\" + filename + "_clone.cache");
         Console.WriteLine("-----------------------------------");
         Console.WriteLine("Collision cache clone created!");
         Console.WriteLine();
         return(GetHash(workingdir + "\\" + filename + "_clone.cache"));
     }
     return("Not a Collisioncache");
 }
Beispiel #5
0
        /// <summary>
        /// Loads the .cache soundcache files from the /Mods/ folder
        /// Note this resets everything
        /// </summary>
        /// <param name="exedir"></param>
        public void LoadModsBundles(string exedir)
        {
            var mods = Path.Combine(exedir, @"..\..\Mods\");

            if (!Directory.Exists(mods))
            {
                Directory.CreateDirectory(mods);
            }
            var modsdirs = new List <string>(Directory.GetDirectories(mods));

            modsdirs.Sort(new AlphanumComparator <string>());
            var modbundles = modsdirs.SelectMany(dir => Directory.GetFiles(dir, "*.cache", SearchOption.AllDirectories).Where(x => Cache.GetCacheTypeOfFile(x) == Cache.Cachetype.Texture)).ToList();

            foreach (var file in modbundles)
            {
                LoadModBundle(file);
            }

            var dlc = Path.Combine(exedir, @"..\..\DLC\");

            if (Directory.Exists(dlc))
            {
                var dlcdirs = new List <string>(Directory.GetDirectories(dlc));
                dlcdirs.Sort(new AlphanumComparator <string>());
                foreach (var file in dlcdirs.Where(dir => !new Regex("(DLC..)|(DLC.)|(BOB)|(bob)|(EP.)|(ep.)").IsMatch(Path.GetFileName(dir ?? ""))).SelectMany(dir => Directory.GetFiles(dir ?? "", "*.cache", SearchOption.AllDirectories).OrderBy(k => k).Where(x => Cache.GetCacheTypeOfFile(x) == Cache.Cachetype.Texture)))
                {
                    LoadModBundle(file);
                }
            }
            RebuildRootNode();
        }
Beispiel #6
0
        /// <summary>
        ///     Load every non-mod bundle it can find in ..\..\content and ..\..\DLC, also calls RebuildRootNode()
        /// </summary>
        /// <param name="exedir">Path to executable directory</param>
        public void LoadAll(string exedir)
        {
            var content = Path.Combine(exedir, @"..\..\content\");

            var contentdirs = new List <string>(Directory.GetDirectories(content, "content*"));

            contentdirs.Sort(new AlphanumComparator <string>());
            foreach (var file in contentdirs.SelectMany(dir => Directory.GetFiles(dir, "*.cache", SearchOption.AllDirectories).Where(x => Cache.GetCacheTypeOfFile(x) == Cache.Cachetype.Texture)))
            {
                LoadBundle(file);
            }

            var patchdirs = new List <string>(Directory.GetDirectories(content, "patch*"));

            patchdirs.Sort(new AlphanumComparator <string>());
            foreach (var file in patchdirs.SelectMany(dir => Directory.GetFiles(dir, "*.cache", SearchOption.AllDirectories).Where(x => Cache.GetCacheTypeOfFile(x) == Cache.Cachetype.Texture)))
            {
                LoadBundle(file);
            }

            var dlc = Path.Combine(exedir, @"..\..\DLC\");

            if (Directory.Exists(dlc))
            {
                var dlcdirs = new List <string>(Directory.GetDirectories(dlc));
                dlcdirs.Sort(new AlphanumComparator <string>());
                foreach (var file in dlcdirs.Where(dir => new Regex("(DLC..)|(DLC.)|(BOB)|(ep.)|(bob)|(EP.)").IsMatch(Path.GetFileName(dir ?? ""))).SelectMany(dir => Directory.GetFiles(dir ?? "", "*.cache", SearchOption.AllDirectories).OrderBy(k => k).Where(x => Cache.GetCacheTypeOfFile(x) == Cache.Cachetype.Texture)))
                {
                    LoadBundle(file);
                }
            }
            RebuildRootNode();
        }