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;
[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;
public override void Initialize()
{
Subs.CVar(_cfg, CCVars.GameRoleTimerOverride, SetRequirementOverride, true);
+
+ SubscribeLocalEvent<MindRoleComponent, ComponentShutdown>(OnComponentShutdown);
}
private void SetRequirementOverride(string value)
}
antagonist |= roleComp.Antag | roleComp.ExclusiveAntag;
- _entityManager.DeleteEntity(role);
delete.Add(role);
found = true;
}
foreach (var role in delete)
{
- mind.Comp.MindRoles.Remove(role);
+ _entityManager.DeleteEntity(role);
}
if (mind.Comp.OwnedEntity != null)
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>