diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.cs b/Content.Server/Administration/Systems/AdminVerbSystem.cs index e678abb0c45..c4754af9340 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.cs @@ -67,7 +67,7 @@ public sealed partial class AdminVerbSystem : EntitySystem [Dependency] private readonly StationSystem _stations = default!; [Dependency] private readonly StationSpawningSystem _spawning = default!; - private readonly Dictionary _openSolutionUis = new(); + private readonly Dictionary> _openSolutionUis = new(); public override void Initialize() { @@ -486,10 +486,13 @@ private void AddDebugVerbs(GetVerbsEvent args) #region SolutionsEui private void OnSolutionChanged(Entity entity, ref SolutionContainerChangedEvent args) { - foreach (var eui in _openSolutionUis.Values) + foreach (var list in _openSolutionUis.Values) { - if (eui.Target == entity.Owner) - eui.StateDirty(); + foreach (var eui in list) + { + if (eui.Target == entity.Owner) + eui.StateDirty(); + } } } @@ -498,21 +501,33 @@ public void OpenEditSolutionsEui(ICommonSession session, EntityUid uid) if (session.AttachedEntity == null) return; - if (_openSolutionUis.ContainsKey(session)) - _openSolutionUis[session].Close(); - - var eui = _openSolutionUis[session] = new EditSolutionsEui(uid); + var eui = new EditSolutionsEui(uid); _euiManager.OpenEui(eui, session); eui.StateDirty(); + + if (!_openSolutionUis.ContainsKey(session)) { + _openSolutionUis[session] = new List(); + } + + _openSolutionUis[session].Add(eui); } - public void OnEditSolutionsEuiClosed(ICommonSession session) + public void OnEditSolutionsEuiClosed(ICommonSession session, EditSolutionsEui eui) { - _openSolutionUis.Remove(session, out var eui); + _openSolutionUis[session].Remove(eui); + if (_openSolutionUis[session].Count == 0) + _openSolutionUis.Remove(session); } private void Reset(RoundRestartCleanupEvent ev) { + foreach (var euis in _openSolutionUis.Values) + { + foreach (var eui in euis.ToList()) + { + eui.Close(); + } + } _openSolutionUis.Clear(); } #endregion diff --git a/Content.Server/Administration/UI/EditSolutionsEui.cs b/Content.Server/Administration/UI/EditSolutionsEui.cs index 2a78a27bc03..b4904d969eb 100644 --- a/Content.Server/Administration/UI/EditSolutionsEui.cs +++ b/Content.Server/Administration/UI/EditSolutionsEui.cs @@ -36,7 +36,7 @@ public override void Opened() public override void Closed() { base.Closed(); - _entityManager.System().OnEditSolutionsEuiClosed(Player); + _entityManager.System().OnEditSolutionsEuiClosed(Player, this); } public override EuiStateBase GetNewState()