public void Execute(IConsoleShell shell, string argStr, string[] args)
        {
            if (args.Length != 2)
            {
                shell.WriteLine(Loc.GetString("Wrong number of arguments."));
                return;
            }

            if (!int.TryParse(args[0], out var entityUid))
            {
                shell.WriteLine(Loc.GetString("EntityUid must be a number."));
                return;
            }

            var entityManager = IoCManager.Resolve <IEntityManager>();

            var eUid = new EntityUid(entityUid);

            if (!eUid.IsValid() || !entityManager.EntityExists(eUid))
            {
                shell.WriteLine(Loc.GetString("Invalid entity ID."));
                return;
            }

            var target = entityManager.GetEntity(eUid);

            if (!target.TryGetComponent <MindComponent>(out var mindComponent))
            {
                shell.WriteLine(Loc.GetString("Target entity does not have a mind (did you forget to make sentient?)"));
                return;
            }

            if (!IoCManager.Resolve <IPlayerManager>().TryGetSessionByUsername(args[1], out var session))
            {
                shell.WriteLine(Loc.GetString("Target player does not exist"));
                return;
            }

            // hm, does player have a mind? if not we may need to give them one
            var playerCData = session.ContentData();

            if (playerCData == null)
            {
                shell.WriteLine(Loc.GetString("Target player does not have content data (wtf?)"));
                return;
            }

            var mind = playerCData.Mind;

            if (mind == null)
            {
                mind = new Mind(session.UserId)
                {
                    CharacterName = target.Name
                };
                playerCData.Mind = mind;
            }
            mind.TransferTo(target);
        }
Beispiel #2
0
        public void Execute(IConsoleShell shell, IPlayerSession player, string[] args)
        {
            if (args.Length < 1)
            {
                shell.SendText(player, Loc.GetString("Wrong number of arguments."));
                return;
            }

            if (!int.TryParse(args[0], out var entityUid))
            {
                shell.SendText(player, Loc.GetString("EntityUid must be a number."));
                return;
            }

            var entityManager = IoCManager.Resolve <IEntityManager>();

            var eUid = new EntityUid(entityUid);

            if (!eUid.IsValid() || !entityManager.EntityExists(eUid))
            {
                shell.SendText(player, Loc.GetString("Invalid entity ID."));
                return;
            }

            var target = entityManager.GetEntity(eUid);

            if (!target.TryGetComponent <InventoryComponent>(out var inventoryComponent))
            {
                shell.SendText(player, Loc.GetString("Target entity does not have an inventory!"));
                return;
            }

            if (args.Length == 1)
            {
                var eui = IoCManager.Resolve <EuiManager>();
                var ui  = new SetOutfitEui(target);
                eui.OpenEui(ui, player);
                return;
            }

            var prototypeManager = IoCManager.Resolve <IPrototypeManager>();

            if (!prototypeManager.TryIndex <StartingGearPrototype>(args[1], out var startingGear))
            {
                shell.SendText(player, Loc.GetString("Invalid outfit id"));
                return;
            }

            foreach (var slot in inventoryComponent.Slots)
            {
                inventoryComponent.ForceUnequip(slot);
                var gearStr = startingGear.GetGear(slot, null);
                if (gearStr != "")
                {
                    var equipmentEntity = entityManager.SpawnEntity(gearStr, target.Transform.Coordinates);
                    inventoryComponent.Equip(slot, equipmentEntity.GetComponent <ItemComponent>(), false);
                }
            }
        }
