mirror of
https://github.com/sp-tarkov/modules.git
synced 2025-02-13 01:30:45 -05:00
Fix scav extracts (!176)
- Re-add the "EmptyInfilPatch" as it's necessary for scav raids, otherwise the extract controller doesn't get initialized Co-authored-by: DrakiaXYZ <565558+TheDgtl@users.noreply.github.com> Reviewed-on: SPT/Modules#176 Co-authored-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com> Co-committed-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
This commit is contained in:
parent
5a58e03854
commit
d58f48fc3e
@ -0,0 +1,75 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using SPT.Reflection.Patching;
|
||||||
|
using SPT.Reflection.Utils;
|
||||||
|
using Comfort.Common;
|
||||||
|
using EFT;
|
||||||
|
using EFT.Game.Spawning;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace SPT.SinglePlayer.Patches.RaidFix
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// An empty EntryPoint string (string_0 in BaseLocalGame) causes exfil point initialization to be skipped.
|
||||||
|
/// This patch sets an EntryPoint string if it's missing.
|
||||||
|
/// </summary>
|
||||||
|
public class EmptyInfilFixPatch : ModulePatch
|
||||||
|
{
|
||||||
|
protected override MethodBase GetTargetMethod()
|
||||||
|
{
|
||||||
|
var desiredType = PatchConstants.LocalGameType.BaseType;
|
||||||
|
var desiredMethod = desiredType
|
||||||
|
.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.CreateInstance)
|
||||||
|
.SingleCustom(IsTargetMethod);
|
||||||
|
|
||||||
|
Logger.LogDebug($"{this.GetType().Name} Type: {desiredType?.Name}");
|
||||||
|
Logger.LogDebug($"{this.GetType().Name} Method: {desiredMethod?.Name}");
|
||||||
|
|
||||||
|
return desiredMethod;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool IsTargetMethod(MethodInfo methodInfo)
|
||||||
|
{
|
||||||
|
return (methodInfo.IsVirtual
|
||||||
|
&& methodInfo.GetParameters().Length == 0
|
||||||
|
&& methodInfo.ReturnType == typeof(void)
|
||||||
|
&& methodInfo.GetMethodBody().LocalVariables.Count > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[PatchPrefix]
|
||||||
|
public static void PatchPrefix(ref string ___string_0)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrWhiteSpace(___string_0)) return;
|
||||||
|
|
||||||
|
var spawnPoints = Resources.FindObjectsOfTypeAll<SpawnPointMarker>().ToList();
|
||||||
|
|
||||||
|
List<SpawnPointMarker> filtered = new List<SpawnPointMarker>();
|
||||||
|
|
||||||
|
foreach (var spawn in spawnPoints)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(spawn?.SpawnPoint?.Infiltration?.Trim()))
|
||||||
|
{
|
||||||
|
filtered.Add(spawn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var playerPos = Singleton<GameWorld>.Instance.MainPlayer.Transform.position;
|
||||||
|
SpawnPointMarker closestSpawn = null;
|
||||||
|
var minDist = Mathf.Infinity;
|
||||||
|
|
||||||
|
foreach (var filter in filtered)
|
||||||
|
{
|
||||||
|
var dist = Vector3.Distance(filter.gameObject.transform.position, playerPos);
|
||||||
|
|
||||||
|
if (dist < minDist)
|
||||||
|
{
|
||||||
|
closestSpawn = filter;
|
||||||
|
minDist = dist;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
___string_0 = closestSpawn.SpawnPoint.Infiltration;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -20,7 +20,7 @@ namespace SPT.SinglePlayer
|
|||||||
{
|
{
|
||||||
// TODO: check if these patches are needed
|
// TODO: check if these patches are needed
|
||||||
new TinnitusFixPatch().Enable(); // Probably needed
|
new TinnitusFixPatch().Enable(); // Probably needed
|
||||||
//new EmptyInfilFixPatch().Enable();
|
new EmptyInfilFixPatch().Enable();
|
||||||
new OverrideMaxAiAliveInRaidValuePatch().Enable();
|
new OverrideMaxAiAliveInRaidValuePatch().Enable();
|
||||||
//new PostRaidHealingPricePatch().Enable(); // Client handles this now
|
//new PostRaidHealingPricePatch().Enable(); // Client handles this now
|
||||||
//new HideoutQuestIgnorePatch().Enable(); // Was only needed because FixQuestAchieveControllersPatch was causing issues
|
//new HideoutQuestIgnorePatch().Enable(); // Was only needed because FixQuestAchieveControllersPatch was causing issues
|
||||||
|
Loading…
x
Reference in New Issue
Block a user