using System.Linq; using Content.Server.Administration.Managers; using Content.Server.Mind; using Content.Shared.Administration; using Content.Shared.Mind; using Content.Shared.Mind.Components; using Robust.Shared.Network; namespace Content.Server.Administration.Systems; /// /// Server-side of the quick info system. /// /// /// Just a simple "replies to requests from authorized clients". /// /// public sealed partial class AdminQuickInfoSystem : EntitySystem { [Dependency] private IAdminManager _adminManager = null!; [Dependency] private MindSystem _mind = null!; public override void Initialize() { base.Initialize(); SubscribeNetworkEvent(HandleRequest); } private void HandleRequest(QuickInfoShared.Request ev, EntitySessionEventArgs args) { if (!_adminManager.HasAdminFlag(args.SenderSession, QuickInfoShared.RequiredFlag)) { Log.Warning($"{args.SenderSession} tried to fetch entity quick info without required permissions!"); return; } var responses = ev.Entities.Select(e => { if (!TryGetEntity(e, out var ent)) return new QuickInfoShared.SingleEntityInfo(e, false, "", "", null); NetUserId? lastPlayer = null; // Check the last mind that was attached to the entity and get its userid. if (_mind.TryGetLastMind(ent.Value, out var lastMind)) { lastPlayer = lastMind.Value.Comp.UserId; } var metadata = MetaData(ent.Value); return new QuickInfoShared.SingleEntityInfo(e, true, metadata.EntityName, metadata.EntityPrototype?.ID, lastPlayer); }) .ToArray(); RaiseNetworkEvent(new QuickInfoShared.Response { Entities = responses }, args.SenderSession); } }