diff --git a/Content.Shared/Follower/FollowerSystem.cs b/Content.Shared/Follower/FollowerSystem.cs index 38c0e5ada3..e4a0488dfb 100644 --- a/Content.Shared/Follower/FollowerSystem.cs +++ b/Content.Shared/Follower/FollowerSystem.cs @@ -138,7 +138,20 @@ public sealed class FollowerSystem : EntitySystem targetXform = Transform(targetXform.ParentUid); } - var followerComp = EnsureComp(follower); + // Cleanup old following. + if (TryComp(follower, out var followerComp)) + { + // Already following you goob + if (followerComp.Following == entity) + return; + + StopFollowingEntity(follower, followerComp.Following, deparent: false, removeComp: false); + } + else + { + followerComp = AddComp(follower); + } + followerComp.Following = entity; var followedComp = EnsureComp(entity); @@ -167,14 +180,14 @@ public sealed class FollowerSystem : EntitySystem RaiseLocalEvent(follower, followerEv); RaiseLocalEvent(entity, entityEv); - Dirty(followedComp); + Dirty(entity, followedComp); } /// /// Forces an entity to stop following another entity, if it is doing so. /// /// Should the entity deparent itself - public void StopFollowingEntity(EntityUid uid, EntityUid target, FollowedComponent? followed = null, bool deparent = true) + public void StopFollowingEntity(EntityUid uid, EntityUid target, FollowedComponent? followed = null, bool deparent = true, bool removeComp = true) { if (!Resolve(target, ref followed, false)) return; @@ -186,8 +199,12 @@ public sealed class FollowerSystem : EntitySystem if (followed.Following.Count == 0) RemComp(target); - RemComp(uid); - RemComp(uid); + if (removeComp) + { + RemComp(uid); + RemComp(uid); + } + var uidEv = new StoppedFollowingEntityEvent(target, uid); var targetEv = new EntityStoppedFollowingEvent(target, uid);