Merge stable into master: Hotfix the randomly occurring DeleteAllThenGhost test failures (#33593)
This commit is contained in:
@@ -2,7 +2,6 @@ using System.Diagnostics.CodeAnalysis;
|
||||
using Content.Shared.Administration.Logs;
|
||||
using Content.Shared.CCVar;
|
||||
using Content.Shared.Database;
|
||||
using Content.Shared.GameTicking;
|
||||
using Content.Shared.Mind;
|
||||
using Content.Shared.Roles.Jobs;
|
||||
using Robust.Shared.Audio;
|
||||
@@ -20,7 +19,6 @@ public abstract class SharedRoleSystem : EntitySystem
|
||||
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||
[Dependency] private readonly IConfigurationManager _cfg = default!;
|
||||
[Dependency] private readonly IEntityManager _entityManager = default!;
|
||||
[Dependency] private readonly SharedGameTicker _gameTicker = default!;
|
||||
[Dependency] private readonly IPrototypeManager _prototypes = default!;
|
||||
|
||||
private JobRequirementOverridePrototype? _requirementOverride;
|
||||
@@ -28,6 +26,8 @@ public abstract class SharedRoleSystem : EntitySystem
|
||||
public override void Initialize()
|
||||
{
|
||||
Subs.CVar(_cfg, CCVars.GameRoleTimerOverride, SetRequirementOverride, true);
|
||||
|
||||
SubscribeLocalEvent<MindRoleComponent, ComponentShutdown>(OnComponentShutdown);
|
||||
}
|
||||
|
||||
private void SetRequirementOverride(string value)
|
||||
@@ -209,7 +209,6 @@ public abstract class SharedRoleSystem : EntitySystem
|
||||
}
|
||||
|
||||
antagonist |= roleComp.Antag | roleComp.ExclusiveAntag;
|
||||
_entityManager.DeleteEntity(role);
|
||||
delete.Add(role);
|
||||
found = true;
|
||||
}
|
||||
@@ -219,7 +218,7 @@ public abstract class SharedRoleSystem : EntitySystem
|
||||
|
||||
foreach (var role in delete)
|
||||
{
|
||||
mind.Comp.MindRoles.Remove(role);
|
||||
_entityManager.DeleteEntity(role);
|
||||
}
|
||||
|
||||
if (mind.Comp.OwnedEntity != null)
|
||||
@@ -235,6 +234,17 @@ public abstract class SharedRoleSystem : EntitySystem
|
||||
return true;
|
||||
}
|
||||
|
||||
// Removing the mind role's reference on component shutdown
|
||||
// to make sure the reference gets removed even if the mind role entity was deleted by outside code
|
||||
private void OnComponentShutdown(Entity<MindRoleComponent> ent, ref ComponentShutdown args)
|
||||
{
|
||||
//TODO: Just ensure that the tests don't spawn unassociated mind role entities
|
||||
if (ent.Comp.Mind.Comp is null)
|
||||
return;
|
||||
|
||||
ent.Comp.Mind.Comp.MindRoles.Remove(ent.Owner);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Finds and removes all mind roles of a specific type
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user