0
0
mirror of https://github.com/sp-tarkov/modules.git synced 2025-02-13 03:10:45 -05:00

Synchronize scav encyclopedia with PMC at raid start, and inspect any items in scav inventory (!81)

This makes SPT mimic live in how scav encyclopedia is handled

Co-authored-by: DrakiaXYZ <565558+TheDgtl@users.noreply.github.com>
Reviewed-on: SPT-AKI/Modules#81
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:
DrakiaXYZ 2024-02-15 08:55:41 +00:00 committed by chomp
parent 6f78f23cde
commit c8507fb600
2 changed files with 48 additions and 0 deletions

View File

@ -64,6 +64,7 @@ namespace Aki.SinglePlayer
new ScavSellAllRequestPatch().Enable(); new ScavSellAllRequestPatch().Enable();
new HideoutQuestIgnorePatch().Enable(); new HideoutQuestIgnorePatch().Enable();
new LightKeeperServicesPatch().Enable(); new LightKeeperServicesPatch().Enable();
new ScavEncyclopediaPatch().Enable();
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@ -0,0 +1,47 @@
using Aki.Reflection.Patching;
using Aki.Reflection.Utils;
using Aki.SinglePlayer.Utils.InRaid;
using EFT;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
namespace Aki.SinglePlayer.Patches.ScavMode
{
/**
* At the start of a scav raid, copy the PMC encyclopedia to the scav profile, and
* make sure the scav knows all of the items it has in its inventory
*/
internal class ScavEncyclopediaPatch : ModulePatch
{
protected override MethodBase GetTargetMethod()
{
return typeof(GameWorld).GetMethod(nameof(GameWorld.OnGameStarted));
}
[PatchPostfix]
public static void PatchPostFix()
{
if (RaidChangesUtil.IsScavRaid)
{
var scavProfile = PatchConstants.BackEndSession.ProfileOfPet;
var pmcProfile = PatchConstants.BackEndSession.Profile;
// Handle old profiles where the scav doesn't have an encyclopedia
if (scavProfile.Encyclopedia == null)
{
scavProfile.Encyclopedia = new Dictionary<string, bool>();
}
// Sync the PMC encyclopedia to the scav profile
foreach (var item in pmcProfile.Encyclopedia.Where(item => !scavProfile.Encyclopedia.ContainsKey(item.Key)))
{
scavProfile.Encyclopedia.Add(item.Key, item.Value);
}
// Auto examine any items the scav doesn't know that are in their inventory
scavProfile.LearnAll();
}
}
}
}