/// <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(); }
/// <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(); }
/// <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(); }
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"); }
/// <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(); }
/// <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(); }