private static unsafe void InitialiseParameters(EntryPointParameters *parameters) { if (parameters != (void *)0) { if (!parameters->IsLatestVersion()) { Logger?.LogWriteLineAsync($"Bootstrapper (Reloaded.Mod.Loader.Bootstrapper.dll) is does not match expected version (Expected Version: {EntryPointParameters.CurrentVersion}, Actual Version: {parameters->Version}). Please upgrade the bootstrapper. If you are using ASI Loader re-deploy, otherwise copy Reloaded.Mod.Loader.Bootstrapper.dll.", Logger.ColorWarning); } _parameters = EntryPointParameters.Copy(parameters); } else { Logger?.LogWriteLineAsync($"Expected EntryPointParameters but did not receive any. Bootstrapper (Reloaded.Mod.Loader.Bootstrapper.dll) is likely outdated. Please upgrade by copying a newer version of Reloaded.Mod.Loader.Bootstrapper.dll if integrating with another mod loader or re-deploy ASI Loader (if using ASI Loader).", Logger.ColorWarning); } }
/// <summary> /// Copies data from the passed in native struct to a new struct. /// This allows for old bootstrappers to work with more recent parameters. /// </summary> /// <param name="pointer">Pointer passed in from native code.</param> public static unsafe EntryPointParameters Copy(EntryPointParameters *pointer) { // Copy whole if possible. if (pointer->IsLatestVersion()) { return(*pointer); } // Otherwise construct from available size. EntryPointParameters result = default; // Version 1 if (pointer->Version >= 1) { result.Version = pointer->Version; result.Flags = pointer->Flags; } return(result); }
private static unsafe void SetupLoader(EntryPointParameters *parameters) { try { // Setup mod loader. _stopWatch = new Stopwatch(); _stopWatch.Start(); AppDomain.CurrentDomain.UnhandledException += LogUnhandledException; ExecuteTimed("Create Loader", CreateLoader); var setupHooksTask = Task.Run(() => ExecuteTimed("Setting Up Hooks (Async)", SetupHooks)); InitialiseParameters(parameters); ExecuteTimed("Loading Mods (Total)", LoadMods); setupHooksTask.Wait(); Logger?.LogWriteLineAsync($"Total Loader Initialization Time: {_stopWatch.ElapsedMilliseconds}ms"); _stopWatch.Reset(); } catch (Exception ex) { HandleLoadError(ex); } }