using Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Components; using Content.Server.Xenoarchaeology.XenoArtifacts.Events; using Content.Shared.Popups; using Robust.Server.GameObjects; using Robust.Shared.Player; using Robust.Shared.Random; namespace Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Systems; public sealed class TelepathicArtifactSystem : EntitySystem { [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly SharedPopupSystem _popupSystem = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnActivate); } private void OnActivate(EntityUid uid, TelepathicArtifactComponent component, ArtifactActivatedEvent args) { // try to find victims nearby var victims = _lookup.GetEntitiesInRange(uid, component.Range); foreach (var victimUid in victims) { if (!EntityManager.HasComponent(victimUid)) continue; // roll if msg should be usual or drastic List msgArr; if (_random.NextFloat() <= component.DrasticMessageProb && component.DrasticMessages != null) { msgArr = component.DrasticMessages; } else { msgArr = component.Messages; } // pick a random message var msgId = _random.Pick(msgArr); var msg = Loc.GetString(msgId); // show it as a popup, but only for the victim _popupSystem.PopupEntity(msg, victimUid, victimUid); } } }