Exemple #1
0
        public void Execute(IConsoleShell shell, IPlayerSession player, string[] args)
        {
            if (player.Status != SessionStatus.InGame || !player.AttachedEntityUid.HasValue)
            {
                return;
            }

            if (args.Length < 1)
            {
                return;
            }

            var action = string.Join(" ", args).Trim();

            if (string.IsNullOrEmpty(action))
            {
                return;
            }

            var chat = IoCManager.Resolve <IChatManager>();

            var mindComponent = player.ContentData().Mind;

            chat.EntityMe(mindComponent.OwnedEntity, action);
        }
        public void Execute(IConsoleShell shell, IPlayerSession player, string[] args)
        {
            if (player == null)
            {
                shell.SendText((IPlayerSession)null, "Nah");
                return;
            }

            var mind = player.ContentData().Mind;

            if (mind.VisitingEntity != null && mind.VisitingEntity.Prototype.ID == "AdminObserver")
            {
                var visiting = mind.VisitingEntity;
                mind.UnVisit();
                visiting.Delete();
            }
            else
            {
                var canReturn     = mind.CurrentEntity != null && !mind.CurrentEntity.HasComponent <GhostComponent>();
                var entityManager = IoCManager.Resolve <IEntityManager>();
                var ghost         = entityManager.SpawnEntity("AdminObserver", player.AttachedEntity.Transform.MapPosition);
                if (canReturn)
                {
                    mind.Visit(ghost);
                }
                else
                {
                    mind.TransferTo(ghost);
                }
                ghost.GetComponent <GhostComponent>().CanReturnToBody = canReturn;
            }
        }
Exemple #3
0
        public void Execute(IConsoleShell shell, IPlayerSession player, string[] args)
        {
            if (player.Status != SessionStatus.InGame || !player.AttachedEntityUid.HasValue)
            {
                return;
            }

            if (args.Length < 1)
            {
                return;
            }

            var message = string.Join(" ", args).Trim();

            if (string.IsNullOrEmpty(message))
            {
                return;
            }

            var chat = IoCManager.Resolve <IChatManager>();

            if (player.AttachedEntity.HasComponent <GhostComponent>())
            {
                chat.SendDeadChat(player, message);
            }
            else
            {
                var mindComponent = player.ContentData().Mind;
                chat.EntitySay(mindComponent.OwnedEntity, message);
            }
        }
Exemple #4
0
        public override bool Take(IPlayerSession session)
        {
            if (Taken)
            {
                return(false);
            }

            Taken = true;

            var mind = Owner.EnsureComponent <MindComponent>();

            if (mind.HasMind)
            {
                throw new Exception("MindComponent already has a mind!");
            }

            var sessionMind = session.ContentData()?.Mind;

            DebugTools.AssertNotNull(sessionMind);

            sessionMind !.TransferTo(Owner);

            EntitySystem.Get <GhostRoleSystem>().UnregisterGhostRole(this);

            return(true);
        }
        public void Execute(IConsoleShell shell, IPlayerSession player, string[] args)
        {
            if (player == null)
            {
                shell.SendText((IPlayerSession)null, "Nah");
                return;
            }

            var mind = player.ContentData().Mind;

            if (mind.VisitingEntity != null && mind.VisitingEntity.Prototype.ID == "AdminObserver")
            {
                var visiting = mind.VisitingEntity;
                mind.UnVisit();
                visiting.Delete();
            }
            else
            {
                var entityManager = IoCManager.Resolve <IEntityManager>();
                var ghost         = entityManager.ForceSpawnEntityAt("AdminObserver",
                                                                     player.AttachedEntity.Transform.GridPosition);

                mind.Visit(ghost);
            }
        }
        public async void ReloadAdmin(IPlayerSession player)
        {
            var data = await LoadAdminData(player);

            var curAdmin = _admins.GetValueOrDefault(player);

            if (data == null && curAdmin == null)
            {
                // Wasn't admin before or after.
                return;
            }

            if (data == null)
            {
                // No longer admin.
                _admins.Remove(player);
                _chat.DispatchServerMessage(player, Loc.GetString("You are no longer an admin."));
            }
            else
            {
                var(aData, rankId, special) = data.Value;

                if (curAdmin == null)
                {
                    // Now an admin.
                    var reg = new AdminReg(player, aData)
                    {
                        IsSpecialLogin = special,
                        RankId         = rankId
                    };
                    _admins.Add(player, reg);
                    _chat.DispatchServerMessage(player, Loc.GetString("You are now an admin."));
                }
                else
                {
                    // Perms changed.
                    curAdmin.IsSpecialLogin = special;
                    curAdmin.RankId         = rankId;
                    curAdmin.Data           = aData;
                }

                if (!player.ContentData() !.ExplicitlyDeadminned)
                {
                    aData.Active = true;

                    _chat.DispatchServerMessage(player, Loc.GetString("Your admin permissions have been updated."));
                }
            }

            SendPermsChangedEvent(player);
            UpdateAdminStatus(player);
        }
        private PlayerInfo GetPlayerInfo(IPlayerSession session)
        {
            var name     = session.Name;
            var username = string.Empty;

            if (session.AttachedEntity != null)
            {
                username = EntityManager.GetComponent <MetaDataComponent>(session.AttachedEntity.Value).EntityName;
            }

            var antag = session.ContentData()?.Mind?.AllRoles.Any(r => r.Antagonist) ?? false;

            return(new PlayerInfo(name, username, antag, session.AttachedEntity.GetValueOrDefault(), session.UserId));
        }