Beispiel #3
0
        public void Execute(IConsoleShell shell, string argStr, string[] args)
        {
            if (args.Length != 2)
            {
                shell.WriteLine(Loc.GetString("shell-wrong-arguments-number"));
                return;
            }

            if (!int.TryParse(args[0], out var entityUid))
            {
                shell.WriteLine(Loc.GetString("shell-entity-uid-must-be-number"));
                return;
            }

            var entityManager = IoCManager.Resolve <IEntityManager>();

            var eUid = new EntityUid(entityUid);

            if (!eUid.IsValid() || !entityManager.EntityExists(eUid))
            {
                shell.WriteLine(Loc.GetString("shell-invalid-entity-id"));
                return;
            }

            var target = entityManager.GetEntity(eUid);

            if (!target.HasComponent <MindComponent>())
            {
                shell.WriteLine(Loc.GetString("set-mind-command-target-has-no-mind-message"));
                return;
            }

            if (!IoCManager.Resolve <IPlayerManager>().TryGetSessionByUsername(args[1], out var session))
            {
                shell.WriteLine(Loc.GetString("shell-target-player-does-not-exist"));
                return;
            }

            // hm, does player have a mind? if not we may need to give them one
            var playerCData = session.ContentData();

            if (playerCData == null)
            {
                shell.WriteLine(Loc.GetString("set-mind-command-target-has-no-content-data-message"));
                return;
            }

            var mind = playerCData.Mind;

            if (mind == null)
            {
                mind = new Mind.Mind(session.UserId)
                {
                    CharacterName = target.Name
                };
                playerCData.Mind = mind;
            }
            mind.TransferTo(target);
        }
        public void Execute(IConsoleShell shell, string argStr, string[] args)
        {
            var sandboxManager = IoCManager.Resolve <ISandboxManager>();
            var adminManager   = IoCManager.Resolve <IAdminManager>();

            if (shell.IsClient && (!sandboxManager.IsSandboxEnabled && !adminManager.HasAdminFlag((IPlayerSession)shell.Player !, AdminFlags.Mapping)))
            {
                shell.WriteError("You are not currently able to use mapping commands.");
            }

            if (args.Length != 3)
            {
                shell.WriteLine(Loc.GetString("shell-wrong-arguments-number"));
                return;
            }



            var entityManager = IoCManager.Resolve <IEntityManager>();

            if (!int.TryParse(args[0], out var targetId))
            {
                shell.WriteLine(Loc.GetString("shell-argument-must-be-number"));
                return;
            }

            var eUid = new EntityUid(targetId);

            if (!eUid.IsValid() || !entityManager.EntityExists(eUid))
            {
                shell.WriteLine(Loc.GetString("shell-invalid-entity-id"));
                return;
            }

            var target = entityManager.GetEntity(eUid);

            if (!target.TryGetComponent(out NodeContainerComponent? nodeContainerComponent))
            {
                shell.WriteLine(Loc.GetString("shell-entity-is-not-node-container"));
                return;
            }

            if (!Enum.TryParse(args[1], out NodeGroupID nodeGroupId))
            {
                shell.WriteLine(Loc.GetString("shell-node-group-is-invalid"));
                return;
            }

            var color = Color.TryFromHex(args[2]);

            if (!color.HasValue)
            {
                shell.WriteError(Loc.GetString("shell-invalid-color-hex"));
                return;
            }

            PaintNodes(nodeContainerComponent, nodeGroupId, color.Value);
        }
Beispiel #5
0
        public void Execute(IConsoleShell shell, string argStr, string[] args)
        {
            var player = shell.Player as IPlayerSession;

            if (player == null)
            {
                shell.WriteLine("Server cannot do this.");
                return;
            }

            if (args.Length != 1)
            {
                shell.WriteLine(Loc.GetString("Wrong number of arguments."));
                return;
            }


            var entityManager = IoCManager.Resolve <IEntityManager>();

            if (!int.TryParse(args[0], out var targetId))
            {
                shell.WriteLine(Loc.GetString("Argument must be a number."));
                return;
            }

            var eUid = new EntityUid(targetId);

            if (!eUid.IsValid() || !entityManager.EntityExists(eUid))
            {
                shell.WriteLine(Loc.GetString("Invalid entity ID."));
                return;
            }

            var target = entityManager.GetEntity(eUid);

            if (!target.TryGetComponent(out MindComponent? mindComponent))
            {
                shell.WriteLine(Loc.GetString("Target entity is not a mob!"));
                return;
            }

            var mind = player.ContentData()?.Mind;

            DebugTools.AssertNotNull(mind);

            var oldEntity = mind !.CurrentEntity;

            mindComponent.Mind?.TransferTo(null);
            mind.TransferTo(target);

            DebugTools.AssertNotNull(oldEntity);

            if (oldEntity !.HasComponent <GhostComponent>())
            {
                oldEntity.Delete();
            }
        }
