/// <summary> /// Updates XML configuration file with current settings. /// </summary> internal static void SaveXML() { // Write to file. try { WG_XMLBaseVersion xml = new XML_VersionTwo(); xml.WriteXML(Loading.currentFileLocation); } catch (Exception e) { Logging.LogException(e, "exception saving XML configuation file"); } }
/// <summary> /// Called by the game when level loading is complete. /// </summary> /// <param name="mode">Loading mode (e.g. game, editor, scenario, etc.)</param> public override void OnLevelLoaded(LoadMode mode) { base.OnLevelLoaded(mode); // Check to see if a conflicting mod has been detected. if (conflictingMod) { // Mod conflict detected - display warning notification and exit. ListMessageBox modConflictBox = MessageBoxBase.ShowModal <ListMessageBox>(); // Key text items. modConflictBox.AddParas(Translations.Translate("ERR_CON0"), Translations.Translate("LBR_ERR_FAT"), Translations.Translate("LBR_ERR_CON0"), Translations.Translate("ERR_CON1")); // Add conflicting mod name(s). modConflictBox.AddList(ModUtils.conflictingModNames.ToArray()); // Closing para. modConflictBox.AddParas(Translations.Translate("LBR_ERR_CON1")); } // Don't do anything if we're not enabled or we've already been here. if (isModEnabled && !isModCreated) { // Wait for Harmony if it hasn't already happened. //if (!Patcher.patched) { // Set timeout counter, just in case. DateTime startTime = DateTime.Now; try { Logging.Message("waiting for Harmony"); while (!Patcher.patched) { if (CitiesHarmony.API.HarmonyHelper.IsHarmonyInstalled) { Patcher.PatchAll(); break; } // Three minutes should be sufficient wait. if (DateTime.Now > startTime.AddMinutes(3)) { throw new TimeoutException("Harmony loading timeout: " + startTime.ToString() + " : " + DateTime.Now.ToString()); } } } catch (Exception e) { Logging.LogException(e, "Harmony loading exception"); // Harmony 2 wasn't loaded; display warning notification and exit. ListMessageBox harmonyBox = MessageBoxBase.ShowModal <ListMessageBox>(); // Key text items. harmonyBox.AddParas(Translations.Translate("ERR_HAR0"), Translations.Translate("LBR_ERR_HAR"), Translations.Translate("LBR_ERR_FAT"), Translations.Translate("ERR_HAR1")); // List of dot points. harmonyBox.AddList(Translations.Translate("ERR_HAR2"), Translations.Translate("ERR_HAR3")); // Closing para. harmonyBox.AddParas(Translations.Translate("MES_PAGE")); } } Logging.Message("Harmony ready, proceeding"); // Set flag. isModCreated = true; // Load and apply mod settings (configuration file loaded above). settingsFile = Configuration <SettingsFile> .Load(); ModSettings.VanillaCalcs = settingsFile.UseVanilla; ModSettings.LegacyCalcs = settingsFile.UseLegacy; ModSettings.CustomRetirement = settingsFile.CustomRetirement; ModSettings.RetirementYear = settingsFile.RetirementYear; ModSettings.UseTransportModes = settingsFile.UseTransportModes; ModSettings.randomImmigrantEd = settingsFile.RandomImmigrantEd; Logging.UseDeathLog = settingsFile.LogDeaths; Logging.UseImmigrationLog = settingsFile.LogImmigrants; Logging.UseTransportLog = settingsFile.LogTransport; Logging.UseSicknessLog = settingsFile.LogSickness; // Apply sickness probabilities. CalculateSicknessProbabilities(); // Report status. Logging.Message("death logging ", Logging.UseDeathLog ? "enabled" : "disabled", ", immigration logging ", Logging.UseImmigrationLog ? "enabled" : "disabled", ", transportation logging ", Logging.UseTransportLog ? "enabled" : "disabled"); // Prime Threading.counter to continue from frame index. int temp = (int)(Singleton <SimulationManager> .instance.m_currentFrameIndex / 4096u); Threading.counter = temp % DataStore.lifeSpanMultiplier; try { WG_XMLBaseVersion xml = new XML_VersionTwo(); xml.WriteXML(currentFileLocation); } catch (Exception e) { Logging.LogException(e, "XML configuration file error"); } // Set up options panel event handler. OptionsPanel.OptionsEventHook(); Logging.KeyMessage("successfully loaded"); // Display update notifications. WhatsNew.ShowWhatsNew(); } }