public override void OnAfterSimulationFrame() { if (!Singleton <ExtendedGameOptionsManager> .instance.values.EnableRandomDisastersForScenarios) { return; } // If playing a scenario if (!string.IsNullOrEmpty(Singleton <SimulationManager> .instance.m_metaData.m_ScenarioAsset)) { DisasterManager dm = Singleton <DisasterManager> .instance; // From DisasterManager.SimulationStepImpl ItemClass.Availability mode = Singleton <ToolManager> .instance.m_properties.m_mode; if ((mode & ItemClass.Availability.Game) != ItemClass.Availability.None) { int areaCount = Singleton <GameAreaManager> .instance.m_areaCount; float num = dm.m_randomDisastersProbability; if (num > 0.001f) { num *= num; num *= (float)((areaCount > 1) ? (550 + areaCount * 50) : 500); int num2 = Mathf.Max(1, Mathf.RoundToInt(num)); if (dm.m_randomDisasterCooldown < 65536 - 49152 * num2 / 1000) { dm.m_randomDisasterCooldown++; } else { SimulationManager instance = Singleton <SimulationManager> .instance; if (instance.m_randomizer.Int32(67108864u) < num2) { dm.StartRandomDisaster(); dm.m_randomDisasterCooldown = 0; } } } } } }