Exemple #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();
            }
        }
        public void ReAdmin(IPlayerSession session)
        {
            if (!_admins.TryGetValue(session, out var reg))
            {
                throw new ArgumentException($"Player {session} is not an admin");
            }

            var plyData = session.ContentData() !;

            plyData.ExplicitlyDeadminned = true;
            reg.Data.Active = true;

            // TODO: Send messages to all admins.

            UpdateAdminStatus(session);
        }
Exemple #10
0
        public void Execute(IConsoleShell shell, IPlayerSession player, string[] args)
        {
            if (player == null)
            {
                shell.SendText((IPlayerSession)null, "Nah");
                return;
            }

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

            if (mind == null)
            {
                shell.SendText(player, "You can't ghost here!");
                return;
            }

            if (mind.VisitingEntity != null && mind.VisitingEntity.Prototype?.ID == "AdminObserver")
            {
                var visiting = mind.VisitingEntity;
                mind.UnVisit();
                visiting.Delete();
            }
            else
            {
                var canReturn = mind.CurrentEntity != null;
                var ghost     = IoCManager.Resolve <IEntityManager>()
                                .SpawnEntity("AdminObserver", player.AttachedEntity?.Transform.Coordinates
                                             ?? IoCManager.Resolve <IGameTicker>().GetObserverSpawnPoint());

                if (canReturn)
                {
                    ghost.Name = mind.CharacterName;
                    mind.Visit(ghost);
                }
                else
                {
                    ghost.Name = player.Name;
                    mind.TransferTo(ghost);
                }

                ghost.GetComponent <GhostComponent>().CanReturnToBody = canReturn;
            }
        }
        public void ReAdmin(IPlayerSession session)
        {
            if (!_admins.TryGetValue(session, out var reg))
            {
                throw new ArgumentException($"Player {session} is not an admin");
            }

            _chat.DispatchServerMessage(session, Loc.GetString("You are now an admin."));

            var plyData = session.ContentData() !;

            plyData.ExplicitlyDeadminned = false;
            reg.Data.Active = true;

            _chat.SendAdminAnnouncement(Loc.GetString("{0} re-adminned themselves.", session.Name));

            SendPermsChangedEvent(session);
            UpdateAdminStatus(session);
        }
        public override bool Take(IPlayerSession session)
        {
            if (Taken)
            {
                return(false);
            }

            if (string.IsNullOrEmpty(Prototype))
            {
                throw new NullReferenceException("Prototype string cannot be null or empty!");
            }

            var mob = Owner.EntityManager.SpawnEntity(Prototype, Owner.Transform.Coordinates);

            if (_makeSentient)
            {
                MakeSentientCommand.MakeSentient(mob);
            }

            mob.EnsureComponent <MindComponent>();

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

            DebugTools.AssertNotNull(mind);

            mind !.TransferTo(mob);

            if (++_currentTakeovers < _availableTakeovers)
            {
                return(true);
            }

            Taken = true;

            if (_deleteOnSpawn)
            {
                Owner.Delete();
            }


            return(true);
        }
        public void Execute(IConsoleShell shell, IPlayerSession player, string[] args)
        {
            if (player == null)
            {
                shell.SendText((IPlayerSession)null, "Nah");
                return;
            }

            var mind = player.ContentData().Mind;

            if (mind == null)
            {
                shell.SendText(player, "You can't ghost here!");
                return;
            }

            var canReturn = player.AttachedEntity != null && CanReturn;
            var name      = player.AttachedEntity?.Name ?? player.Name;

            if (player.AttachedEntity != null && player.AttachedEntity.HasComponent <GhostComponent>())
            {
                return;
            }

            if (mind.VisitingEntity != null)
            {
                mind.UnVisit();
                mind.VisitingEntity.Delete();
            }

            var position = player.AttachedEntity?.Transform.Coordinates ?? IoCManager.Resolve <IGameTicker>().GetObserverSpawnPoint();

            if (canReturn && player.AttachedEntity.TryGetComponent(out IDamageableComponent damageable))
            {
                switch (damageable.CurrentState)
                {
                case DamageState.Dead:
                    canReturn = true;
                    break;

                case DamageState.Critical:
                    canReturn = true;
                    damageable.ChangeDamage(DamageType.Asphyxiation, 100, true, null);     //todo: what if they dont breathe lol
                    break;

                default:
                    canReturn = false;
                    break;
                }
            }

            var entityManager = IoCManager.Resolve <IEntityManager>();
            var ghost         = entityManager.SpawnEntity("MobObserver", position);

            ghost.Name = mind.CharacterName;

            var ghostComponent = ghost.GetComponent <GhostComponent>();

            ghostComponent.CanReturnToBody = canReturn;

            if (player.AttachedEntity.TryGetComponent(out ServerOverlayEffectsComponent overlayComponent))
            {
                overlayComponent?.RemoveOverlay(SharedOverlayID.CircleMaskOverlay);
            }

            if (canReturn)
            {
                mind.Visit(ghost);
            }
            else
            {
                mind.TransferTo(ghost);
            }
        }
