From 5749991b9eda91b7175655a19fad34a053e46f3a Mon Sep 17 00:00:00 2001 From: Chomp Date: Mon, 25 Nov 2024 13:25:20 +0000 Subject: [PATCH] Fixed blackscreen on backing out of raid prior to airdrop manager being initialised Added a lot more nullref checking to patch --- .../Patches/FixAirdropCrashPatch.cs | 39 ++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/project/SPT.Custom/Patches/FixAirdropCrashPatch.cs b/project/SPT.Custom/Patches/FixAirdropCrashPatch.cs index e07e8c1..73fafad 100644 --- a/project/SPT.Custom/Patches/FixAirdropCrashPatch.cs +++ b/project/SPT.Custom/Patches/FixAirdropCrashPatch.cs @@ -21,22 +21,35 @@ namespace SPT.Custom.Patches [PatchPrefix] public static void Prefix() - { - if (Singleton.Instantiated) - { - GameWorld gameWorld = Singleton.Instance; + { + if (!Singleton.Instantiated) + { + return; + } - List synchronizableObjectList = Traverse.Create(gameWorld.SynchronizableObjectLogicProcessor).Field>("list_0").Value; + GameWorld gameWorld = Singleton.Instance; + if (gameWorld.SynchronizableObjectLogicProcessor is null) + { + return; + } - foreach (SynchronizableObject obj in synchronizableObjectList) - { - obj.Logic.ReturnToPool(); - obj.ReturnToPool(); - } + List syncObjects = Traverse.Create(gameWorld.SynchronizableObjectLogicProcessor)?.Field>("list_0")?.Value; + if (syncObjects is null) + { + return; + } - gameWorld.SynchronizableObjectLogicProcessor.Dispose(); + foreach (SynchronizableObject obj in syncObjects) + { + obj.Logic.ReturnToPool(); + obj.ReturnToPool(); + } - } - } + // Without this check can cause black screen when backing out of raid prior to airdrop manager being init + if (gameWorld.SynchronizableObjectLogicProcessor.AirdropManager is not null) + { + gameWorld.SynchronizableObjectLogicProcessor.Dispose(); + } + } } }