# Conflicts: # Content.Client/Administration/UI/Logs/AdminLogsControl.xaml.cs # Content.Client/Administration/UI/Tabs/PlayerTab/PlayerTab.xaml.cs # Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs # Content.Server/Mindshield/MindShieldSystem.cs # Content.Shared/Gravity/SharedGravitySystem.cs # Content.Shared/Implants/SharedSubdermalImplantSystem.cs # Resources/Locale/en-US/_strings/traits/traits.ftl # Resources/Prototypes/Entities/Clothing/Shoes/misc.yml # Resources/Prototypes/Entities/Objects/Devices/Electronics/door_access.yml # Resources/Prototypes/Entities/Objects/Misc/implanters.yml # Resources/Prototypes/Entities/Objects/Misc/subdermal_implants.yml # Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml # Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml # Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml # Resources/Prototypes/Entities/Structures/Machines/surveillance_camera_routers.yml # Resources/Textures/Interface/Misc/job_icons.rsi/meta.json
78 lines
2.8 KiB
C#
78 lines
2.8 KiB
C#
using Content.Server.Administration.Logs;
|
|
using Content.Server.Mind;
|
|
using Content.Server.Popups;
|
|
using Content.Server.Roles;
|
|
using Content.Shared.Database;
|
|
using Content.Shared.Implants;
|
|
using Content.Shared.Implants.Components;
|
|
using Content.Shared.Mindshield.Components;
|
|
using Content.Shared.Revolutionary.Components;
|
|
using Content.Shared.Roles.Components;
|
|
using Robust.Shared.Containers;
|
|
|
|
namespace Content.Server.Mindshield;
|
|
|
|
/// <summary>
|
|
/// System used for adding or removing components with a mindshield implant
|
|
/// as well as checking if the implanted is a Rev or Head Rev.
|
|
/// </summary>
|
|
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 PopupSystem _popupSystem = default!;
|
|
|
|
public override void Initialize()
|
|
{
|
|
base.Initialize();
|
|
|
|
SubscribeLocalEvent<MindShieldImplantComponent, ImplantImplantedEvent>(OnImplantImplanted);
|
|
SubscribeLocalEvent<MindShieldImplantComponent, ImplantRemovedEvent>(OnImplantRemoved);
|
|
SubscribeLocalEvent<SubdermalImplantComponent, ImplantEjectEvent>(ImplantCheck);
|
|
}
|
|
|
|
private void OnImplantImplanted(Entity<MindShieldImplantComponent> ent, ref ImplantImplantedEvent ev)
|
|
{
|
|
if (ev.Implanted == null)
|
|
return;
|
|
|
|
EnsureComp<MindShieldComponent>(ev.Implanted);
|
|
MindShieldRemovalCheck(ev.Implanted, ev.Implant);
|
|
}
|
|
|
|
// Sunrise-Start
|
|
public void ImplantCheck(EntityUid uid, SubdermalImplantComponent comp, ref ImplantEjectEvent ev)
|
|
{
|
|
if (HasComp<MindShieldImplantComponent>(ev.Implant) && ev.Implanted != null)
|
|
{
|
|
RemCompDeferred<MindShieldComponent>(ev.Implanted.Value);
|
|
}
|
|
}
|
|
// Sunrise-End
|
|
|
|
/// <summary>
|
|
/// Checks if the implanted person was a Rev or Head Rev and remove role or destroy mindshield respectively.
|
|
/// </summary>
|
|
private void MindShieldRemovalCheck(EntityUid implanted, EntityUid implant)
|
|
{
|
|
if (HasComp<HeadRevolutionaryComponent>(implanted))
|
|
{
|
|
_popupSystem.PopupEntity(Loc.GetString("head-rev-break-mindshield"), implanted);
|
|
QueueDel(implant);
|
|
return;
|
|
}
|
|
|
|
if (_mindSystem.TryGetMind(implanted, out var mindId, out _) &&
|
|
_roleSystem.MindRemoveRole<RevolutionaryRoleComponent>(mindId))
|
|
{
|
|
_adminLogManager.Add(LogType.Mind, LogImpact.Medium, $"{ToPrettyString(implanted)} was deconverted due to being implanted with a Mindshield.");
|
|
}
|
|
}
|
|
|
|
private void OnImplantRemoved(Entity<MindShieldImplantComponent> ent, ref ImplantRemovedEvent args)
|
|
{
|
|
RemComp<MindShieldComponent>(args.Implanted);
|
|
}
|
|
}
|
|
|