Beispiel #6
0
        private void HandleExamine(ICommonSession session, GridCoordinates coords, EntityUid uid)
        {
            if (!uid.IsValid() || !_entityManager.TryGetEntity(uid, out var entity))
            {
                return;
            }

            DoExamine(entity);
        }
        private bool OnCopy(ICommonSession?session, EntityCoordinates coords, EntityUid uid)
        {
            if (!CanSandbox())
            {
                return(false);
            }

            // Try copy entity.
            if (uid.IsValid() &&
                EntityManager.TryGetComponent(uid, out MetaDataComponent? comp) &&
                !comp.EntityDeleted)
            {
                if (comp.EntityPrototype == null || comp.EntityPrototype.NoSpawn || comp.EntityPrototype.Abstract)
                {
                    return(false);
                }

                if (_placementManager.Eraser)
                {
                    _placementManager.ToggleEraser();
                }

                _placementManager.BeginPlacing(new()
                {
                    EntityType      = comp.EntityPrototype.ID,
                    IsTile          = false,
                    TileType        = 0,
                    PlacementOption = comp.EntityPrototype.PlacementMode
                });
                return(true);
            }

            // Try copy tile.
            if (!_mapManager.TryFindGridAt(coords.ToMap(EntityManager), out var grid) || !grid.TryGetTileRef(coords, out var tileRef))
            {
                return(false);
            }

            if (_placementManager.Eraser)
            {
                _placementManager.ToggleEraser();
            }

            _placementManager.BeginPlacing(new()
            {
                EntityType      = null,
                IsTile          = true,
                TileType        = tileRef.Tile.TypeId,
                PlacementOption = nameof(AlignTileAny)
            });
            return(true);
        }
Beispiel #8
0
        public void Execute(IConsoleShell shell, IPlayerSession player, string[] args)
        {
            if (player == null)
            {
                shell.SendText((IPlayerSession)null, "Server cannot do this.");
                return;
            }

            if (args.Length != 1)
            {
                shell.SendText(player, Loc.GetString("Wrong number of arguments."));
                return;
            }


            var mind          = player.ContentData().Mind;
            var entityManager = IoCManager.Resolve <IEntityManager>();

            if (!int.TryParse(args[0], out var targetId))
            {
                shell.SendText(player, Loc.GetString("Argument must be a number."));
                return;
            }

            var eUid = new EntityUid(targetId);

            if (!eUid.IsValid() || !entityManager.EntityExists(eUid))
            {
                shell.SendText(player, Loc.GetString("Invalid entity ID."));
                return;
            }

            var target = entityManager.GetEntity(eUid);

            if (!target.TryGetComponent(out MindComponent mindComponent))
            {
                shell.SendText(player, Loc.GetString("Target entity is not a mob!"));
                return;
            }

            var oldEntity = mind.CurrentEntity;

            mindComponent.Mind?.TransferTo(null);
            mind.TransferTo(target);

            if (oldEntity.HasComponent <GhostComponent>())
            {
                oldEntity.Delete();
            }
        }
