From 1c83014ed2aa55e1da484babfc81b3cdffc6c28b Mon Sep 17 00:00:00 2001 From: Chomp Date: Sat, 28 Jun 2025 17:05:56 +0100 Subject: [PATCH] Converted `CalculateLevel` to extension method Removed `PlayerService` --- .../Extensions/ProfileExtensions.cs | 29 ++++++++++++++ .../Helpers/RewardHelper.cs | 5 ++- .../Helpers/TraderHelper.cs | 4 +- .../Services/PlayerService.cs | 38 ------------------- .../TraderPurchasePersisterService.cs | 14 +------ 5 files changed, 38 insertions(+), 52 deletions(-) delete mode 100644 Libraries/SPTarkov.Server.Core/Services/PlayerService.cs diff --git a/Libraries/SPTarkov.Server.Core/Extensions/ProfileExtensions.cs b/Libraries/SPTarkov.Server.Core/Extensions/ProfileExtensions.cs index aa13561c..5b5525ad 100644 --- a/Libraries/SPTarkov.Server.Core/Extensions/ProfileExtensions.cs +++ b/Libraries/SPTarkov.Server.Core/Extensions/ProfileExtensions.cs @@ -171,5 +171,34 @@ namespace SPTarkov.Server.Core.Extensions b.BanType == BanType.RagFair && currentTimestamp < b.DateTime ) ?? false; } + + /// + /// Calculates the current level of a player based on their accumulated experience points. + /// This method iterates through an experience table to determine the highest level achieved + /// by comparing the player's experience against cumulative thresholds. + /// + /// Player profile + /// Experience table from globals.json + /// + /// The calculated level of the player as an integer, or null if the level cannot be determined. + /// This value is also assigned to within the provided profile. + /// + public static int? CalculateLevel(this PmcData pmcData, ExpTable[] expTable) + { + var accExp = 0; + for (var i = 0; i < expTable.Length; i++) + { + accExp += expTable[i].Experience ?? 0; + + if (pmcData.Info.Experience < accExp) + { + break; + } + + pmcData.Info.Level = i + 1; + } + + return pmcData.Info.Level; + } } } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs index 37535025..fbeacd7c 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs @@ -1,4 +1,5 @@ using SPTarkov.DI.Annotations; +using SPTarkov.Server.Core.Extensions; using SPTarkov.Server.Core.Models.Eft.Common; using SPTarkov.Server.Core.Models.Eft.Common.Tables; using SPTarkov.Server.Core.Models.Eft.Hideout; @@ -81,7 +82,9 @@ public class RewardHelper( int.Parse(reward.Value.ToString()) ); // this must occur first as the output object needs to take the modified profile exp value // Recalculate level in event player leveled up - pmcProfile.Info.Level = _playerService.CalculateLevel(pmcProfile); + pmcProfile.Info.Level = pmcProfile.CalculateLevel( + _databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable + ); break; case RewardType.TraderStanding: _traderHelper.AddStandingToTrader(sessionId, reward.Target, reward.Value.Value); diff --git a/Libraries/SPTarkov.Server.Core/Helpers/TraderHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/TraderHelper.cs index 12a94c81..9d4a5899 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/TraderHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/TraderHelper.cs @@ -336,7 +336,9 @@ public class TraderHelper( var loyaltyLevels = _databaseService.GetTrader(traderID).Base.LoyaltyLevels; // Level up player - pmcData.Info.Level = _playerService.CalculateLevel(pmcData); + pmcData.Info.Level = pmcData.CalculateLevel( + _databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable + ); // Level up traders var targetLevel = 0; diff --git a/Libraries/SPTarkov.Server.Core/Services/PlayerService.cs b/Libraries/SPTarkov.Server.Core/Services/PlayerService.cs deleted file mode 100644 index dd187fbc..00000000 --- a/Libraries/SPTarkov.Server.Core/Services/PlayerService.cs +++ /dev/null @@ -1,38 +0,0 @@ -using SPTarkov.DI.Annotations; -using SPTarkov.Server.Core.Models.Eft.Common; - -namespace SPTarkov.Server.Core.Services; - -[Injectable(InjectionType.Singleton)] -public class PlayerService(DatabaseService _databaseService) -{ - /// - /// Calculates the current level of a player based on their accumulated experience points. - /// This method iterates through an experience table to determine the highest level achieved - /// by comparing the player's experience against cumulative thresholds. - /// - /// Player profile - /// - /// The calculated level of the player as an integer, or null if the level cannot be determined. - /// This value is also assigned to within the provided profile. - /// - public int? CalculateLevel(PmcData pmcData) - { - var accExp = 0; - - var expTable = _databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable; - for (var i = 0; i < expTable.Length; i++) - { - accExp += expTable[i].Experience ?? 0; - - if (pmcData.Info.Experience < accExp) - { - break; - } - - pmcData.Info.Level = i + 1; - } - - return pmcData.Info.Level; - } -} diff --git a/Libraries/SPTarkov.Server.Core/Services/TraderPurchasePersisterService.cs b/Libraries/SPTarkov.Server.Core/Services/TraderPurchasePersisterService.cs index 780c5c89..2073180e 100644 --- a/Libraries/SPTarkov.Server.Core/Services/TraderPurchasePersisterService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/TraderPurchasePersisterService.cs @@ -33,17 +33,7 @@ public class TraderPurchasePersisterService( { var profile = _profileHelper.GetFullProfile(sessionId); - if (profile.TraderPurchases is null) - { - return null; - } - - if (profile.TraderPurchases.ContainsKey(traderId)) - { - return profile.TraderPurchases[traderId]; - } - - return null; + return profile?.TraderPurchases?.GetValueOrDefault(traderId); } /// @@ -97,7 +87,7 @@ public class TraderPurchasePersisterService( continue; } - // Skip if no trader-speicifc purchases + // Skip if no trader-specific purchases if (!profile.Value.TraderPurchases.TryGetValue(traderId, out _)) { continue;