/// <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 that Harmony 2 was properly loaded. if (!Patcher.Patched) { // Harmony 2 wasn't loaded. Logging.Error("Harmony patches not applied; aborting"); // Display warning message. ListMessageBox harmonyBox = MessageBoxBase.ShowModal <ListMessageBox>(); // Key text items. harmonyBox.AddParas(Translations.Translate("ERR_HAR0"), Translations.Translate("ZAM_ERR_HAR"), Translations.Translate("ZAM_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")); // Don't do anything further. return; } }
/// <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) { // Check to see that Harmony 2 was properly loaded. if (!harmonyLoaded) { // 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("ABLC_ERR_HAR"), Translations.Translate("ABLC_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")); // Exit. return; } // 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("ABLC_ERR_FAT"), Translations.Translate("ABLC_ERR_CON0"), Translations.Translate("ERR_CON1")); // Add conflicting mod name(s). modConflictBox.AddList(ModUtils.conflictingModNames.ToArray()); // Closing para. modConflictBox.AddParas(Translations.Translate("ABLC_ERR_CON1")); // Exit. return; } // Load mod if it's enabled. if (isModEnabled) { // Check for Ploppable RICO Revisited. ModUtils.RICOReflection(); // Hook info panel events. DistrictPanelManager.Hook(); BuildingPanelManager.Hook(); // Add building info panel button. BuildingPanelManager.AddInfoPanelButton(); } }
/// <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 watchdog flag. if (!patchOperating) { // Patch wasn't operating; display harmony error and abort. harmonyLoaded = false; isModEnabled = false; } // Check to see that Harmony 2 was properly loaded. if (!harmonyLoaded) { // 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("PRR_ERR_HAR"), Translations.Translate("PRR_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")); } // 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("PRR_ERR_CON0"), Translations.Translate("PRR_ERR_FAT"), Translations.Translate("ERR_CON1")); // Add conflicting mod name(s). modConflictBox.AddList(ModUtils.conflictingModNames.ToArray()); // Closing para. modConflictBox.AddParas(Translations.Translate("PRR_ERR_CON1")); } }
/// <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 that Harmony 2 was properly loaded. if (!harmonyLoaded) { // 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("RPR_ERR_HAR"), Translations.Translate("RPR_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")); } // 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("RPR_ERR_CON0"), Translations.Translate("RPR_ERR_FAT"), Translations.Translate("ERR_CON1")); // Add conflicting mod name(s). modConflictBox.AddList(ModUtils.conflictingModNames.ToArray()); // Closing para. modConflictBox.AddParas(Translations.Translate("RPR_ERR_CON1")); } // Don't do anything further if mod hasn't activated for whatever reason (mod conflict, harmony error, something else). if (!isModEnabled) { // Disable keystrokes. UIThreading.operating = false; return; } // Show legacy choice message box if this save hasn't been flagged as being from Realistic Population 2. if (!ModSettings.isRealPop2Save) { MessageBoxBase.ShowModal <LegacyChoiceMessageBox>(); } // Record initial (default) school settings and apply ours over the top. SchoolData.instance.OnLoad(); // IF a legacy file exists, flag it for writing. if (File.Exists(DataStore.currentFileLocation)) { Logging.KeyMessage("found legacy settings file"); XMLUtilsWG.writeToLegacy = true; } // Add button to building info panels. BuildingDetailsPanel.AddInfoPanelButton(); Logging.KeyMessage("loading complete"); // Display update notification. WhatsNew.ShowWhatsNew(); // Set up options panel event handler. OptionsPanel.OptionsEventHook(); // Check and record CitizenUnits count. Logging.KeyMessage("citizen unit count is currently ", ColossalFramework.Singleton <CitizenManager> .instance.m_unitCount.ToString()); }
/// <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) { Logging.Message("commencing loading checks"); base.OnLevelLoaded(mode); // Don't do anything further if we're not operating. if (!isModEnabled) { Logging.Message("exiting"); return; } // Check to see that Harmony 2 was properly loaded. if (!Patcher.Patched) { // Harmony 2 wasn't loaded; abort. Logging.Error("Harmony patches not applied; aborting"); isModEnabled = false; // Display warning message. ListMessageBox harmonyBox = MessageBoxBase.ShowModal <ListMessageBox>(); // Key text items. harmonyBox.AddParas(Translations.Translate("ERR_HAR0"), Translations.Translate("BOB_ERR_HAR"), Translations.Translate("BOB_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")); // Don't do anything further. return; } Logging.Message("loading checks passed"); // Build lists of loaded prefabs. PrefabLists.BuildLists(); // Load prop packs. new NetworkPackReplacement(); // Load configuration file. ConfigurationUtils.LoadConfig(); // Set up BOB tool. ToolsModifierControl.toolController.gameObject.AddComponent <BOBTool>(); // Display update notification. WhatsNew.ShowWhatsNew(); // Set up Network Skins 2 reflection. ModUtils.NS2Reflection(); // Enable thin wires, if applicable. if (ModSettings.ThinnerWires) { ElectricalWires.Instance.ApplyThinnerWires(); } // Force update of any dirty net or building prefabs from replacement process. Logging.Message("updating dirty prefabs"); BuildingData.Update(); NetData.Update(); // Set up options panel event handler. OptionsPanel.OptionsEventHook(); // Display any exception message that occured during load. InfoPanelManager.CheckException(); // Activate tool hotkey. UIThreading.Operating = true; Logging.Message("loading complete"); }
/// <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(); } }
/// <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 that Harmony 2 was properly loaded. if (!Patcher.Patched) { // 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("PGC_ERR_HAR"), Translations.Translate("PGC_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")); // Don't do anything further. return; } // Was Plop the Growables detected? if (ptgDetected) { // Plop the Growables detected - display warning notification and exit. ListMessageBox modConflictBox = MessageBoxBase.ShowModal <ListMessageBox>(); // Key text items. modConflictBox.AddParas(Translations.Translate("PGC_PTG0"), Translations.Translate("PGC_PTG1"), Translations.Translate("PGC_PTG2")); // Don't do anything further. return; } // Did data read succesfully occur? if (!dataLoaded) { // Mod conflict detected - display warning notification and exit. ListMessageBox modConflictBox = MessageBoxBase.ShowModal <ListMessageBox>(); // Key text items. modConflictBox.AddParas(Translations.Translate("PGC_ERR_DSZ"), Translations.Translate("PGC_ERR_FAT")); // Don't do anything further. return; } // Checks passed - now check to see if we've got Advanced Building Level Control installed and active. ModUtils.ABLCReflection(); if (ModUtils.ablcLockBuildingLevel != null) { // Get building manager. BuildingManager instance = Singleton <BuildingManager> .instance; if (instance == null) { Logging.Error("couldn't get building manager"); return; } // Iterate through each building ID in the list of deserialized PtG IDs. foreach (ushort buildingID in PlopTheGrowables.buildingList) { byte level = instance.m_buildings.m_buffer[buildingID].m_level; Logging.Message("locking building level for building ", buildingID.ToString(), " to ", level.ToString()); ModUtils.ablcLockBuildingLevel.Invoke(null, new object[] { buildingID, level }); } } }