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; } }
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); } }
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)); }
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); }
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); } }
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); } }