using Content.Shared.Mindshield.Components; using Content.Shared.Revolutionary.Components; using Content.Server.Popups; using Content.Shared.Database; using Content.Server.Administration.Logs; using Content.Server.Mind; using Content.Shared.Implants; using Content.Shared.Tag; using Content.Server.Roles; using Content.Shared.Implants.Components; namespace Content.Server.Mindshield; /// /// System used for checking if the implanted is a Rev or Head Rev. /// public sealed class MindShieldSystem : EntitySystem { [Dependency] private readonly IAdminLogManager _adminLogManager = default!; [Dependency] private readonly RoleSystem _roleSystem = default!; [Dependency] private readonly MindSystem _mindSystem = default!; [Dependency] private readonly TagSystem _tag = default!; [Dependency] private readonly PopupSystem _popupSystem = default!; [ValidatePrototypeId] public const string MindShieldTag = "MindShield"; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(ImplantCheck); } /// /// Checks if the implant was a mindshield or not /// public void ImplantCheck(EntityUid uid, SubdermalImplantComponent comp, ref ImplantImplantedEvent ev) { if (_tag.HasTag(ev.Implant, MindShieldTag) && ev.Implanted != null) { EnsureComp(ev.Implanted.Value); MindShieldRemovalCheck(ev.Implanted, ev.Implant); } } /// /// Checks if the implanted person was a Rev or Head Rev and remove role or destroy mindshield respectively. /// public void MindShieldRemovalCheck(EntityUid? implanted, EntityUid implant) { if (HasComp(implanted) && !HasComp(implanted)) { _mindSystem.TryGetMind(implanted.Value, out var mindId, out _); _adminLogManager.Add(LogType.Mind, LogImpact.Medium, $"{ToPrettyString(implanted.Value)} was deconverted due to being implanted with a Mindshield."); _roleSystem.MindTryRemoveRole(mindId); } else if (HasComp(implanted)) { _popupSystem.PopupEntity(Loc.GetString("head-rev-break-mindshield"), implanted.Value); QueueDel(implant); } } }