Beispiel #9
0
        /// <summary>
        ///     Verifies that this set of coordinates can be currently resolved to a location.
        /// </summary>
        /// <param name="entityManager">Entity Manager containing the entity Id.</param>
        /// <returns><see langword="true" /> if this set of coordinates can be currently resolved to a location, otherwise <see langword="false" />.</returns>
        public bool IsValid(IEntityManager entityManager)
        {
            if (!EntityId.IsValid() || !entityManager.EntityExists(EntityId))
            {
                return(false);
            }

            if (!float.IsFinite(Position.X) || !float.IsFinite(Position.Y))
            {
                return(false);
            }

            return(true);
        }
        public void Execute(IConsoleShell shell, string argStr, string[] args)
        {
            if (args.Length < 1)
            {
                shell.WriteLine(Loc.GetString("shell-wrong-arguments-number"));
                return;
            }

            if (!int.TryParse(args[0], out var entityUid))
            {
                shell.WriteLine(Loc.GetString("shell-entity-uid-must-be-number"));
                return;
            }

            var entityManager = IoCManager.Resolve <IEntityManager>();

            var target = new EntityUid(entityUid);

            if (!target.IsValid() || !entityManager.EntityExists(target))
            {
                shell.WriteLine(Loc.GetString("shell-invalid-entity-id"));
                return;
            }

            if (!entityManager.HasComponent <InventoryComponent?>(target))
            {
                shell.WriteLine(Loc.GetString("shell-target-entity-does-not-have-message", ("missing", "inventory")));
                return;
            }

            if (args.Length == 1)
            {
                if (shell.Player is not IPlayerSession player)
                {
                    shell.WriteError(Loc.GetString("set-outfit-command-is-not-player-error"));
                    return;
                }

                var eui = IoCManager.Resolve <EuiManager>();
                var ui  = new SetOutfitEui(target);
                eui.OpenEui(ui, player);
                return;
            }

            if (!SetOutfit(target, args[1], entityManager))
            {
                shell.WriteLine(Loc.GetString("set-outfit-command-invalid-outfit-id-error"));
            }
        }
    public bool ValidateEntityTarget(EntityUid user, EntityUid target, EntityTargetAction action)
    {
        if (!target.IsValid() || Deleted(target))
        {
            return(false);
        }

        if (action.Whitelist != null && !action.Whitelist.IsValid(target, EntityManager))
        {
            return(false);
        }

        if (action.CheckCanInteract && !_actionBlockerSystem.CanInteract(user, target))
        {
            return(false);
        }

        if (user == target)
        {
            return(action.CanTargetSelf);
        }

        if (!action.CheckCanAccess)
        {
            // even if we don't check for obstructions, we may still need to check the range.
            var xform       = Transform(user);
            var targetXform = Transform(target);

            if (xform.MapID != targetXform.MapID)
            {
                return(false);
            }

            if (action.Range <= 0)
            {
                return(true);
            }

            return((xform.WorldPosition - targetXform.WorldPosition).Length <= action.Range);
        }

        if (_interactionSystem.InRangeUnobstructed(user, target, range: action.Range) &&
            _containerSystem.IsInSameOrParentContainer(user, target))
        {
            return(true);
        }

        return(_interactionSystem.CanAccessViaStorage(user, target));
    }
        public void Execute(IConsoleShell shell, string argStr, string[] args)
        {
            var player = shell.Player as IPlayerSession;

            if (player == null)
            {
                shell.WriteLine("shell-server-cannot");
                return;
            }

            if (args.Length != 1)
            {
                shell.WriteLine(Loc.GetString("shell-wrong-arguments-number"));
                return;
            }


            var entityManager = IoCManager.Resolve <IEntityManager>();

            if (!int.TryParse(args[0], out var targetId))
            {
                shell.WriteLine(Loc.GetString("shell-argument-must-be-number"));
                return;
            }

            var eUid = new EntityUid(targetId);

            if (!eUid.IsValid() || !entityManager.EntityExists(eUid))
            {
                shell.WriteLine(Loc.GetString("shell-invalid-entity-id"));
                return;
            }

            var target = entityManager.GetEntity(eUid);

            if (!target.TryGetComponent(out MindComponent? mindComponent))
            {
                shell.WriteLine(Loc.GetString("shell-entity-is-not-mob"));
                return;
            }

            var mind = player.ContentData()?.Mind;

            DebugTools.AssertNotNull(mind);

            mindComponent.Mind?.TransferTo(null);
            mind !.TransferTo(target);
        }
        private void HandleExamine(ICommonSession session, GridCoordinates coords, EntityUid uid)
        {
            if (!uid.IsValid() || !_entityManager.TryGetEntity(uid, out var examined))
            {
                return;
            }

            var playerEntity = _playerManager.LocalPlayer.ControlledEntity;

            if (playerEntity == null || !CanExamine(playerEntity, examined))
            {
                return;
            }

            DoExamine(examined);
        }
        public void LogVerb(Verb verb, EntityUid user, EntityUid target, bool forced)
        {
            // first get the held item. again.
            EntityUid usedUid = default;

            if (EntityManager.TryGetComponent(user, out SharedHandsComponent? hands) &&
                hands.TryGetActiveHeldEntity(out var heldEntity))
            {
                usedUid = heldEntity;
                if (usedUid != default && EntityManager.TryGetComponent(usedUid, out HandVirtualItemComponent? pull))
                {
                    usedUid = pull.BlockingEntity;
                }
            }

            // get all the entities
            if (!user.IsValid() || !target.IsValid())
            {
                return;
            }

            EntityUid?used = null;

            if (usedUid != default)
            {
                EntityManager.EntityExists(usedUid);
            }

            // then prepare the basic log message body
            var verbText = $"{verb.Category?.Text} {verb.Text}".Trim();
            var logText  = forced
                ? $"was forced to execute the '{verbText}' verb targeting " // let's not frame people, eh?
                : $"executed '{verbText}' verb targeting ";

            // then log with entity information
            if (used != null)
            {
                _logSystem.Add(LogType.Verb, verb.Impact,
                               $"{user} {logText} {target} while holding {used}");
            }
            else
            {
                _logSystem.Add(LogType.Verb, verb.Impact,
                               $"{user} {logText} {target}");
            }
        }
