0
0
mirror of https://github.com/sp-tarkov/modules.git synced 2025-02-13 09:50:43 -05:00
modules/project/Aki.Custom/BTR/Patches/BTREndRaidItemDeliveryPatch.cs
Arys 89f0db250d BTR code refactors and turret aim improvements (!67)
Todo:

* Make BTR spawn at random time during raid instead of at the start
* Find out why some players receive error relating to `BTRBotAttachPatch` resulting BTR failing to initialise

Co-authored-by: Nympfonic <arys.steam@gmail.com>
Reviewed-on: SPT-AKI/Modules#67
Co-authored-by: Arys <arys@noreply.dev.sp-tarkov.com>
Co-committed-by: Arys <arys@noreply.dev.sp-tarkov.com>
2024-01-25 08:52:33 +00:00

68 lines
2.3 KiB
C#

using Aki.Common.Http;
using Aki.Custom.BTR.Utils;
using Aki.Reflection.Patching;
using Aki.Reflection.Utils;
using Comfort.Common;
using EFT;
using HarmonyLib;
using Newtonsoft.Json;
using System;
using System.Linq;
using System.Reflection;
namespace Aki.Custom.BTR.Patches
{
public class BTREndRaidItemDeliveryPatch : ModulePatch
{
private static JsonConverter[] _defaultJsonConverters;
protected override MethodBase GetTargetMethod()
{
var converterClass = typeof(AbstractGame).Assembly.GetTypes()
.First(t => t.GetField("Converters", BindingFlags.Static | BindingFlags.Public) != null);
_defaultJsonConverters = Traverse.Create(converterClass).Field<JsonConverter[]>("Converters").Value;
Type baseLocalGameType = PatchConstants.LocalGameType.BaseType;
return AccessTools.Method(baseLocalGameType, nameof(LocalGame.Stop));
}
[PatchPrefix]
public static void PatchPrefix()
{
GameWorld gameWorld = Singleton<GameWorld>.Instance;
if (gameWorld == null)
{
Logger.LogError("[AKI-BTR] BTREndRaidItemDeliveryPatch - GameWorld is null");
return;
}
var player = gameWorld.MainPlayer;
if (player == null)
{
Logger.LogError("[AKI-BTR] BTREndRaidItemDeliveryPatch - Player is null");
return;
}
// Match doesn't have a BTR
if (gameWorld.BtrController == null)
{
return;
}
if (!gameWorld.BtrController.HasNonEmptyTransferContainer(player.Profile.Id))
{
Logger.LogDebug("[AKI-BTR] BTREndRaidItemDeliveryPatch - No items in transfer container");
return;
}
var btrStash = gameWorld.BtrController.GetOrAddTransferContainer(player.Profile.Id);
var flatItems = Singleton<ItemFactory>.Instance.TreeToFlatItems(btrStash.Grid.Items);
RequestHandler.PutJson("/singleplayer/traderServices/itemDelivery", new
{
items = flatItems,
traderId = BTRUtil.BTRTraderId
}.ToJson(_defaultJsonConverters));
}
}
}