From 205a4fc530a1e57332c0be04d6428989590a9fda Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Thu, 10 May 2018 18:52:44 +0200 Subject: [PATCH] Fixes server shutdown crash & client error log spam. (#67) --- .../Inventory/ClientInventoryComponent.cs | 7 +++++++ .../Components/GUI/InventoryComponent.cs | 14 ++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Content.Client/GameObjects/Components/Inventory/ClientInventoryComponent.cs b/Content.Client/GameObjects/Components/Inventory/ClientInventoryComponent.cs index 0eac29c24a..86c4ffdba3 100644 --- a/Content.Client/GameObjects/Components/Inventory/ClientInventoryComponent.cs +++ b/Content.Client/GameObjects/Components/Inventory/ClientInventoryComponent.cs @@ -27,6 +27,13 @@ namespace Content.Client.GameObjects private string TemplateName = "HumanInventory"; //stored for serialization purposes public event EventHandler OnCharacterMenuKey; + public override void OnRemove() + { + base.OnRemove(); + + Window.Dispose(); + } + public override void ExposeData(EntitySerializer serializer) { base.ExposeData(serializer); diff --git a/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs b/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs index e1247e7f87..0551e53ff8 100644 --- a/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs +++ b/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs @@ -13,6 +13,7 @@ using SS14.Shared.IoC; using SS14.Server.Interfaces.Player; using SS14.Shared.GameObjects.Serialization; using SS14.Shared.ContentPack; +using System.Linq; namespace Content.Server.GameObjects { @@ -24,7 +25,7 @@ namespace Content.Server.GameObjects public override void ExposeData(EntitySerializer serializer) { base.ExposeData(serializer); - + serializer.DataField(ref TemplateName, "Template", "HumanInventory"); CreateInventory(TemplateName); } @@ -35,7 +36,7 @@ namespace Content.Server.GameObjects Inventory inventory = (Inventory)Activator.CreateInstance(type); foreach (Slots slotnames in inventory.SlotMasks) { - if(slotnames != Slots.NONE) + if (slotnames != Slots.NONE) { var newslot = AddSlot(slotnames); } @@ -44,7 +45,8 @@ namespace Content.Server.GameObjects public override void OnRemove() { - foreach (var slot in SlotContainers.Keys) + var slots = SlotContainers.Keys.ToList(); + foreach (var slot in slots) { RemoveSlot(slot); } @@ -87,7 +89,7 @@ namespace Content.Server.GameObjects throw new ArgumentNullException(nameof(clothing), "Clothing must be passed here. To remove some clothing from a slot, use Unequip()"); } - if(clothing.SlotFlags == SlotFlags.PREVENTEQUIP //Flag to prevent equipping at all + if (clothing.SlotFlags == SlotFlags.PREVENTEQUIP //Flag to prevent equipping at all || (clothing.SlotFlags & SlotMasks[slot]) == 0) //Does the clothing flag have any of our requested slot flags { return false; @@ -235,7 +237,7 @@ namespace Content.Server.GameObjects if (activehand != null && activehand.Owner.TryGetComponent(out ClothingComponent clothing)) { hands.Drop(hands.ActiveIndex); - if(!Equip(msg.Inventoryslot, clothing)) + if (!Equip(msg.Inventoryslot, clothing)) { hands.PutInHand(clothing); } @@ -257,7 +259,7 @@ namespace Content.Server.GameObjects { base.HandleMessage(message, netChannel, component); - switch(message) + switch (message) { case ClientInventoryMessage msg: var playerMan = IoCManager.Resolve();