Id[entity] 2.0 (real) (#9612)

* starter API

* network ID cards

* Port more stuff from old identity

* Re-implement identity representation + name updating

* move

* proper name returning for `IdentityName`

* move everything important to server, give in to  temptation

* shared / server / client split sadly. move ensure to shared and spawn to server

* identity update queueing + identityblocker

* fixes

* and just like that it's usable for admins

* huge identity pass

* pass dos

* jesus christ

* figs :D

* fuck u

* fix bad merge.

Co-authored-by: Moony <moonheart08@users.noreply.github.com>
This commit is contained in:
Kara
2022-07-10 18:36:53 -07:00
committed by GitHub
parent fb6586cdc6
commit 2d5ec7f85c
68 changed files with 668 additions and 188 deletions

View File

@@ -0,0 +1,7 @@
using Content.Shared.Access.Systems;
namespace Content.Client.Access;
public sealed class IdCardSystem : SharedIdCardSystem
{
}

View File

@@ -170,9 +170,12 @@ namespace Content.Client.Administration.UI
if (pl.Antag)
sb.Append(new Rune(0x1F5E1)); // 🗡
sb.AppendFormat("\"{0}\"", pl.CharacterName)
.Append(' ')
.Append(pl.Username);
sb.AppendFormat("\"{0}\"", pl.CharacterName);
if (pl.IdentityName != pl.CharacterName && pl.IdentityName != string.Empty)
sb.Append(' ').AppendFormat("[{0}]", pl.IdentityName);
sb.Append(' ').Append(pl.Username);
return sb.ToString();
}

View File

