mirror of
https://github.com/sp-tarkov/modules.git
synced 2025-02-13 09:50:43 -05:00
43 lines
1.5 KiB
C#
43 lines
1.5 KiB
C#
![]() |
using Aki.Reflection.Patching;
|
|||
|
using Aki.Reflection.Utils;
|
|||
|
using Comfort.Common;
|
|||
|
using EFT;
|
|||
|
using System.Linq;
|
|||
|
using System.Reflection;
|
|||
|
|
|||
|
namespace Aki.Custom.Patches
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Fix a bsg bug that causes the game to soft-lock when you have a container opened when extracting
|
|||
|
/// </summary>
|
|||
|
public class ExitWhileLootingPatch : ModulePatch
|
|||
|
{
|
|||
|
protected override MethodBase GetTargetMethod()
|
|||
|
{
|
|||
|
return PatchConstants.EftTypes.Single(x => x.Name == "LocalGame").BaseType // BaseLocalGame
|
|||
|
.GetMethod("Stop", BindingFlags.FlattenHierarchy | BindingFlags.NonPublic | BindingFlags.Instance);
|
|||
|
}
|
|||
|
|
|||
|
// Look at BaseLocalGame<TPlayerOwner> and find a method named "Stop"
|
|||
|
// once you find it, there should be a StartBlackScreenShow method with
|
|||
|
// a callback method (on dnspy will be called @class.method_0)
|
|||
|
// Go into that method. This will be part of the code:
|
|||
|
// if (GClass2505.CheckCurrentScreen(EScreenType.Reconnect))
|
|||
|
// {
|
|||
|
// GClass2505.CloseAllScreensForced();
|
|||
|
// }
|
|||
|
// The code INSIDE the if needs to run
|
|||
|
[PatchPrefix]
|
|||
|
private static bool PatchPrefix(string profileId)
|
|||
|
{
|
|||
|
var player = Singleton<GameWorld>.Instance.MainPlayer;
|
|||
|
if (profileId == player?.Profile.Id)
|
|||
|
{
|
|||
|
GClass2727.Instance.CloseAllScreensForced();
|
|||
|
}
|
|||
|
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|