diff --git a/Content.Client/Access/IdCardSystem.cs b/Content.Client/Access/IdCardSystem.cs index fcf2bf57de..e0c02976f7 100644 --- a/Content.Client/Access/IdCardSystem.cs +++ b/Content.Client/Access/IdCardSystem.cs @@ -2,6 +2,4 @@ namespace Content.Client.Access; -public sealed class IdCardSystem : SharedIdCardSystem -{ -} +public sealed class IdCardSystem : SharedIdCardSystem; diff --git a/Content.Server/Access/Systems/IdCardSystem.cs b/Content.Server/Access/Systems/IdCardSystem.cs index 6b3d8db595..9cd9976cea 100644 --- a/Content.Server/Access/Systems/IdCardSystem.cs +++ b/Content.Server/Access/Systems/IdCardSystem.cs @@ -7,8 +7,6 @@ using Content.Shared.Access.Components; using Content.Shared.Access.Systems; using Content.Shared.Database; using Content.Shared.Popups; -using Content.Shared.Roles; -using Content.Shared.StatusIcon; using Robust.Shared.Prototypes; using Robust.Shared.Random; @@ -20,20 +18,13 @@ public sealed class IdCardSystem : SharedIdCardSystem [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!; - [Dependency] private readonly MetaDataSystem _metaSystem = default!; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnMicrowaved); } - private void OnMapInit(EntityUid uid, IdCardComponent id, MapInitEvent args) - { - UpdateEntityName(uid, id); - } - private void OnMicrowaved(EntityUid uid, IdCardComponent component, BeingMicrowavedEvent args) { if (TryComp(uid, out var access)) @@ -81,143 +72,4 @@ public sealed class IdCardSystem : SharedIdCardSystem $"{ToPrettyString(args.Microwave)} added {random.ID} access to {ToPrettyString(uid):entity}"); } } - - /// - /// Attempts to change the job title of a card. - /// Returns true/false. - /// - /// - /// If provided with a player's EntityUid to the player parameter, adds the change to the admin logs. - /// - public bool TryChangeJobTitle(EntityUid uid, string? jobTitle, IdCardComponent? id = null, EntityUid? player = null) - { - if (!Resolve(uid, ref id)) - return false; - - if (!string.IsNullOrWhiteSpace(jobTitle)) - { - jobTitle = jobTitle.Trim(); - - if (jobTitle.Length > IdCardConsoleComponent.MaxJobTitleLength) - jobTitle = jobTitle[..IdCardConsoleComponent.MaxJobTitleLength]; - } - else - { - jobTitle = null; - } - - if (id.JobTitle == jobTitle) - return true; - id.JobTitle = jobTitle; - Dirty(uid, id); - UpdateEntityName(uid, id); - - if (player != null) - { - _adminLogger.Add(LogType.Identity, LogImpact.Low, - $"{ToPrettyString(player.Value):player} has changed the job title of {ToPrettyString(uid):entity} to {jobTitle} "); - } - return true; - } - - public bool TryChangeJobIcon(EntityUid uid, StatusIconPrototype jobIcon, IdCardComponent? id = null, EntityUid? player = null) - { - if (!Resolve(uid, ref id)) - { - return false; - } - - if (id.JobIcon == jobIcon.ID) - { - return true; - } - - id.JobIcon = jobIcon.ID; - Dirty(uid, id); - - if (player != null) - { - _adminLogger.Add(LogType.Identity, LogImpact.Low, - $"{ToPrettyString(player.Value):player} has changed the job icon of {ToPrettyString(uid):entity} to {jobIcon} "); - } - - return true; - } - - public bool TryChangeJobDepartment(EntityUid uid, JobPrototype job, IdCardComponent? id = null) - { - if (!Resolve(uid, ref id)) - return false; - - id.JobDepartments.Clear(); - foreach (var department in _prototypeManager.EnumeratePrototypes()) - { - if (department.Roles.Contains(job.ID)) - id.JobDepartments.Add("department-" + department.ID); - } - - Dirty(uid, id); - - return true; - } - - /// - /// Attempts to change the full name of a card. - /// Returns true/false. - /// - /// - /// If provided with a player's EntityUid to the player parameter, adds the change to the admin logs. - /// - public bool TryChangeFullName(EntityUid uid, string? fullName, IdCardComponent? id = null, EntityUid? player = null) - { - if (!Resolve(uid, ref id)) - return false; - - if (!string.IsNullOrWhiteSpace(fullName)) - { - fullName = fullName.Trim(); - if (fullName.Length > IdCardConsoleComponent.MaxFullNameLength) - fullName = fullName[..IdCardConsoleComponent.MaxFullNameLength]; - } - else - { - fullName = null; - } - - if (id.FullName == fullName) - return true; - id.FullName = fullName; - Dirty(uid, id); - UpdateEntityName(uid, id); - - if (player != null) - { - _adminLogger.Add(LogType.Identity, LogImpact.Low, - $"{ToPrettyString(player.Value):player} has changed the name of {ToPrettyString(uid):entity} to {fullName} "); - } - return true; - } - - /// - /// Changes the name of the id's owner. - /// - /// - /// If either or is empty, it's replaced by placeholders. - /// If both are empty, the original entity's name is restored. - /// - private void UpdateEntityName(EntityUid uid, IdCardComponent? id = null) - { - if (!Resolve(uid, ref id)) - return; - - var jobSuffix = string.IsNullOrWhiteSpace(id.JobTitle) ? string.Empty : $" ({id.JobTitle})"; - - var val = string.IsNullOrWhiteSpace(id.FullName) - ? Loc.GetString("access-id-card-component-owner-name-job-title-text", - ("jobSuffix", jobSuffix)) - : Loc.GetString("access-id-card-component-owner-full-name-job-title-text", - ("fullName", id.FullName), - ("jobSuffix", jobSuffix)); - _metaSystem.SetEntityName(uid, val); - } } diff --git a/Content.Shared/Access/Systems/SharedIdCardSystem.cs b/Content.Shared/Access/Systems/SharedIdCardSystem.cs index 842e7e7e6a..11a61c7bf3 100644 --- a/Content.Shared/Access/Systems/SharedIdCardSystem.cs +++ b/Content.Shared/Access/Systems/SharedIdCardSystem.cs @@ -1,13 +1,32 @@ using Content.Shared.Access.Components; +using Content.Shared.Administration.Logs; +using Content.Shared.Database; using Content.Shared.Hands.Components; using Content.Shared.Inventory; using Content.Shared.PDA; +using Content.Shared.Roles; +using Content.Shared.StatusIcon; +using Robust.Shared.Prototypes; namespace Content.Shared.Access.Systems; public abstract class SharedIdCardSystem : EntitySystem { + [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly InventorySystem _inventorySystem = default!; + [Dependency] private readonly MetaDataSystem _metaSystem = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnMapInit); + } + + private void OnMapInit(EntityUid uid, IdCardComponent id, MapInitEvent args) + { + UpdateEntityName(uid, id); + } /// /// Attempt to find an ID card on an entity. This will look in the entity itself, in the entity's hands, and @@ -56,4 +75,143 @@ public abstract class SharedIdCardSystem : EntitySystem idCard = default; return false; } + + /// + /// Attempts to change the job title of a card. + /// Returns true/false. + /// + /// + /// If provided with a player's EntityUid to the player parameter, adds the change to the admin logs. + /// + public bool TryChangeJobTitle(EntityUid uid, string? jobTitle, IdCardComponent? id = null, EntityUid? player = null) + { + if (!Resolve(uid, ref id)) + return false; + + if (!string.IsNullOrWhiteSpace(jobTitle)) + { + jobTitle = jobTitle.Trim(); + + if (jobTitle.Length > IdCardConsoleComponent.MaxJobTitleLength) + jobTitle = jobTitle[..IdCardConsoleComponent.MaxJobTitleLength]; + } + else + { + jobTitle = null; + } + + if (id.JobTitle == jobTitle) + return true; + id.JobTitle = jobTitle; + Dirty(uid, id); + UpdateEntityName(uid, id); + + if (player != null) + { + _adminLogger.Add(LogType.Identity, LogImpact.Low, + $"{ToPrettyString(player.Value):player} has changed the job title of {ToPrettyString(uid):entity} to {jobTitle} "); + } + return true; + } + + public bool TryChangeJobIcon(EntityUid uid, StatusIconPrototype jobIcon, IdCardComponent? id = null, EntityUid? player = null) + { + if (!Resolve(uid, ref id)) + { + return false; + } + + if (id.JobIcon == jobIcon.ID) + { + return true; + } + + id.JobIcon = jobIcon.ID; + Dirty(uid, id); + + if (player != null) + { + _adminLogger.Add(LogType.Identity, LogImpact.Low, + $"{ToPrettyString(player.Value):player} has changed the job icon of {ToPrettyString(uid):entity} to {jobIcon} "); + } + + return true; + } + + public bool TryChangeJobDepartment(EntityUid uid, JobPrototype job, IdCardComponent? id = null) + { + if (!Resolve(uid, ref id)) + return false; + + id.JobDepartments.Clear(); + foreach (var department in _prototypeManager.EnumeratePrototypes()) + { + if (department.Roles.Contains(job.ID)) + id.JobDepartments.Add("department-" + department.ID); + } + + Dirty(uid, id); + + return true; + } + + /// + /// Attempts to change the full name of a card. + /// Returns true/false. + /// + /// + /// If provided with a player's EntityUid to the player parameter, adds the change to the admin logs. + /// + public bool TryChangeFullName(EntityUid uid, string? fullName, IdCardComponent? id = null, EntityUid? player = null) + { + if (!Resolve(uid, ref id)) + return false; + + if (!string.IsNullOrWhiteSpace(fullName)) + { + fullName = fullName.Trim(); + if (fullName.Length > IdCardConsoleComponent.MaxFullNameLength) + fullName = fullName[..IdCardConsoleComponent.MaxFullNameLength]; + } + else + { + fullName = null; + } + + if (id.FullName == fullName) + return true; + id.FullName = fullName; + Dirty(uid, id); + UpdateEntityName(uid, id); + + if (player != null) + { + _adminLogger.Add(LogType.Identity, LogImpact.Low, + $"{ToPrettyString(player.Value):player} has changed the name of {ToPrettyString(uid):entity} to {fullName} "); + } + return true; + } + + /// + /// Changes the name of the id's owner. + /// + /// + /// If either or is empty, it's replaced by placeholders. + /// If both are empty, the original entity's name is restored. + /// + private void UpdateEntityName(EntityUid uid, IdCardComponent? id = null) + { + if (!Resolve(uid, ref id)) + return; + + var jobSuffix = string.IsNullOrWhiteSpace(id.JobTitle) ? string.Empty : $" ({id.JobTitle})"; + + var val = string.IsNullOrWhiteSpace(id.FullName) + ? Loc.GetString("access-id-card-component-owner-name-job-title-text", + ("jobSuffix", jobSuffix)) + : Loc.GetString("access-id-card-component-owner-full-name-job-title-text", + ("fullName", id.FullName), + ("jobSuffix", jobSuffix)); + _metaSystem.SetEntityName(uid, val); + } }