예제 #1
0
    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);
    }
예제 #3
0
    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);
        }
    }