Exemple #14
0
        public void Execute(IConsoleShell shell, IPlayerSession player, string[] args)
        {
            if (player == null)
            {
                shell.SendText((IPlayerSession)null, "Nah");
                return;
            }

            var mind      = player.ContentData().Mind;
            var canReturn = player.AttachedEntity != null;
            var name      = player.AttachedEntity?.Name ?? player.Name;

            if (player.AttachedEntity != null && player.AttachedEntity.HasComponent <GhostComponent>())
            {
                return;
            }

            if (mind.VisitingEntity != null)
            {
                mind.UnVisit();
                mind.VisitingEntity.Delete();
            }

            var position = player.AttachedEntity?.Transform.GridPosition ?? IoCManager.Resolve <IGameTicker>().GetObserverSpawnPoint();

            if (canReturn && player.AttachedEntity.TryGetComponent(out SpeciesComponent species))
            {
                switch (species.CurrentDamageState)
                {
                case DeadState _:
                    canReturn = true;
                    break;

                case CriticalState _:
                    canReturn = true;
                    if (!player.AttachedEntity.TryGetComponent(out DamageableComponent damageable))
                    {
                        break;
                    }
                    damageable.TakeDamage(DamageType.Total, 100);     // TODO: Use airloss/oxyloss instead
                    break;

                default:
                    canReturn = false;
                    break;
                }
            }

            var entityManager = IoCManager.Resolve <IEntityManager>();
            var ghost         = entityManager.SpawnEntity("MobObserver", position);

            ghost.Name = mind.CharacterName;

            var ghostComponent = ghost.GetComponent <GhostComponent>();

            ghostComponent.CanReturnToBody = canReturn;

            if (canReturn)
            {
                mind.Visit(ghost);
            }
            else
            {
                mind.TransferTo(ghost);
            }
        }