public Sideloader() { //ilmerge AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { if (args.Name == "I18N, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" || args.Name == "I18N.West, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null") { return(Assembly.GetExecutingAssembly()); } return(null); }; //install hooks Hooks.InstallHooks(); AutoResolver.Hooks.InstallHooks(); ResourceRedirector.ResourceRedirector.AssetResolvers.Add(RedirectHook); ResourceRedirector.ResourceRedirector.AssetBundleResolvers.Add(AssetBundleRedirectHook); MissingModWarning = new ConfigWrapper <bool>(nameof(MissingModWarning), this, true); //check mods directory var modDirectory = Path.Combine(Paths.GameRootPath, "mods"); if (!Directory.Exists(modDirectory)) { Logger.Log(LogLevel.Warning, "[SIDELOADER] Could not find the \"mods\" directory"); return; } LoadModsFromDirectory(modDirectory); }
internal void Awake() { Logger = base.Logger; Hooks.InstallHooks(); UniversalAutoResolver.Hooks.InstallHooks(); Lists.Hooks.InstallHooks(); ResourceRedirection.EnableSyncOverAsyncAssetLoads(); ResourceRedirection.EnableRedirectMissingAssetBundlesToEmptyAssetBundle(-1000); ResourceRedirection.RegisterAsyncAndSyncAssetLoadingHook(RedirectHook); ResourceRedirection.RegisterAssetBundleLoadingHook(AssetBundleLoadingHook); MissingModWarning = Config.AddSetting("Settings", "Show missing mod warnings", true, new ConfigDescription("Whether missing mod warnings will be displayed on screen. Messages will still be written to the log.")); DebugLogging = Config.AddSetting("Settings", "Debug logging", false, new ConfigDescription("Enable additional logging useful for debugging issues with Sideloader and sideloader mods.\nWarning: Will increase load and save times noticeably and will result in very large log sizes.")); DebugResolveInfoLogging = Config.AddSetting("Settings", "Debug resolve info logging", false, new ConfigDescription("Enable verbose logging for debugging issues with Sideloader and sideloader mods.\nWarning: Will increase game start up time and will result in very large log sizes.")); ModLoadingLogging = Config.AddSetting("Settings", "Mod loading logging", true, new ConfigDescription("Enable verbose logging when loading mods.", tags: "Advanced")); KeepMissingAccessories = Config.AddSetting("Settings", "Keep missing accessories", false, new ConfigDescription("Missing accessories will be replaced by a default item with color and position information intact when loaded in the character maker.")); MigrationEnabled = Config.AddSetting("Settings", "Migration enabled", true, new ConfigDescription("Attempt to change the GUID and or ID of mods based on the data configured in the manifest.xml.")); AdditionalModsDirectory = Config.AddSetting("General", "Additional mods directory", FindKoiZipmodDir(), new ConfigDescription("Additional directory to load zipmods from.")); if (!Directory.Exists(ModsDirectory)) { Logger.LogWarning("Could not find the mods directory: " + ModsDirectory); } if (!AdditionalModsDirectory.Value.IsNullOrWhiteSpace() && !Directory.Exists(AdditionalModsDirectory.Value)) { Logger.LogWarning("Could not find the additional mods directory specified in config: " + AdditionalModsDirectory.Value); } LoadModsFromDirectories(ModsDirectory, AdditionalModsDirectory.Value); }
private void Awake() { Logger = base.Logger; Hooks.InstallHooks(); AutoResolver.Hooks.InstallHooks(); ResourceRedirector.ResourceRedirector.AssetResolvers.Add(RedirectHook); ResourceRedirector.ResourceRedirector.AssetBundleResolvers.Add(AssetBundleRedirectHook); MissingModWarning = Config.GetSetting("Settings", "Show missing mod warnings", true, new ConfigDescription("Whether missing mod warnings will be displayed on screen. Messages will still be written to the log.")); DebugLogging = Config.GetSetting("Settings", "Debug logging", false, new ConfigDescription("Enable additional logging useful for debugging issues with Sideloader and sideloader mods.\nWarning: Will increase load and save times noticeably and will result in very large log sizes.")); DebugResolveInfoLogging = Config.GetSetting("Settings", "Debug resolve info logging", false, new ConfigDescription("Enable verbose logging for debugging issues with Sideloader and sideloader mods.\nWarning: Will increase game start up time and will result in very large log sizes.")); KeepMissingAccessories = Config.GetSetting("Settings", "Keep missing accessories", false, new ConfigDescription("Missing accessories will be replaced by a default item with color and position information intact when loaded in the character maker.")); AdditionalModsDirectory = Config.GetSetting("General", "Additional mods directory", FindKoiZipmodDir(), new ConfigDescription("Additional directory to load zipmods from.")); if (!Directory.Exists(ModsDirectory)) { Logger.Log(LogLevel.Warning, "Could not find the mods directory: " + ModsDirectory); } if (!AdditionalModsDirectory.Value.IsNullOrWhiteSpace() && !Directory.Exists(AdditionalModsDirectory.Value)) { Logger.Log(LogLevel.Warning, "Could not find the additional mods directory specified in config: " + AdditionalModsDirectory.Value); } LoadModsFromDirectories(ModsDirectory, AdditionalModsDirectory.Value); }
public Sideloader() { //ilmerge AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { if (args.Name == "I18N, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" || args.Name == "I18N.West, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null") { return(Assembly.GetExecutingAssembly()); } return(null); }; //install hooks Hooks.InstallHooks(); AutoResolver.Hooks.InstallHooks(); ResourceRedirector.ResourceRedirector.AssetResolvers.Add(RedirectHook); //check mods directory string modDirectory = Path.Combine(Paths.GameRootPath, "mods"); if (!Directory.Exists(modDirectory)) { return; } //load zips foreach (string archivePath in Directory.GetFiles(modDirectory, "*.zip", SearchOption.AllDirectories)) { var archive = new ZipFile(archivePath); if (!Manifest.TryLoadFromZip(archive, out Manifest manifest)) { Logger.Log(LogLevel.Warning, $"[SIDELOADER] Cannot load {Path.GetFileName(archivePath)} due to missing/invalid manifest."); continue; } if (LoadedManifests.Any(x => x.GUID == manifest.GUID)) { Logger.Log(LogLevel.Warning, $"[SIDELOADER] Skipping {Path.GetFileName(archivePath)} due to duplicate GUID \"{manifest.GUID}\"."); continue; } var manifestName = !string.IsNullOrEmpty(manifest.Name?.Trim()) ? manifest.Name : Path.GetFileName(archivePath); Logger.Log(LogLevel.Info, $"[SIDELOADER] Loaded {manifestName} {manifest.Version ?? ""}"); Archives.Add(archive); LoadedManifests.Add(manifest); LoadAllUnityArchives(archive); LoadAllLists(archive, manifest); } }
public Sideloader() { //ilmerge AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { if (args.Name == "I18N, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" || args.Name == "I18N.West, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null") { return(Assembly.GetExecutingAssembly()); } return(null); }; //install hooks Hooks.InstallHooks(); AutoResolver.Hooks.InstallHooks(); ResourceRedirector.ResourceRedirector.AssetResolvers.Add(RedirectHook); //check mods directory string modDirectory = Path.Combine(Utility.ExecutingDirectory, "mods"); if (!Directory.Exists(modDirectory)) { return; } //load zips foreach (string archivePath in Directory.GetFiles(modDirectory, "*.zip")) { var archive = new ZipFile(archivePath); if (!Manifest.TryLoadFromZip(archive, out Manifest manifest)) { BepInLogger.Log($"[SIDELOADER] Cannot load {Path.GetFileName(archivePath)} due to missing/invalid manifest."); continue; } string name = manifest.Name ?? Path.GetFileName(archivePath); BepInLogger.Log($"[SIDELOADER] Loaded {name} {manifest.Version ?? ""}"); Archives.Add(archive); LoadAllUnityArchives(archive); LoadAllLists(archive, manifest); } }
public Sideloader() { Logger = base.Logger; Hooks.InstallHooks(); AutoResolver.Hooks.InstallHooks(); ResourceRedirector.ResourceRedirector.AssetResolvers.Add(RedirectHook); ResourceRedirector.ResourceRedirector.AssetBundleResolvers.Add(AssetBundleRedirectHook); MissingModWarning = Config.Wrap("Settings", "Show missing mod warnings", "Whether missing mod warnings will be displayed on screen. Messages will still be written to the log.", true); DebugLogging = Config.Wrap("Settings", "Debug logging", "Enable additional logging useful for debugging issues with Sideloader and sideloader mods.\nWarning: Will increase load and save times noticeably and will result in very large log sizes.", false); DebugResolveInfoLogging = Config.Wrap("Settings", "Debug resolve info logging", "Enable verbose logging for debugging issues with Sideloader and sideloader mods.\nWarning: Will increase game start up time and will result in very large log sizes.", false); KeepMissingAccessories = Config.Wrap("Settings", "Keep missing accessories", "Missing accessories will be replaced by a default item with color and position information intact when loaded in the character maker.", false); if (Directory.Exists(ModsDirectory)) { LoadModsFromDirectory(); } else { Logger.Log(LogLevel.Warning, "[SIDELOADER] Could not find the \"mods\" directory"); } }