diff --git a/project/Aki.Custom/AkiCustomPlugin.cs b/project/Aki.Custom/AkiCustomPlugin.cs index 9fc137c..26fbbc9 100644 --- a/project/Aki.Custom/AkiCustomPlugin.cs +++ b/project/Aki.Custom/AkiCustomPlugin.cs @@ -3,6 +3,7 @@ using Aki.Common; using Aki.Custom.Airdrops.Patches; using Aki.Custom.Patches; using Aki.Custom.Utils; +using Aki.SinglePlayer.Patches.ScavMode; using BepInEx; namespace Aki.Custom @@ -46,6 +47,7 @@ namespace Aki.Custom new SettingsLocationPatch().Enable(); //new RankPanelPatch().Enable(); new RagfairFeePatch().Enable(); + new ScavQuestPatch().Enable(); } catch (Exception ex) { diff --git a/project/Aki.Custom/Patches/ScavQuestPatch.cs b/project/Aki.Custom/Patches/ScavQuestPatch.cs new file mode 100644 index 0000000..3959cd6 --- /dev/null +++ b/project/Aki.Custom/Patches/ScavQuestPatch.cs @@ -0,0 +1,43 @@ +using Aki.Reflection.Patching; +using Aki.Reflection.Utils; +using EFT.UI.Matchmaker; +using System.Linq; +using System.Reflection; + +namespace Aki.SinglePlayer.Patches.ScavMode +{ + /// + /// Copy over scav-only quests from PMC profile to scav profile on pre-raid screen + /// Allows scavs to see and complete quests + /// + public class ScavQuestPatch : ModulePatch + { + protected override MethodBase GetTargetMethod() + { + var desiredType = typeof(MatchmakerOfflineRaidScreen); + var desiredMethod = desiredType.GetMethod(nameof(MatchmakerOfflineRaidScreen.Show)); + + Logger.LogDebug($"{GetType().Name} Type: {desiredType?.Name}"); + Logger.LogDebug($"{GetType().Name} Method: {desiredMethod?.Name}"); + + return desiredMethod; + } + + [PatchPostfix] + private static void PatchPostfix() + { + var pmcProfile = PatchConstants.BackEndSession.Profile; + var scavProfile = PatchConstants.BackEndSession.ProfileOfPet; + + // Iterate over all quests on pmc that are flagged as being for scavs + foreach (var quest in pmcProfile.QuestsData.Where(x => x.Template?.PlayerGroup == EFT.EPlayerGroup.Scav)) + { + // If quest doesnt exist in scav, add it + if (!scavProfile.QuestsData.Any(x => x.Id == quest.Id)) + { + scavProfile.QuestsData.Add(quest); + } + } + } + } +} \ No newline at end of file