From 3f0665b9080276c4f991138d4c635188c10113c6 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Fri, 21 Aug 2020 17:43:27 +0200 Subject: [PATCH] Make deleting a visited entity not cleaning it up in the mind. --- .../Components/Mobs/VisitingMindComponent.cs | 20 +++++++++++++++++++ Content.Server/Mobs/Mind.cs | 10 ++++++++++ 2 files changed, 30 insertions(+) create mode 100644 Content.Server/GameObjects/Components/Mobs/VisitingMindComponent.cs diff --git a/Content.Server/GameObjects/Components/Mobs/VisitingMindComponent.cs b/Content.Server/GameObjects/Components/Mobs/VisitingMindComponent.cs new file mode 100644 index 0000000000..46667aff76 --- /dev/null +++ b/Content.Server/GameObjects/Components/Mobs/VisitingMindComponent.cs @@ -0,0 +1,20 @@ +using Content.Server.Mobs; +using Robust.Shared.GameObjects; + +namespace Content.Server.GameObjects.Components.Mobs +{ + [RegisterComponent] + public sealed class VisitingMindComponent : Component + { + public override string Name => "VisitingMind"; + + public Mind Mind { get; set; } + + public override void OnRemove() + { + base.OnRemove(); + + Mind?.UnVisit(); + } + } +} diff --git a/Content.Server/Mobs/Mind.cs b/Content.Server/Mobs/Mind.cs index 2c5a275bec..b0247fc202 100644 --- a/Content.Server/Mobs/Mind.cs +++ b/Content.Server/Mobs/Mind.cs @@ -231,6 +231,9 @@ namespace Content.Server.Mobs { Session?.AttachToEntity(entity); VisitingEntity = entity; + + var comp = entity.AddComponent(); + comp.Mind = this; } public void UnVisit() @@ -241,7 +244,14 @@ namespace Content.Server.Mobs } Session?.AttachToEntity(OwnedEntity); + var oldVisitingEnt = VisitingEntity; + // Null this before removing the component to avoid any infinite loops. VisitingEntity = null; + + if (oldVisitingEnt.HasComponent()) + { + oldVisitingEnt.RemoveComponent(); + } } } }