From d320ad950b147a29cfe78d7e37f9ddd7078af515 Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Wed, 7 Sep 2022 14:19:26 +1200 Subject: [PATCH] Fix AdminTestArenaSystem (#11082) --- .../Systems/AdminTestArenaSystem.cs | 22 ++++++++++++++----- .../Systems/AdminVerbSystem.Tools.cs | 7 +++--- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/Content.Server/Administration/Systems/AdminTestArenaSystem.cs b/Content.Server/Administration/Systems/AdminTestArenaSystem.cs index 561e371595..3eeeabc40a 100644 --- a/Content.Server/Administration/Systems/AdminTestArenaSystem.cs +++ b/Content.Server/Administration/Systems/AdminTestArenaSystem.cs @@ -1,4 +1,4 @@ -using System.Linq; +using System.Linq; using Robust.Server.Maps; using Robust.Server.Player; using Robust.Shared.Map; @@ -17,16 +17,26 @@ public sealed class AdminTestArenaSystem : EntitySystem public const string ArenaMapPath = "/Maps/Test/admin_test_arena.yml"; public Dictionary ArenaMap { get; private set; } = new(); - public Dictionary ArenaGrid { get; private set; } = new(); + public Dictionary ArenaGrid { get; private set; } = new(); - public (EntityUid, EntityUid) AssertArenaLoaded(IPlayerSession admin) + public (EntityUid Map, EntityUid? Grid) AssertArenaLoaded(IPlayerSession admin) { if (ArenaMap.TryGetValue(admin.UserId, out var arenaMap) && !Deleted(arenaMap) && !Terminating(arenaMap)) - return (arenaMap, ArenaGrid[admin.UserId]); + { + if (ArenaGrid.TryGetValue(admin.UserId, out var arenaGrid) && !Deleted(arenaGrid) && !Terminating(arenaGrid.Value)) + { + return (arenaMap, arenaGrid); + } + else + { + ArenaGrid[admin.UserId] = null; + return (arenaMap, null); + } + } ArenaMap[admin.UserId] = _mapManager.GetMapEntityId(_mapManager.CreateMap()); - var (grids, _) = _mapLoader.LoadMap(Comp(ArenaMap[admin.UserId]).WorldMap, ArenaMapPath); - ArenaGrid[admin.UserId] = grids.First(); + var (_, grids) = _mapLoader.LoadMap(Comp(ArenaMap[admin.UserId]).WorldMap, ArenaMapPath); + ArenaGrid[admin.UserId] = grids.Count == 0 ? null : grids[0]; return (ArenaMap[admin.UserId], ArenaGrid[admin.UserId]); } diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs index 08ac16cdb8..c0fbe24696 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs @@ -1,4 +1,3 @@ - using System.Diagnostics.CodeAnalysis; using System.Linq; using Content.Server.Administration.Commands; @@ -376,11 +375,11 @@ public sealed partial class AdminVerbSystem Text = "Send to test arena", Category = VerbCategory.Tricks, IconTexture = "/Textures/Interface/VerbIcons/eject.svg.192dpi.png", + Act = () => { - var (_, arenaGrid) = _adminTestArenaSystem.AssertArenaLoaded(player); - - Transform(args.Target).Coordinates = new EntityCoordinates(arenaGrid, Vector2.One); + var (mapUid, gridUid) = _adminTestArenaSystem.AssertArenaLoaded(player); + Transform(args.Target).Coordinates = new EntityCoordinates(gridUid ?? mapUid, Vector2.One); }, Impact = LogImpact.Medium, Message = Loc.GetString("admin-trick-send-to-test-arena-description"),