From 98b25ddd5e40b5fd65ea18f42c213901fabf9286 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 2 Oct 2021 15:30:00 +0200 Subject: [PATCH] Check for dead actors when searching for exits. --- OpenRA.Mods.Common/Traits/Buildings/Exit.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Buildings/Exit.cs b/OpenRA.Mods.Common/Traits/Buildings/Exit.cs index 8cb1937492..a6ccafe1a5 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/Exit.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/Exit.cs @@ -35,12 +35,12 @@ namespace OpenRA.Mods.Common.Traits [Desc("Exits with larger priorities will be used before lower priorities.")] public readonly int Priority = 1; - public override object Create(ActorInitializer init) { return new Exit(init, this); } + public override object Create(ActorInitializer init) { return new Exit(this); } } public class Exit : ConditionalTrait { - public Exit(ActorInitializer init, ExitInfo info) + public Exit(ExitInfo info) : base(info) { } } @@ -62,6 +62,9 @@ namespace OpenRA.Mods.Common.Traits public static IEnumerable Exits(this Actor actor, string productionType = null) { + if (!actor.IsInWorld || actor.Disposed) + return Enumerable.Empty(); + var all = actor.TraitsImplementing() .Where(Exts.IsTraitEnabled); @@ -73,6 +76,9 @@ namespace OpenRA.Mods.Common.Traits public static Exit RandomExitOrDefault(this Actor actor, World world, string productionType, Func p = null) { + if (!actor.IsInWorld || actor.Disposed) + return null; + var allOfType = Exits(actor, productionType); if (!allOfType.Any()) return null;