public override void Started() { base.Started(); // TODO: "safe random" for chems. Right now this includes admin chemicals. var allReagents = PrototypeManager.EnumeratePrototypes <ReagentPrototype>() .Where(x => !x.Abstract) .Select(x => x.ID).ToList(); // This is gross, but not much can be done until event refactor, which needs Dynamic. var sound = new SoundPathSpecifier("/Audio/Effects/extinguish.ogg"); foreach (var(_, transform) in EntityManager.EntityQuery <GasVentPumpComponent, TransformComponent>()) { var solution = new Solution(); if (!RobustRandom.Prob(0.33f)) { continue; } if (RobustRandom.Prob(0.05f)) { solution.AddReagent(RobustRandom.Pick(allReagents), 100); } else { solution.AddReagent(RobustRandom.Pick(SafeishVentChemicals), 100); } FoamAreaReactionEffect.SpawnFoam("Foam", transform.Coordinates, solution, RobustRandom.Next(2, 6), 20, 1, 1, sound, EntityManager); } }
public override void Started() { base.Started(); if (StationSystem.Stations.Count == 0) { return; // No stations } var chosenStation = RobustRandom.Pick(StationSystem.Stations.ToList()); var jobList = _stationJobs.GetJobs(chosenStation).Keys.ToList(); // Low chance to completely change up the late-join landscape by closing all positions except infinite slots. // Lower chance than the /tg/ equivalent of this event. if (RobustRandom.Prob(0.25f)) { var chosenJob = RobustRandom.PickAndTake(jobList); _stationJobs.MakeJobUnlimited(chosenStation, chosenJob); // INFINITE chaos. foreach (var job in jobList) { if (_stationJobs.IsJobUnlimited(chosenStation, job)) { continue; } _stationJobs.TrySetJobSlot(chosenStation, job, 0); } } else { // Changing every role is maybe a bit too chaotic so instead change 20-30% of them. for (var i = 0; i < RobustRandom.Next((int)(jobList.Count * 0.20), (int)(jobList.Count * 0.30)); i++) { var chosenJob = RobustRandom.PickAndTake(jobList); if (_stationJobs.IsJobUnlimited(chosenStation, chosenJob)) { continue; } _stationJobs.TryAdjustJobSlot(chosenStation, chosenJob, RobustRandom.Next(-3, 6)); } } }
public override void Started() { base.Started(); var spawnLocations = EntityManager.EntityQuery <VentCritterSpawnLocationComponent, TransformComponent>().ToList(); RobustRandom.Shuffle(spawnLocations); var spawnAmount = RobustRandom.Next(7, 15); // A small colony of critters. for (int i = 0; i < spawnAmount && i < spawnLocations.Count - 1; i++) { var spawnChoice = RobustRandom.Pick(SpawnedPrototypeChoices); if (RobustRandom.Prob(0.01f) || i == 0) //small chance for multiple, but always at least 1 { spawnChoice = "SpawnPointGhostRatKing"; } var coords = spawnLocations[i].Item2.Coordinates; Sawmill.Info($"Spawning mouse {spawnChoice} at {coords}"); EntityManager.SpawnEntity(spawnChoice, coords); } }