Beispiel #15
0
        private bool HandleExamine(ICommonSession?session, EntityCoordinates coords, EntityUid uid)
        {
            if (!uid.IsValid() || !EntityManager.TryGetEntity(uid, out var examined))
            {
                return(false);
            }

            var playerEntity = _playerManager.LocalPlayer?.ControlledEntity;

            if (playerEntity == null || !CanExamine(playerEntity, examined))
            {
                return(false);
            }

            DoExamine(examined);
            return(true);
        }
Beispiel #16
0
        public void LogVerb(Verb verb, EntityUid user, EntityUid target, bool forced)
        {
            // first get the held item. again.
            EntityUid usedUid = default;

            if (EntityManager.TryGetComponent(user, out SharedHandsComponent? hands) &&
                hands.TryGetActiveHeldEntity(out var heldEntity))
            {
                usedUid = heldEntity;
                if (usedUid != default && EntityManager.TryGetComponent(usedUid, out HandVirtualItemComponent? pull))
                {
                    usedUid = pull.BlockingEntity;
                }
            }

            // get all the entities
            if (!user.IsValid() || !target.IsValid())
            {
                return;
            }

            EntityUid?used = null;

            if (usedUid != default)
            {
                EntityManager.EntityExists(usedUid);
            }

            var verbText = $"{verb.Category?.Text} {verb.Text}".Trim();

            // lets not frame people, eh?
            var executionText = forced ? "was forced to execute" : "executed";

            if (used == null)
            {
                _logSystem.Add(LogType.Verb, verb.Impact,
                               $"{ToPrettyString(user):user} {executionText} the [{verbText:verb}] verb targeting {ToPrettyString(target):target}");
            }
            else
            {
                _logSystem.Add(LogType.Verb, verb.Impact,
                               $"{ToPrettyString(user):user} {executionText} the [{verbText:verb}] verb targeting {ToPrettyString(target):target} while holding {ToPrettyString(used.Value):held}");
            }
        }
Beispiel #17
0
        public void InvalidatePosition(EntityUid gridId, Vector2i pos, bool fixVacuum = false)
        {
            if (!gridId.IsValid())
            {
                return;
            }

            var query = EntityManager.GetEntityQuery <AirtightComponent>();

            _explosionSystem.UpdateAirtightMap(gridId, pos, query);
            // TODO make atmos system use query
            _atmosphereSystem.UpdateAdjacent(gridId, pos);
            _atmosphereSystem.InvalidateTile(gridId, pos);

            if (fixVacuum)
            {
                _atmosphereSystem.FixVacuum(gridId, pos);
            }
        }
Beispiel #18
0
        private void HandleExamine(ICommonSession session, GridCoordinates coords, EntityUid uid)
        {
            if (!uid.IsValid() || !_entityManager.TryGetEntity(uid, out var entity))
            {
                return;
            }

            var playerEntity = _playerManager.LocalPlayer.ControlledEntity;

            if (playerEntity == null)
            {
                return;
            }

            if ((entity.Transform.WorldPosition - playerEntity.Transform.WorldPosition).LengthSquared > ExamineRangeSquared)
            {
                return;
            }

            DoExamine(entity);
        }
        public void Execute(IConsoleShell shell, string argStr, string[] args)
        {
            if (shell.Player is not IPlayerSession player)
            {
                shell.WriteLine("shell-server-cannot");
                return;
            }

            if (args.Length != 1)
            {
                shell.WriteLine(Loc.GetString("shell-wrong-arguments-number"));
                return;
            }

            if (!int.TryParse(args[0], out var targetId))
            {
                shell.WriteLine(Loc.GetString("shell-argument-must-be-number"));
                return;
            }

            var target = new EntityUid(targetId);

            if (!target.IsValid() || !_entities.EntityExists(target))
            {
                shell.WriteLine(Loc.GetString("shell-invalid-entity-id"));
                return;
            }

            if (!_entities.HasComponent <MindComponent>(target))
            {
                shell.WriteLine(Loc.GetString("shell-entity-is-not-mob"));
                return;
            }

            var mind = player.ContentData()?.Mind;

            DebugTools.AssertNotNull(mind);

            mind !.TransferTo(target);
        }
