mirror of
https://github.com/WWhiteDreamProject/wwdpublic.git
synced 2026-04-17 05:27:38 +03:00
## Mirror of PR #25192: [Criminal record hud icons](https://github.com/space-wizards/space-station-14/pull/25192) from <img src="https://avatars.githubusercontent.com/u/10567778?v=4" alt="space-wizards" width="22"/> [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `60b9d89e4dbdd8aaad4992a105628297d9480617` PR opened by <img src="https://avatars.githubusercontent.com/u/137322659?v=4" width="16"/><a href="https://github.com/Arendian"> Arendian</a> at 2024-02-13 19:39:59 UTC PR merged by <img src="https://avatars.githubusercontent.com/u/19864447?v=4" width="16"/><a href="https://github.com/web-flow"> web-flow</a> at 2024-03-11 03:12:52 UTC --- PR changed 19 files with 230 additions and 40 deletions. The PR had the following labels: - Changes: UI - Changes: Sprites - Status: Needs Review --- <details open="true"><summary><h1>Original Body</h1></summary> > <!-- Please read these guidelines before opening your PR: https://docs.spacestation14.io/en/getting-started/pr-guideline --> > <!-- The text between the arrows are comments - they will not be visible on your PR. --> > > ## About the PR > <!-- What did you change in this PR? --> > Added three more statuses to the criminal record console: Paroled, Suspect, Discharged. > Entities now have a hud icon based on the criminal record linked to the name they are currently showing. > If "Urist McHands" is wanted, anyone that currently shows as being "Urist McHands", even when their real name is not Urist McHands, will show the relevant hud icon to entities wearing a security hud. If Urist McHands is disguised as someone without a criminal record or has no name(middle-aged captain man etc.), they won't show an icon. > > ## Why / Balance > <!-- Why was it changed? Link any discussions or issues here. Please discuss how this would affect game balance. --> > Icons showing on sechuds will make sechuds more usefull, it will (hopefully) improve security coordination by allowing officers to more easily see who they need to keep track of. > It also gives warden something extra to do. > > ## Technical details > <!-- If this is a code change, summarize at high level how your new code works. This makes it easier to review. --> > > When a criminal record is changed, every entity with an IdentityComponent will have their name checked to see if it equals the name of the changed criminal record, if it's equal the person will get the CriminalRecordComponent which holds the icon that needs to be shown on the entity. > If a criminal record is removed, the CriminalRecordComponent will be removed from all entities that currently have the visible name associated with the criminal record. > > If an entity changes identity, all criminal records will be searched to see if the name has a criminal record attached to it. If the name has a record attached to it, the entity will get the CriminalRecordComponent and the corresponding criminal record hud icon until they change their identity again or the criminal record gets removed. > > ## Media > <!-- > PRs which make ingame changes (adding clothing, items, new features, etc) are required to have media attached that showcase the changes. > Small fixes/refactors are exempt. > Any media may be used in SS14 progress reports, with clear credit given. > > If you're unsure whether your PR will require media, ask a maintainer. > > Check the box below to confirm that you have in fact seen this (put an X in the brackets, like [X]): > --> > > https://github.com/space-wizards/space-station-14/assets/137322659/3c9422e6-897f-456f-b54b-8fdc053cb4e1 > > > - [X] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > **Changelog** > <!-- > Make players aware of new features and changes that could affect how they play the game by adding a Changelog entry. Please read the Changelog guidelines located at: https://docs.spacestation14.io/en/getting-started/pr-guideline#changelog > --> > > 🆑 Dygon > - add: The following criminal record statuses have been added: Suspect, Discharged, Paroled. > - add: Security huds now show an icon on entities that have a visible name linked to a criminal record. > </details> Co-authored-by: Arendian <137322659+Arendian@users.noreply.github.com>
72 lines
2.2 KiB
C#
72 lines
2.2 KiB
C#
using Robust.Shared.Containers;
|
|
using Robust.Shared.Enums;
|
|
|
|
namespace Content.Shared.IdentityManagement.Components;
|
|
|
|
/// <summary>
|
|
/// Stores the identity entity (whose name is the users 'identity', etc)
|
|
/// for a given entity, and marks that it can have an identity at all.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// This is a <see cref="ContainerSlot"/> and not just a datum entity because we do sort of care that it gets deleted and sent with the user.
|
|
/// </remarks>
|
|
[RegisterComponent]
|
|
public sealed partial class IdentityComponent : Component
|
|
{
|
|
[ViewVariables]
|
|
public ContainerSlot IdentityEntitySlot = default!;
|
|
}
|
|
|
|
/// <summary>
|
|
/// A data structure representing the 'identity' of an entity as presented to
|
|
/// other players.
|
|
/// </summary>
|
|
public sealed class IdentityRepresentation
|
|
{
|
|
public string TrueName;
|
|
public Gender TrueGender;
|
|
|
|
public string AgeString;
|
|
|
|
public string? PresumedName;
|
|
public string? PresumedJob;
|
|
|
|
public IdentityRepresentation(string trueName, Gender trueGender, string ageString, string? presumedName=null, string? presumedJob=null)
|
|
{
|
|
TrueName = trueName;
|
|
TrueGender = trueGender;
|
|
|
|
AgeString = ageString;
|
|
|
|
PresumedJob = presumedJob;
|
|
PresumedName = presumedName;
|
|
}
|
|
|
|
public string ToStringKnown(bool trueName)
|
|
{
|
|
return trueName
|
|
? TrueName
|
|
: PresumedName ?? ToStringUnknown();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns a string representing their identity where it is 'unknown' by a viewer.
|
|
/// Used for cases where the viewer is not necessarily able to accurately assess
|
|
/// the identity of the person being viewed.
|
|
/// </summary>
|
|
public string ToStringUnknown()
|
|
{
|
|
var genderString = TrueGender switch
|
|
{
|
|
Gender.Female => Loc.GetString("identity-gender-feminine"),
|
|
Gender.Male => Loc.GetString("identity-gender-masculine"),
|
|
Gender.Epicene or Gender.Neuter or _ => Loc.GetString("identity-gender-person")
|
|
};
|
|
|
|
// i.e. 'young assistant man' or 'old cargo technician person' or 'middle-aged captain'
|
|
return PresumedJob is null
|
|
? $"{AgeString} {genderString}"
|
|
: $"{AgeString} {PresumedJob} {genderString}";
|
|
}
|
|
}
|