Example #1
0
        /// <summary>
        /// Every 10 seconds check if the coroutine is still active.
        /// If not, try to restart it.
        /// It is checked by two values - ticks and lastTick
        /// Ticks are added by coroutine. If the value is different than the lastTick, everything is okay.
        /// If the ticks and lastTick is the same, that means coroutine stopped.
        /// </summary>
        /// <returns></returns>
        IEnumerator ControlCoroutine()
        {
            while (MopSettings.IsModActive)
            {
                yield return(new WaitForSeconds(10));

                if (lastTick == ticks)
                {
                    if (retries >= MaxRetries)
                    {
                        ModConsole.LogError("[MOP] Restart attempt failed. Enabling Safe Mode.");
                        ModConsole.LogError("[MOP] Please contact mod developer. Make sure you send output_log and last MOP crash log!");
                        try { ToggleAll(true); } catch { }
                        MopSettings.EnableSafeMode();
                        yield break;
                    }

                    retries++;
                    restartSucceedMessaged = false;
                    ModConsole.LogWarning($"[MOP] MOP has stopped working! Restart attempt {retries}/{MaxRetries}...");
                    StopCoroutine(currentLoop);
                    currentLoop = LoopRoutine();
                    StartCoroutine(currentLoop);
                }
                else
                {
                    lastTick = ticks;
                }
            }
        }
Example #2
0
        /// <summary>
        /// Returns true, if the time saved into the file with added FileThresholdHours is larger than the current time.
        /// </summary>
        bool IsUpdateTime()
        {
            if (MopSettings.RuleFilesUpdateChecked)
            {
                return(false);
            }
            MopSettings.RuleFilesUpdateChecked = true;

            if (DateTime.TryParse(File.ReadAllText(lastDateFilePath), out DateTime past))
            {
                int fileThresholdsHours = MopSettings.GetRuleFilesUpdateDaysFrequency() * 24;
                past = past.AddHours(fileThresholdsHours);
                return(DateTime.Now > past);
            }

            return(true);
        }
Example #3
0
        /// <summary>
        /// Generates the report about mod's settings and list of installed mods
        /// </summary>
        /// <returns></returns>
        static string GetGameInfo()
        {
            string output = $"Modern Optimization Plugin\nVersion: {MOP.ModVersion}{(MOP.ModVersion.EndsWith(".0") ? " Development" : "")}\n";

            output += $"MSC Mod Loader Version: {ModLoader.MSCLoader_Ver}\n";
            output += $"Date and Time: {DateTime.Now:yyyy-MM-ddTHH:mm:ssZ}\n";
            output += $"{GetSystemInfo()} \n\n";

            output += "=== MOP SETTINGS ===\n\n";
            output += $"ActiveDistance: {MopSettings.ActiveDistance}\n";
            output += $"ActiveDistanceMultiplicationValue: {MopSettings.ActiveDistanceMultiplicationValue}\n";
            output += $"SafeMode: {MopSettings.SafeMode}\n";
            output += $"RemoveEmptyBeerBottles: {MopSettings.RemoveEmptyBeerBottles}\n";
            output += $"ToggleVehiclePhysicsOnly: {Rules.instance.SpecialRules.ToggleAllVehiclesPhysicsOnly}\n";
            output += $"IgnoreModVehicles: {Rules.instance.SpecialRules.IgnoreModVehicles}\n";
            output += $"EnableFramerateLimiter: {(bool)MOP.EnableFramerateLimiter.GetValue()}\n";
            output += $"FramerateLimiter: {MOP.FramerateLimiter.GetValue()}\n";
            output += $"EnableShadowAdjusting: {(bool)MOP.EnableShadowAdjusting.GetValue()}\n";
            output += $"KeepRunningInBackground: {(bool)MOP.KeepRunningInBackground.GetValue()}\n";
            output += $"DynamicDrawDistance: {(bool)MOP.DynamicDrawDistance.GetValue()}\n";
            output += $"ShadowDistance: {MOP.ShadowDistance.GetValue()}\n";
            output += $"RulesAutoUpdate: {MOP.RulesAutoUpdate.GetValue()}\n";
            output += $"RulesAutoUpdateFrequency: {MopSettings.GetRuleFilesUpdateDaysFrequency()}\n";
            output += $"CustomRuleFile: {File.Exists($"{MOP.ModConfigPath}/Custom.txt")}\n\n";

            // Steam stuff.
            output += $"CheckSteam: {ModLoader.CheckSteam()} \n";
            output += $"ExperimentalBranch: {ModLoader.CheckIfExperimental()}\n";

            // List installed mods.
            output += "\n=== MODS ===\n\n";
            foreach (var mod in ModLoader.LoadedMods)
            {
                // Ignore MSCLoader or MOP.
                if (mod.ID.EqualsAny("MSCLoader_Console", "MSCLoader_Settings", "MOP"))
                {
                    continue;
                }

                output += $"{mod.Name}:\n  ID: {mod.ID}\n  Version: {mod.Version}\n  Author: {mod.Author}\n\n";
            }

            // If only 3 mods have been found, that means the only mods active are MOP and two ModLoader modules.
            if (ModLoader.LoadedMods.Count <= 3)
            {
                output += "No other mods found!\n\n";
            }

            // List rule files.
            output += "=== RULE FILES ===\n\n";
            foreach (string ruleFile in Rules.instance.RuleFileNames)
            {
                output += $"{ruleFile}\n";
            }

            if (Rules.instance.RuleFileNames.Count == 0)
            {
                output += $"No rule files loaded!\n";
            }

            if (File.Exists($"{MOP.ModConfigPath}/Custom.txt"))
            {
                output += "\n=== CUSTOM.TXT CONTENT ===\n\n";
                output += File.ReadAllText($"{MOP.ModConfigPath}/Custom.txt") + "\n\n";
            }

            return(output);
        }