Beispiel #20
0
        public void Execute(IConsoleShell shell, string argStr, string[] args)
        {
            if (args.Length < 1)
            {
                shell.WriteLine(Loc.GetString("shell-wrong-arguments-number"));
                return;
            }

            if (!int.TryParse(args[0], out var entityUid))
            {
                shell.WriteLine(Loc.GetString("shell-entity-uid-must-be-number"));
                return;
            }

            var entityManager = IoCManager.Resolve <IEntityManager>();

            var target = new EntityUid(entityUid);

            if (!target.IsValid() || !entityManager.EntityExists(target))
            {
                shell.WriteLine(Loc.GetString("shell-invalid-entity-id"));
                return;
            }

            if (!entityManager.TryGetComponent <InventoryComponent?>(target, out var inventoryComponent))
            {
                shell.WriteLine(Loc.GetString("shell-target-entity-does-not-have-message", ("missing", "inventory")));
                return;
            }

            if (args.Length == 1)
            {
                if (shell.Player is not IPlayerSession player)
                {
                    shell.WriteError(Loc.GetString("set-outfit-command-is-not-player-error"));
                    return;
                }

                var eui = IoCManager.Resolve <EuiManager>();
                var ui  = new SetOutfitEui(target);
                eui.OpenEui(ui, player);
                return;
            }

            var prototypeManager = IoCManager.Resolve <IPrototypeManager>();

            if (!prototypeManager.TryIndex <StartingGearPrototype>(args[1], out var startingGear))
            {
                shell.WriteLine(Loc.GetString("set-outfit-command-invalid-outfit-id-error"));
                return;
            }

            HumanoidCharacterProfile?profile = null;

            // Check if we are setting the outfit of a player to respect the preferences
            if (entityManager.TryGetComponent <ActorComponent?>(target, out var actorComponent))
            {
                var userId             = actorComponent.PlayerSession.UserId;
                var preferencesManager = IoCManager.Resolve <IServerPreferencesManager>();
                var prefs = preferencesManager.GetPreferences(userId);
                profile = prefs.SelectedCharacter as HumanoidCharacterProfile;
            }

            var invSystem = EntitySystem.Get <InventorySystem>();

            if (invSystem.TryGetSlots(target, out var slotDefinitions, inventoryComponent))
            {
                foreach (var slot in slotDefinitions)
                {
                    invSystem.TryUnequip(target, slot.Name, true, true, inventoryComponent);
                    var gearStr = startingGear.GetGear(slot.Name, profile);
                    if (gearStr == string.Empty)
                    {
                        continue;
                    }
                    var equipmentEntity = entityManager.SpawnEntity(gearStr, entityManager.GetComponent <TransformComponent>(target).Coordinates);
                    if (slot.Name == "id" &&
                        entityManager.TryGetComponent <PDAComponent?>(equipmentEntity, out var pdaComponent) &&
                        pdaComponent.ContainedID != null)
                    {
                        pdaComponent.ContainedID.FullName = entityManager.GetComponent <MetaDataComponent>(target).EntityName;
                    }

                    invSystem.TryEquip(target, equipmentEntity, slot.Name, true, inventory: inventoryComponent);
                }
            }
        }
        public void Execute(IConsoleShell shell, string argStr, string[] args)
        {
            if (args.Length < 1)
            {
                shell.WriteError(Loc.GetString("shell-wrong-arguments-number"));
                return;
            }

            // Get player entity
            if (!IoCManager.Resolve <IPlayerManager>().TryGetSessionByUsername(args[0], out var session))
            {
                shell.WriteLine(Loc.GetString("shell-target-player-does-not-exist"));
                return;
            }
            if (session.AttachedEntity is not {
            } user)
            {
                shell.WriteLine(Loc.GetString("Selected player doesn't controll any entity"));
                return;
            }

            // Get target item
            EntityUid?uplinkEntity  = null;
            var       entityManager = IoCManager.Resolve <IEntityManager>();

            if (args.Length >= 2)
            {
                if (!int.TryParse(args[1], out var itemID))
                {
                    shell.WriteLine(Loc.GetString("shell-entity-uid-must-be-number"));
                    return;
                }

                var eUid = new EntityUid(itemID);
                if (!eUid.IsValid() || !entityManager.EntityExists(eUid))
                {
                    shell.WriteLine(Loc.GetString("shell-invalid-entity-id"));
                    return;
                }

                uplinkEntity = eUid;
            }

            // Get TC count
            var configManager = IoCManager.Resolve <IConfigurationManager>();
            var tcCount       = configManager.GetCVar(CCVars.TraitorStartingBalance);

            // Get account
            var uplinkAccount = new UplinkAccount(tcCount, user);
            var accounts      = entityManager.EntitySysManager.GetEntitySystem <UplinkAccountsSystem>();

            accounts.AddNewAccount(uplinkAccount);

            // Finally add uplink
            if (!entityManager.EntitySysManager.GetEntitySystem <UplinkSystem>()
                .AddUplink(user, uplinkAccount, uplinkEntity))
            {
                shell.WriteLine(Loc.GetString("Failed to add uplink to the player"));
                return;
            }
        }
        public void Execute(IConsoleShell shell, string argStr, string[] args)
        {
            if (args.Length < 1)
            {
                shell.WriteLine(Loc.GetString("Wrong number of arguments."));
                return;
            }

            if (!int.TryParse(args[0], out var entityUid))
            {
                shell.WriteLine(Loc.GetString("EntityUid must be a number."));
                return;
            }

            var entityManager = IoCManager.Resolve <IEntityManager>();

            var eUid = new EntityUid(entityUid);

            if (!eUid.IsValid() || !entityManager.EntityExists(eUid))
            {
                shell.WriteLine(Loc.GetString("Invalid entity ID."));
                return;
            }

            var target = entityManager.GetEntity(eUid);

            if (!target.TryGetComponent <InventoryComponent>(out var inventoryComponent))
            {
                shell.WriteLine(Loc.GetString("Target entity does not have an inventory!"));
                return;
            }

            if (args.Length == 1)
            {
                if (!(shell.Player is IPlayerSession player))
                {
                    shell.WriteError(
                        Loc.GetString(
                            "This does not work from the server console. You must pass the outfit id aswell."));
                    return;
                }

                var eui = IoCManager.Resolve <EuiManager>();
                var ui  = new SetOutfitEui(target);
                eui.OpenEui(ui, player);
                return;
            }

            var prototypeManager = IoCManager.Resolve <IPrototypeManager>();

            if (!prototypeManager.TryIndex <StartingGearPrototype>(args[1], out var startingGear))
            {
                shell.WriteLine(Loc.GetString("Invalid outfit id"));
                return;
            }

            HumanoidCharacterProfile?profile = null;

            // Check if we are setting the outfit of a player to respect the preferences
            if (target.TryGetComponent <IActorComponent>(out var actorComponent))
            {
                var userId             = actorComponent.playerSession.UserId;
                var preferencesManager = IoCManager.Resolve <IServerPreferencesManager>();
                var prefs = preferencesManager.GetPreferences(userId);
                profile = prefs.SelectedCharacter as HumanoidCharacterProfile;
            }

            foreach (var slot in inventoryComponent.Slots)
            {
                inventoryComponent.ForceUnequip(slot);
                var gearStr = startingGear.GetGear(slot, profile);
                if (gearStr == "")
                {
                    continue;
                }
                var equipmentEntity = entityManager.SpawnEntity(gearStr, target.Transform.Coordinates);
                if (slot == EquipmentSlotDefines.Slots.IDCARD &&
                    equipmentEntity.TryGetComponent <PDAComponent>(out var pdaComponent) &&
                    pdaComponent.ContainedID != null)
                {
                    pdaComponent.ContainedID.FullName = target.Name;
                }

                inventoryComponent.Equip(slot, equipmentEntity.GetComponent <ItemComponent>(), false);
            }
        }