diff --git a/Content.Client/GameObjects/EntitySystems/ConstructionSystem.cs b/Content.Client/GameObjects/EntitySystems/ConstructionSystem.cs
index 77dff4b52ad..b55d5cbf03d 100644
--- a/Content.Client/GameObjects/EntitySystems/ConstructionSystem.cs
+++ b/Content.Client/GameObjects/EntitySystems/ConstructionSystem.cs
@@ -51,8 +51,12 @@ namespace Content.Client.GameObjects.EntitySystems
///
public override void Shutdown()
{
- CommandBinds.Unregister();
base.Shutdown();
+
+ UnsubscribeLocalEvent();
+ UnsubscribeNetworkEvent();
+
+ CommandBinds.Unregister();
}
public event EventHandler? CraftingAvailabilityChanged;
diff --git a/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs b/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs
index d0fde4ba022..56654dcaf77 100644
--- a/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs
+++ b/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs
@@ -40,6 +40,12 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter
SubscribeLocalEvent(HandlePlayerAttached);
}
+ public override void Shutdown()
+ {
+ base.Shutdown();
+ UnsubscribeLocalEvent();
+ }
+
private void HandlePlayerAttached(PlayerAttachSysMessage message)
{
_attachedEntity = message.AttachedEntity;
diff --git a/Content.Client/GameObjects/EntitySystems/HealthOverlay/HealthOverlaySystem.cs b/Content.Client/GameObjects/EntitySystems/HealthOverlay/HealthOverlaySystem.cs
index 46001650b04..ff113fac883 100644
--- a/Content.Client/GameObjects/EntitySystems/HealthOverlay/HealthOverlaySystem.cs
+++ b/Content.Client/GameObjects/EntitySystems/HealthOverlay/HealthOverlaySystem.cs
@@ -46,6 +46,13 @@ namespace Content.Client.GameObjects.EntitySystems.HealthOverlay
SubscribeLocalEvent(HandlePlayerAttached);
}
+ public override void Shutdown()
+ {
+ base.Shutdown();
+
+ UnsubscribeLocalEvent();
+ }
+
public void Reset()
{
foreach (var gui in _guis.Values)
diff --git a/Content.Client/GameObjects/EntitySystems/IconSmoothSystem.cs b/Content.Client/GameObjects/EntitySystems/IconSmoothSystem.cs
index da24e8d78b0..5a5c058d2c8 100644
--- a/Content.Client/GameObjects/EntitySystems/IconSmoothSystem.cs
+++ b/Content.Client/GameObjects/EntitySystems/IconSmoothSystem.cs
@@ -24,9 +24,16 @@ namespace Content.Client.GameObjects.EntitySystems
///
public override void Initialize()
{
- SubscribeLocalEvent(HandleDirtyEvent);
+ base.Initialize();
- IoCManager.InjectDependencies(this);
+ SubscribeLocalEvent(HandleDirtyEvent);
+ }
+
+ public override void Shutdown()
+ {
+ base.Shutdown();
+
+ UnsubscribeLocalEvent();
}
public override void FrameUpdate(float frameTime)
diff --git a/Content.Client/GameObjects/EntitySystems/VerbSystem.cs b/Content.Client/GameObjects/EntitySystems/VerbSystem.cs
index 05fc585389c..613e9b1cb17 100644
--- a/Content.Client/GameObjects/EntitySystems/VerbSystem.cs
+++ b/Content.Client/GameObjects/EntitySystems/VerbSystem.cs
@@ -46,7 +46,6 @@ namespace Content.Client.GameObjects.EntitySystems
public override void Initialize()
{
base.Initialize();
- IoCManager.InjectDependencies(this);
SubscribeNetworkEvent(FillEntityPopup);
SubscribeNetworkEvent(HandleContainerVisibilityMessage);
@@ -62,11 +61,14 @@ namespace Content.Client.GameObjects.EntitySystems
public override void Shutdown()
{
+ base.Shutdown();
+
+ UnsubscribeNetworkEvent();
+ UnsubscribeNetworkEvent();
UnsubscribeLocalEvent();
_contextMenuPresenter?.Dispose();
CommandBinds.Unregister();
- base.Shutdown();
}
public void Reset()
diff --git a/Content.Client/GameObjects/EntitySystems/WindowSystem.cs b/Content.Client/GameObjects/EntitySystems/WindowSystem.cs
index 234c90073fa..77f0133cdd6 100644
--- a/Content.Client/GameObjects/EntitySystems/WindowSystem.cs
+++ b/Content.Client/GameObjects/EntitySystems/WindowSystem.cs
@@ -17,6 +17,13 @@ namespace Content.Client.GameObjects.EntitySystems
SubscribeLocalEvent(HandleDirtyEvent);
}
+ public override void Shutdown()
+ {
+ base.Shutdown();
+
+ UnsubscribeLocalEvent();
+ }
+
private void HandleDirtyEvent(WindowSmoothDirtyEvent ev)
{
if (ev.Sender.HasComponent())
diff --git a/Content.IntegrationTests/Tests/Networking/SimplePredictReconcileTest.cs b/Content.IntegrationTests/Tests/Networking/SimplePredictReconcileTest.cs
index 3708c0abe02..41ea1faab5c 100644
--- a/Content.IntegrationTests/Tests/Networking/SimplePredictReconcileTest.cs
+++ b/Content.IntegrationTests/Tests/Networking/SimplePredictReconcileTest.cs
@@ -454,6 +454,13 @@ namespace Content.IntegrationTests.Tests.Networking
SubscribeLocalEvent(HandleMessage);
}
+ public override void Shutdown()
+ {
+ base.Shutdown();
+ UnsubscribeNetworkEvent();
+ UnsubscribeLocalEvent();
+ }
+
private void HandleMessage(SetFooMessage message, EntitySessionEventArgs args)
{
var entity = EntityManager.GetEntity(message.Uid);
diff --git a/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs b/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs
index 65793cd21f8..dd0baff191e 100644
--- a/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs
+++ b/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs
@@ -45,6 +45,13 @@ namespace Content.Server.GameObjects.EntitySystems.AI
SubscribeLocalEvent(MobStateChanged);
}
+ public override void Shutdown()
+ {
+ base.Shutdown();
+ UnsubscribeLocalEvent();
+ UnsubscribeLocalEvent();
+ }
+
///
public override void Update(float frameTime)
{
diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/AiReachableSystem.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/AiReachableSystem.cs
index dea1ad68eff..a0adf2fd7c2 100644
--- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/AiReachableSystem.cs
+++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/AiReachableSystem.cs
@@ -90,6 +90,22 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible
_mapManager.OnGridRemoved += GridRemoved;
}
+ public override void Shutdown()
+ {
+ base.Shutdown();
+
+ _queuedUpdates.Clear();
+ _regions.Clear();
+ _cachedAccessible.Clear();
+ _queuedCacheDeletions.Clear();
+
+ _mapManager.OnGridRemoved -= GridRemoved;
+
+ UnsubscribeLocalEvent();
+ UnsubscribeNetworkEvent();
+ UnsubscribeNetworkEvent();
+ }
+
private void GridRemoved(MapId mapId, GridId gridId)
{
_regions.Remove(gridId);
@@ -126,20 +142,6 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible
_queuedCacheDeletions.Clear();
}
- public override void Shutdown()
- {
- base.Shutdown();
- _queuedUpdates.Clear();
- _regions.Clear();
- _cachedAccessible.Clear();
- _queuedCacheDeletions.Clear();
- _mapManager.OnGridRemoved -= GridRemoved;
- UnsubscribeLocalEvent();
- UnsubscribeLocalEvent();
- UnsubscribeNetworkEvent();
- UnsubscribeNetworkEvent();
- }
-
#if DEBUG
private void HandleSubscription(SharedAiDebug.SubscribeReachableMessage message, EntitySessionEventArgs eventArgs)
{
diff --git a/Content.Server/GameObjects/EntitySystems/Body/Surgery/SurgeryToolSystem.cs b/Content.Server/GameObjects/EntitySystems/Body/Surgery/SurgeryToolSystem.cs
index e63268b58c0..95b20f1d89b 100644
--- a/Content.Server/GameObjects/EntitySystems/Body/Surgery/SurgeryToolSystem.cs
+++ b/Content.Server/GameObjects/EntitySystems/Body/Surgery/SurgeryToolSystem.cs
@@ -22,6 +22,14 @@ namespace Content.Server.GameObjects.EntitySystems.Body.Surgery
SubscribeLocalEvent(OnSurgeryWindowClose);
}
+ public override void Shutdown()
+ {
+ base.Shutdown();
+
+ UnsubscribeLocalEvent();
+ UnsubscribeLocalEvent();
+ }
+
public void Reset()
{
_openSurgeryUIs.Clear();
diff --git a/Content.Server/GameObjects/EntitySystems/BuckleSystem.cs b/Content.Server/GameObjects/EntitySystems/BuckleSystem.cs
index ccf4e09435b..8b9b3c9364d 100644
--- a/Content.Server/GameObjects/EntitySystems/BuckleSystem.cs
+++ b/Content.Server/GameObjects/EntitySystems/BuckleSystem.cs
@@ -27,6 +27,17 @@ namespace Content.Server.GameObjects.EntitySystems
SubscribeLocalEvent(HandleAttackHand);
}
+ public override void Shutdown()
+ {
+ base.Shutdown();
+
+ UnsubscribeLocalEvent();
+ UnsubscribeLocalEvent();
+ UnsubscribeLocalEvent();
+
+ UnsubscribeLocalEvent(HandleAttackHand);
+ }
+
private void HandleAttackHand(EntityUid uid, BuckleComponent component, AttackHandMessage args)
{
args.Handled = component.TryUnbuckle(args.User);
@@ -40,14 +51,6 @@ namespace Content.Server.GameObjects.EntitySystems
}
}
- public override void Shutdown()
- {
- base.Shutdown();
-
- UnsubscribeLocalEvent();
- UnsubscribeLocalEvent(HandleAttackHand);
- }
-
private void MoveEvent(MoveEvent ev)
{
if (!ev.Sender.TryGetComponent(out BuckleComponent? buckle))
diff --git a/Content.Server/GameObjects/EntitySystems/GhostRoleSystem.cs b/Content.Server/GameObjects/EntitySystems/GhostRoleSystem.cs
index 61e5ba93e24..3433bfb7afc 100644
--- a/Content.Server/GameObjects/EntitySystems/GhostRoleSystem.cs
+++ b/Content.Server/GameObjects/EntitySystems/GhostRoleSystem.cs
@@ -30,9 +30,18 @@ namespace Content.Server.GameObjects.EntitySystems
public override void Initialize()
{
+ base.Initialize();
+
SubscribeLocalEvent(OnPlayerAttached);
}
+ public override void Shutdown()
+ {
+ base.Shutdown();
+
+ UnsubscribeLocalEvent();
+ }
+
private uint GetNextRoleIdentifier()
{
return unchecked(_nextRoleIdentifier++);
diff --git a/Content.Server/GameObjects/EntitySystems/HandsSystem.cs b/Content.Server/GameObjects/EntitySystems/HandsSystem.cs
index 410c83211c1..cca7ae53f03 100644
--- a/Content.Server/GameObjects/EntitySystems/HandsSystem.cs
+++ b/Content.Server/GameObjects/EntitySystems/HandsSystem.cs
@@ -51,8 +51,12 @@ namespace Content.Server.GameObjects.EntitySystems
///
public override void Shutdown()
{
- CommandBinds.Unregister();
base.Shutdown();
+
+ UnsubscribeLocalEvent();
+ UnsubscribeLocalEvent();
+
+ CommandBinds.Unregister();
}
private static void HandleContainerModified(ContainerModifiedMessage args)
diff --git a/Content.Server/GameObjects/EntitySystems/StorageSystem.cs b/Content.Server/GameObjects/EntitySystems/StorageSystem.cs
index 5c59a3f7624..9455f6cc065 100644
--- a/Content.Server/GameObjects/EntitySystems/StorageSystem.cs
+++ b/Content.Server/GameObjects/EntitySystems/StorageSystem.cs
@@ -16,10 +16,20 @@ namespace Content.Server.GameObjects.EntitySystems
///
public override void Initialize()
{
+ base.Initialize();
+
SubscribeLocalEvent(HandleEntityRemovedFromContainer);
SubscribeLocalEvent(HandleEntityInsertedIntoContainer);
}
+ public override void Shutdown()
+ {
+ base.Shutdown();
+
+ UnsubscribeLocalEvent();
+ UnsubscribeLocalEvent();
+ }
+
///
public override void Update(float frameTime)
{
diff --git a/Content.Server/GameObjects/EntitySystems/WeightlessSystem.cs b/Content.Server/GameObjects/EntitySystems/WeightlessSystem.cs
index 0471b953366..74608420a90 100644
--- a/Content.Server/GameObjects/EntitySystems/WeightlessSystem.cs
+++ b/Content.Server/GameObjects/EntitySystems/WeightlessSystem.cs
@@ -26,6 +26,14 @@ namespace Content.Server.GameObjects.EntitySystems
SubscribeLocalEvent(EntParentChanged);
}
+ public override void Shutdown()
+ {
+ base.Shutdown();
+
+ UnsubscribeLocalEvent();
+ UnsubscribeLocalEvent();
+ }
+
public void Reset()
{
_alerts.Clear();