diff --git a/Content.Client/Sandbox/SandboxManager.cs b/Content.Client/Sandbox/SandboxManager.cs index 5224fd5b38..d1e7de9694 100644 --- a/Content.Client/Sandbox/SandboxManager.cs +++ b/Content.Client/Sandbox/SandboxManager.cs @@ -44,6 +44,8 @@ namespace Content.Client.Sandbox _netManager.RegisterNetMessage(nameof(MsgSandboxStatus), message => SetAllowed(message.SandboxAllowed)); + _netManager.RegisterNetMessage(nameof(MsgSandboxGiveAccess)); + _netManager.RegisterNetMessage(nameof(MsgSandboxRespawn)); _gameHud.SandboxButtonToggled = SandboxButtonPressed; @@ -109,10 +111,13 @@ namespace Content.Client.Sandbox _window.RespawnButton.OnPressed += OnRespawnButtonOnOnPressed; _window.SpawnTilesButton.OnPressed += OnSpawnTilesButtonClicked; _window.SpawnEntitiesButton.OnPressed += OnSpawnEntitiesButtonClicked; + _window.GiveFullAccessButton.OnPressed += OnGiveAdminAccessButtonClicked; _window.OpenCentered(); } + + private void WindowOnOnClose() { _window = null; @@ -135,6 +140,10 @@ namespace Content.Client.Sandbox ToggleTilesWindow(); } + private void OnGiveAdminAccessButtonClicked(BaseButton.ButtonEventArgs args) + { + _netManager.ClientSendMessage(_netManager.CreateNetMessage()); + } private void ToggleEntitySpawnWindow() { if(_spawnWindow == null) diff --git a/Content.Client/Sandbox/SandboxWindow.cs b/Content.Client/Sandbox/SandboxWindow.cs index 884bbb90ce..b1db694d01 100644 --- a/Content.Client/Sandbox/SandboxWindow.cs +++ b/Content.Client/Sandbox/SandboxWindow.cs @@ -10,6 +10,8 @@ namespace Content.Client.Sandbox public Button SpawnEntitiesButton { get; } public Button SpawnTilesButton { get; } + public Button GiveFullAccessButton { get; } //A button that just puts a captain's ID in your hands. + public SandboxWindow(ILocalizationManager loc) { Title = loc.GetString("Sandbox Panel"); @@ -29,13 +31,19 @@ namespace Content.Client.Sandbox Text = loc.GetString("Spawn Tiles") }; + GiveFullAccessButton = new Button + { + Text = loc.GetString("Give Full Access ID") + }; + Contents.AddChild(new VBoxContainer { Children = { RespawnButton, SpawnEntitiesButton, - SpawnTilesButton + SpawnTilesButton, + GiveFullAccessButton } }); } diff --git a/Content.Server/Sandbox/SandboxManager.cs b/Content.Server/Sandbox/SandboxManager.cs index ca77a92f74..a0cdebba04 100644 --- a/Content.Server/Sandbox/SandboxManager.cs +++ b/Content.Server/Sandbox/SandboxManager.cs @@ -1,3 +1,5 @@ +using Content.Server.GameObjects; +using Content.Server.GameObjects.Components; using Content.Server.GameTicking; using Content.Server.Interfaces.GameTicking; using Content.Shared.Sandbox; @@ -6,6 +8,7 @@ using Robust.Server.Interfaces.Placement; using Robust.Server.Interfaces.Player; using Robust.Server.Player; using Robust.Shared.Enums; +using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.IoC; using Robust.Shared.ViewVariables; @@ -20,6 +23,7 @@ namespace Content.Server.Sandbox [Dependency] private readonly IGameTicker _gameTicker; [Dependency] private readonly IPlacementManager _placementManager; [Dependency] private readonly IConGroupController _conGroupController; + [Dependency] private readonly IEntityManager _entityManager; #pragma warning restore 649 private bool _isSandboxEnabled; @@ -39,6 +43,7 @@ namespace Content.Server.Sandbox { _netManager.RegisterNetMessage(nameof(MsgSandboxStatus)); _netManager.RegisterNetMessage(nameof(MsgSandboxRespawn), SandboxRespawnReceived); + _netManager.RegisterNetMessage(nameof(MsgSandboxGiveAccess), SandboxGiveAccessReceived); _playerManager.PlayerStatusChanged += OnPlayerStatusChanged; _gameTicker.OnRunLevelChanged += GameTickerOnOnRunLevelChanged; @@ -94,6 +99,23 @@ namespace Content.Server.Sandbox _gameTicker.Respawn(player); } + private void SandboxGiveAccessReceived(MsgSandboxGiveAccess message) + { + if(!IsSandboxEnabled) + { + return; + } + + var player = _playerManager.GetSessionByChannel(message.MsgChannel); + if(player.AttachedEntity.TryGetComponent(out var hands)) + { + ; + hands.PutInHandOrDrop( + _entityManager.SpawnEntity("CaptainIDCard", + player.AttachedEntity.Transform.GridPosition).GetComponent()); + } + } + private void UpdateSandboxStatusForAll() { var msg = _netManager.CreateNetMessage(); diff --git a/Content.Shared/Sandbox/SharedSandboxManager.cs b/Content.Shared/Sandbox/SharedSandboxManager.cs index adbef38d6a..774ad66443 100644 --- a/Content.Shared/Sandbox/SharedSandboxManager.cs +++ b/Content.Shared/Sandbox/SharedSandboxManager.cs @@ -47,5 +47,24 @@ namespace Content.Shared.Sandbox { } } + + protected sealed class MsgSandboxGiveAccess : NetMessage + { + #region REQUIRED + + public const MsgGroups GROUP = MsgGroups.Command; + public const string NAME = nameof(MsgSandboxGiveAccess); + public MsgSandboxGiveAccess(INetChannel channel) : base(NAME, GROUP) { } + + #endregion + public override void ReadFromBuffer(NetIncomingMessage buffer) + { + } + + public override void WriteToBuffer(NetOutgoingMessage buffer) + { + } + + } } }