/// <summary> /// Finds 2-5 random, alive entities that can host diseases /// and gives them a randomly selected disease. /// They all get the same disease. /// </summary> public override void Started() { base.Started(); HashSet <EntityUid> stationsToNotify = new(); List <DiseaseCarrierComponent> aliveList = new(); foreach (var(carrier, mobState) in EntityManager.EntityQuery <DiseaseCarrierComponent, MobStateComponent>()) { if (!mobState.IsDead()) { aliveList.Add(carrier); } } RobustRandom.Shuffle(aliveList); // We're going to filter the above out to only alive mobs. Might change after future mobstate rework var toInfect = RobustRandom.Next(2, 5); var diseaseName = RobustRandom.Pick(NotTooSeriousDiseases); if (!PrototypeManager.TryIndex(diseaseName, out DiseasePrototype? disease)) { return; } // Now we give it to people in the list of living disease carriers earlier foreach (var target in aliveList) { if (toInfect-- == 0) { break; } _diseaseSystem.TryAddDisease(target.Owner, disease, target); var station = StationSystem.GetOwningStation(target.Owner); if (station == null) { continue; } stationsToNotify.Add((EntityUid)station); } }