0
0
mirror of https://github.com/sp-tarkov/modules.git synced 2025-02-13 09:50:43 -05:00
modules/project/Aki.SinglePlayer/Patches/RaidFix/GetNewBotTemplatesPatch.cs

70 lines
2.4 KiB
C#
Raw Normal View History

2023-03-03 18:52:31 +00:00
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using EFT;
using Aki.Reflection.Patching;
using Aki.Reflection.Utils;
using Aki.SinglePlayer.Models.RaidFix;
2023-06-25 13:49:48 +01:00
using System;
2023-03-03 18:52:31 +00:00
namespace Aki.SinglePlayer.Patches.RaidFix
{
public class GetNewBotTemplatesPatch : ModulePatch
{
private static MethodInfo _getNewProfileMethod;
static GetNewBotTemplatesPatch()
{
_ = nameof(IBotData.PrepareToLoadBackend);
_ = nameof(BotsPresets.GetNewProfile);
_ = nameof(PoolManager.LoadBundlesAndCreatePools);
_ = nameof(JobPriority.General);
}
public GetNewBotTemplatesPatch()
{
var desiredType = typeof(BotsPresets);
_getNewProfileMethod = desiredType
.GetMethod(nameof(BotsPresets.GetNewProfile), BindingFlags.Instance | BindingFlags.NonPublic); // want the func with 2 params (protected + inherited from base)
Logger.LogDebug($"{this.GetType().Name} Type: {desiredType?.Name}");
Logger.LogDebug($"{this.GetType().Name} Method: {_getNewProfileMethod?.Name}");
2023-03-03 18:52:31 +00:00
}
/// <summary>
/// Looking for CreateProfile()
/// </summary>
/// <returns></returns>
2023-03-03 18:52:31 +00:00
protected override MethodBase GetTargetMethod()
{
return typeof(BotsPresets).GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)
.Single(x => IsTargetMethod(x));
}
private bool IsTargetMethod(MethodInfo mi)
{
var parameters = mi.GetParameters();
2023-07-07 15:01:45 +01:00
return (parameters.Length == 3
2023-03-03 18:52:31 +00:00
&& parameters[0].Name == "data"
2023-07-07 15:01:45 +01:00
&& parameters[1].Name == "cancellationToken"
&& parameters[2].Name == "withDelete");
2023-03-03 18:52:31 +00:00
}
[PatchPrefix]
private static bool PatchPrefix(ref Task<Profile> __result, BotsPresets __instance, GClass626 data, ref bool withDelete)
2023-03-03 18:52:31 +00:00
{
withDelete = true;
2023-03-03 18:52:31 +00:00
return true; // do original method
2023-03-03 18:52:31 +00:00
}
private static Profile GetFirstResult(Task<Profile[]> task)
{
var result = task.Result[0];
2023-06-25 13:49:48 +01:00
Logger.LogInfo($"{DateTime.Now:T} Loading bot {result.Info.Nickname} profile from server. role: {result.Info.Settings.Role} side: {result.Side}");
2023-03-03 18:52:31 +00:00
return result;
}
}
}