@@ -71,6 +71,8 @@ namespace Content.Client.Administration.UI.CustomControls
foreach (var info in _adminSystem.PlayerList)
{
var displayName = $"{info.CharacterName} ({info.Username})";
if (info.IdentityName != info.CharacterName)
displayName += $" [{info.IdentityName}]";
if (!string.IsNullOrEmpty(FilterLineEdit.Text) &&
!displayName.ToLowerInvariant().Contains(FilterLineEdit.Text.Trim().ToLowerInvariant()))
{

View File

@@ -100,6 +100,7 @@ namespace Content.Client.Administration.UI.Tabs.PlayerTab
{
var entry = new PlayerTabEntry(player.Username,
player.CharacterName,
player.IdentityName,
player.StartingJob,
player.Antag ? "YES" : "NO",
new StyleBoxFlat(useAltColor ? _altColor : _defaultColor),

View File

@@ -10,7 +10,7 @@ public sealed partial class PlayerTabEntry : ContainerButton
{
public EntityUid? PlayerUid;
public PlayerTabEntry(string username, string character, string job, string antagonist, StyleBox styleBox, bool connected)
public PlayerTabEntry(string username, string character, string identity, string job, string antagonist, StyleBox styleBox, bool connected)
{
RobustXamlLoader.Load(this);
@@ -19,6 +19,8 @@ public sealed partial class PlayerTabEntry : ContainerButton
UsernameLabel.StyleClasses.Add("Disabled");
JobLabel.Text = job;
CharacterLabel.Text = character;
if (identity != character)
CharacterLabel.Text += $" [{identity}]";
AntagonistLabel.Text = antagonist;
BackgroundColorPanel.PanelOverride = styleBox;
}

View File

@@ -3,6 +3,7 @@ using Content.Client.Cargo.UI;
using Content.Shared.Cargo.BUI;
using Content.Shared.Cargo.Events;
using Content.Shared.Cargo.Prototypes;
using Content.Shared.IdentityManagement;
using Robust.Client.GameObjects;
using Robust.Client.Player;
using Robust.Shared.Prototypes;
@@ -55,7 +56,7 @@ namespace Content.Client.Cargo.BUI
string orderRequester;
if (entityManager.TryGetComponent<MetaDataComponent>(localPlayer, out var metadata))
orderRequester = metadata.EntityName;
orderRequester = Identity.Name(localPlayer.Value, entityManager);
else
orderRequester = string.Empty;

View File

@@ -1,4 +1,8 @@
using Content.Client.Administration.Managers;
using Content.Shared.Administration;
using Content.Shared.IdentityManagement;
using Robust.Client.GameObjects;
using Robust.Client.Player;
using Robust.Client.UserInterface.Controls;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
@@ -11,6 +15,7 @@ namespace Content.Client.ContextMenu.UI
public const string StyleClassEntityMenuCountText = "contextMenuCount";
[Dependency] private IEntityManager _entityManager = default!;
[Dependency] private IPlayerManager _playerManager = default!;
/// <summary>
/// The entity that can be accessed by interacting with this element.
@@ -74,10 +79,12 @@ namespace Content.Client.ContextMenu.UI
EntityIcon.Sprite = _entityManager.GetComponentOrNull<ISpriteComponent>(entity);
if (UserInterfaceManager.DebugMonitors.Visible)
var admin = IoCManager.Resolve<IClientAdminManager>();
if (admin.HasFlag(AdminFlags.Admin | AdminFlags.Debug))
Text = _entityManager.ToPrettyString(entity.Value);
else
Text = _entityManager.GetComponent<MetaDataComponent>(entity.Value).EntityName;
Text = Identity.Name(entity.Value, _entityManager, _playerManager.LocalPlayer!.ControlledEntity!);
}
}
}

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Content.Shared.IdentityManagement;
using Robust.Client.GameObjects;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
@@ -21,7 +22,7 @@ namespace Content.Client.ContextMenu.UI
{
if (GroupingContextMenuType == 0)
{
var newEntities = entities.GroupBy(e => _entityManager.GetComponent<MetaDataComponent>(e).EntityName + (_entityManager.GetComponent<MetaDataComponent>(e).EntityPrototype?.ID ?? string.Empty)).ToList();
var newEntities = entities.GroupBy(e => Identity.Name(e, _entityManager) + (_entityManager.GetComponent<MetaDataComponent>(e).EntityPrototype?.ID ?? string.Empty)).ToList();
return newEntities.Select(grp => grp.ToList()).ToList();
}
else

View File

@@ -2,6 +2,7 @@ using System.Linq;
using System.Threading;
using Content.Client.Verbs;
using Content.Shared.Examine;
using Content.Shared.IdentityManagement;
using Content.Shared.Input;
using Content.Shared.Verbs;
using JetBrains.Annotations;
@@ -192,7 +193,7 @@ namespace Content.Client.Examine
hBox.AddChild(new Label
{
Text = EntityManager.GetComponent<MetaDataComponent>(target).EntityName,
Text = Identity.Name(target, EntityManager, player),
HorizontalExpand = true,
});

View File

@@ -7,7 +7,7 @@ using Content.Shared.Disease.Components;
using Content.Shared.FixedPoint;
using Robust.Shared.Prototypes;
using Content.Shared.Damage;
using Content.Shared.IdentityManagement;
using static Content.Shared.MedicalScanner.SharedHealthAnalyzerComponent;
namespace Content.Client.HealthAnalyzer.UI
@@ -28,8 +28,9 @@ namespace Content.Client.HealthAnalyzer.UI
if (msg.TargetEntity != null && entities.TryGetComponent<DamageableComponent>(msg.TargetEntity, out var damageable))
{
string entityName = "Unknown";
if (msg.TargetEntity != null && entities.TryGetComponent<MetaDataComponent>(msg.TargetEntity.Value, out var metaData))
entityName = metaData.EntityName;
if (msg.TargetEntity != null &&
entities.TryGetComponent<MetaDataComponent>(msg.TargetEntity.Value, out var metaData))
entityName = Identity.Name(msg.TargetEntity.Value, entities);
IReadOnlyDictionary<string, FixedPoint2> DamagePerGroup = damageable.DamagePerGroup;
IReadOnlyDictionary<string, FixedPoint2> DamagePerType = damageable.Damage.DamageDict;

View File

@@ -0,0 +1,7 @@
using Content.Shared.IdentityManagement;
namespace Content.Client.IdentityManagement;
public class IdentitySystem : SharedIdentitySystem
{
}

View File

@@ -1,5 +1,6 @@
using System.Collections.Generic;
using Content.Client.Strip;
using Content.Shared.IdentityManagement;
using Content.Shared.Strip.Components;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
@@ -28,7 +29,8 @@ namespace Content.Client.Inventory
{
base.Open();
_strippingMenu = new StrippingMenu($"{Loc.GetString("strippable-bound-user-interface-stripping-menu-title",("ownerName", IoCManager.Resolve<IEntityManager>().GetComponent<MetaDataComponent>(Owner.Owner).EntityName))}");
var entMan = IoCManager.Resolve<IEntityManager>();
_strippingMenu = new StrippingMenu($"{Loc.GetString("strippable-bound-user-interface-stripping-menu-title", ("ownerName", Identity.Name(Owner.Owner, entMan)))}");
_strippingMenu.OnClose += Close;
_strippingMenu.OpenCentered();

View File

@@ -4,6 +4,7 @@ using Content.Client.Items.Components;
using Content.Client.Resources;
using Content.Client.Stylesheets;
using Content.Shared.Hands.Components;
using Content.Shared.IdentityManagement;
using Robust.Client.Graphics;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
@@ -159,11 +160,12 @@ namespace Content.Client.Items.UI
if (_entityManager.TryGetComponent(_entity, out HandVirtualItemComponent? virtualItem)
&& _entityManager.EntityExists(virtualItem.BlockingEntity))
{
_itemNameLabel.Text = _entityManager.GetComponent<MetaDataComponent>(virtualItem.BlockingEntity).EntityName;
// Uses identity because we can be blocked by pulling someone
_itemNameLabel.Text = Identity.Name(virtualItem.BlockingEntity, _entityManager);
}
else
{
_itemNameLabel.Text = _entityManager.GetComponent<MetaDataComponent>(_entity.Value).EntityName;
_itemNameLabel.Text = Identity.Name(_entity.Value, _entityManager);
}
}