0
0
mirror of https://github.com/sp-tarkov/modules.git synced 2025-02-12 22:30:44 -05:00

Fix bots not spawning: Correctly look for public method + force bot to be cleared from client cache on spawn

This commit is contained in:
Dev 2023-07-07 16:15:22 +01:00
parent 610f5e596b
commit c038c9fced
2 changed files with 9 additions and 6 deletions

View File

@ -23,8 +23,12 @@ namespace Aki.SinglePlayer.Patches.RaidFix
public GetNewBotTemplatesPatch() public GetNewBotTemplatesPatch()
{ {
_getNewProfileMethod = typeof(BotsPresets) var desiredType = typeof(BotsPresets);
.GetMethod(nameof(BotsPresets.GetNewProfile), PatchConstants.PrivateFlags); _getNewProfileMethod = desiredType
.GetMethod(nameof(BotsPresets.GetNewProfile), PatchConstants.PublicFlags);
Logger.LogDebug($"{this.GetType().Name} Type: {desiredType?.Name}");
Logger.LogDebug($"{this.GetType().Name} Method: {_getNewProfileMethod?.Name}");
} }
protected override MethodBase GetTargetMethod() protected override MethodBase GetTargetMethod()
@ -43,7 +47,7 @@ namespace Aki.SinglePlayer.Patches.RaidFix
} }
[PatchPrefix] [PatchPrefix]
private static bool PatchPrefix(ref Task<Profile> __result, BotsPresets __instance, IBotData data) private static bool PatchPrefix(ref Task<Profile> __result, BotsPresets __instance, GClass626 data, bool withDelete)
{ {
/* /*
in short when client wants new bot and GetNewProfile() return null (if not more available templates or they don't satisfy by Role and Difficulty condition) in short when client wants new bot and GetNewProfile() return null (if not more available templates or they don't satisfy by Role and Difficulty condition)
@ -58,7 +62,7 @@ namespace Aki.SinglePlayer.Patches.RaidFix
var taskScheduler = TaskScheduler.FromCurrentSynchronizationContext(); var taskScheduler = TaskScheduler.FromCurrentSynchronizationContext();
var taskAwaiter = (Task<Profile>)null; var taskAwaiter = (Task<Profile>)null;
var profile = (Profile)_getNewProfileMethod.Invoke(__instance, new object[] { data }); var profile = (Profile)_getNewProfileMethod.Invoke(__instance, new object[] { data, true });
// load from server // load from server
var source = data.PrepareToLoadBackend(1).ToList(); var source = data.PrepareToLoadBackend(1).ToList();

View File

@ -2,7 +2,6 @@ using Aki.Reflection.Patching;
using Aki.Reflection.Utils; using Aki.Reflection.Utils;
using EFT; using EFT;
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
@ -21,7 +20,7 @@ namespace Aki.SinglePlayer.Patches.RaidFix
_flags = BindingFlags.Instance | BindingFlags.NonPublic; _flags = BindingFlags.Instance | BindingFlags.NonPublic;
_targetInterface = PatchConstants.EftTypes.Single(IsTargetInterface); _targetInterface = PatchConstants.EftTypes.Single(IsTargetInterface);
_targetType = PatchConstants.EftTypes.Single(IsTargetType); _targetType = typeof(BotsPresets);
_profilesField = _targetType.GetField("list_0", _flags); _profilesField = _targetType.GetField("list_0", _flags);
} }