public static bool ModPatch_AssetBundle(AssetBundleSheet __instance, string filePath, ref string __result) { string text = filePath.ToLower().Trim(); if (__instance.FilesInfo.ContainsKey(text)) { __result = __instance.BundleList[__instance.FilesInfo[text]].AssetBundleName; } else { Debug.Log("沒有包到這個路徑的檔案:" + text); __result = null; } return(false); }
public ModResourceProvider(ICoroutineRunner runner, string modBaseDir, string[] modPaths) : base(runner) { for (int i = 0; i < modPaths.Length; ++i) { string dir = Path.Combine(modBaseDir, modPaths[i]); if (Directory.Exists(dir)) { Console.WriteLine("检测到Mod路径: " + dir); ModDirectories.Add(dir); string zip = Path.Combine(dir, "Config.zip"); if (File.Exists(zip)) { Console.WriteLine("检测到压缩格式Mod档案: " + zip); ZipFile zipFile = ZipFile.Read(zip); ZipEntries.Add(dir, zipFile.ToDictionary((ZipEntry x) => x.FileName.ToLower(), (ZipEntry x) => x)); } // 扩展AssetBundleSheet string extraSheetFile = Path.Combine(dir, "AssetBundleSheet.sheet"); if (File.Exists(extraSheetFile)) { Console.WriteLine("检测到扩展AssetBundleSheet: " + extraSheetFile); byte[] array = File.ReadAllBytes(extraSheetFile); AssetBundleSheet modSheet = JsonConvert.DeserializeObject <AssetBundleSheet>(Encoding.UTF8.GetString(array)); AssetBundleSheet sourceSheet = Traverse.Create(BundleManagerBySheet.Instance()).Field("bundleSheet").GetValue <AssetBundleSheet>(); Console.WriteLine(string.Format("扩展Sheet bundle={0}, file={1}", modSheet.BundleList.Count, modSheet.FilesInfo.Count)); Console.WriteLine(string.Format("原始Sheet bundle={0}, file={1}", sourceSheet.BundleList.Count, sourceSheet.FilesInfo.Count)); foreach (var bundle in modSheet.BundleList) { sourceSheet.BundleList.Add(bundle.Key, bundle.Value); } foreach (var file in modSheet.FilesInfo) { sourceSheet.FilesInfo.Add(file.Key, file.Value); } Console.WriteLine(string.Format("合并Sheet bundle={0}, file={1}", sourceSheet.BundleList.Count, sourceSheet.FilesInfo.Count)); } } } }