0
0
mirror of https://github.com/sp-tarkov/modules.git synced 2025-02-13 08:10:45 -05:00
Lacyway 6d03395729 Fix scav exfils (!169)
`InitAllExfiltrationPoints` will instantiate the list of `ScavExfiltrationPoints` in one line before `EligiblePoints` is ran, meaning the following always returned:
```cs
            if (__instance.ScavExfiltrationPoints.Length > 0)
            {
                Logger.LogError($"ScavExfiltrationPoints has content, Do original");
                foreach (var scavExit in __instance.ScavExfiltrationPoints)
                {
                    Logger.LogError($"{scavExit.name}, {scavExit.Id}, {scavExit.Description}");
                }

                return true; // do original
            }
```

I'm not sure if the logic was different before 3.10, but removing this ensures that the patch runs as intended. Tested both PMC and Scav raids, all is fine for me. Please test on your end as well.

Co-authored-by: Lacyway <20912169+Lacyway@users.noreply.github.com>
Reviewed-on: SPT/Modules#169
Co-authored-by: Lacyway <lacyway@noreply.dev.sp-tarkov.com>
Co-committed-by: Lacyway <lacyway@noreply.dev.sp-tarkov.com>
2024-09-20 10:02:44 +00:00

38 lines
1.6 KiB
C#

using System.Reflection;
using SPT.Reflection.Patching;
using Comfort.Common;
using EFT;
using EFT.Interactive;
using HarmonyLib;
namespace SPT.SinglePlayer.Patches.ScavMode
{
/// <summary>
/// This patch return scav exfils if the player is playing as a scav by adding the player as eligible for the scav specific exfils
/// </summary>
public class ScavExfilPatch : ModulePatch
{
protected override MethodBase GetTargetMethod()
{
return AccessTools.Method(typeof(ExfiltrationControllerClass), nameof(ExfiltrationControllerClass.EligiblePoints), [typeof(Profile)]);
}
[PatchPrefix]
public static bool PatchPrefix(Profile profile, ExfiltrationControllerClass __instance, ref ExfiltrationPoint[] __result)
{
if (profile.Info.Side != EPlayerSide.Savage)
{
return true; // Not a scav - don't do anything and run original method
}
// Running this prepares all the data for getting scav exfil points
__instance.ScavExfiltrationClaim(((IPlayer)Singleton<GameWorld>.Instance.MainPlayer).Position, profile.Id, profile.FenceInfo.AvailableExitsCount);
// Get the required mask value and retrieve a list of exfil points, setting it as the result
var mask = __instance.GetScavExfiltrationMask(profile.Id);
__result = __instance.ScavExfiltrationClaim(mask, profile.Id);
return false; // Don't run the original method anymore, as that will overwrite our new exfil points with ones meant for a PMC
}
}
}