From 251ccb9a04362d7e1dec33fd36cb3071a065f4fb Mon Sep 17 00:00:00 2001 From: Chomp Date: Mon, 13 Jan 2025 19:03:10 +0000 Subject: [PATCH] Implemented `GetFenceInfo` --- Core/Helpers/ProfileHelper.cs | 2 +- Core/Services/FenceService.cs | 35 +++++++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/Core/Helpers/ProfileHelper.cs b/Core/Helpers/ProfileHelper.cs index 34dc26a6..da486721 100644 --- a/Core/Helpers/ProfileHelper.cs +++ b/Core/Helpers/ProfileHelper.cs @@ -352,7 +352,7 @@ public class ProfileHelper public PmcData RemoveSecureContainer(PmcData profile) { var items = profile.Inventory.Items; - var secureContainer = items.First(i => i.SlotId == "SecuredContainer"); + var secureContainer = items.FirstOrDefault(i => i.SlotId == "SecuredContainer"); if (secureContainer is not null) { // Find and remove container + children diff --git a/Core/Services/FenceService.cs b/Core/Services/FenceService.cs index d11c465c..13c1d3bd 100644 --- a/Core/Services/FenceService.cs +++ b/Core/Services/FenceService.cs @@ -1,4 +1,4 @@ -using Core.Annotations; +using Core.Annotations; using Core.Models.Eft.Common; using Core.Models.Eft.Common.Tables; using Core.Models.Spt.Config; @@ -9,6 +9,14 @@ namespace Core.Services; [Injectable(InjectionType.Singleton)] public class FenceService { + private readonly DatabaseService _databaseService; + + public FenceService( + DatabaseService databaseService) + { + _databaseService = databaseService; + } + /// /// Replace main fence assort with new assort /// @@ -495,7 +503,30 @@ public class FenceService /// FenceLevel object public FenceLevel GetFenceInfo(PmcData pmcData) { - throw new NotImplementedException(); + var fenceSettings = _databaseService.GetGlobals().Configuration.FenceSettings; + pmcData.TradersInfo.TryGetValue(fenceSettings.FenceIdentifier, out var pmcFenceInfo); + + if (pmcFenceInfo is null) + { + return fenceSettings.Levels["0"]; + } + + var fenceLevels = fenceSettings.Levels.Select(x => x.Key); + var minLevel = fenceLevels.Min(); + var maxLevel = fenceLevels.Max(); + var pmcFenceLevel = Math.Floor(pmcFenceInfo.Standing.Value); + + if (pmcFenceLevel < int.Parse(minLevel)) + { + return fenceSettings.Levels[minLevel]; + } + + if (pmcFenceLevel > int.Parse(maxLevel)) + { + return fenceSettings.Levels[maxLevel]; + } + + return fenceSettings.Levels[pmcFenceLevel.ToString()]; } ///