From 0ea5269756154f81d9b4657e82a7436f529c6321 Mon Sep 17 00:00:00 2001 From: Chomp Date: Sun, 3 Aug 2025 09:52:18 +0100 Subject: [PATCH] Updated profile `SkillTypes` property to use string to enum converter Updated surrounding properties to not be null Updated related code to reflect nullability change --- .../Controllers/InventoryController.cs | 2 +- .../SPTarkov.Server.Core/Helpers/HideoutHelper.cs | 6 +++--- .../Helpers/PrestigeHelper.cs | 2 +- .../SPTarkov.Server.Core/Helpers/ProfileHelper.cs | 3 +-- .../SPTarkov.Server.Core/Helpers/QuestHelper.cs | 2 +- .../Helpers/QuestRewardHelper.cs | 2 +- .../SPTarkov.Server.Core/Helpers/RewardHelper.cs | 6 +++++- .../Models/Eft/Common/Tables/BotBase.cs | 15 ++++++++------- .../Services/RepairService.cs | 2 +- 9 files changed, 22 insertions(+), 18 deletions(-) diff --git a/Libraries/SPTarkov.Server.Core/Controllers/InventoryController.cs b/Libraries/SPTarkov.Server.Core/Controllers/InventoryController.cs index 252fdf12..dac83996 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/InventoryController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/InventoryController.cs @@ -192,7 +192,7 @@ public class InventoryController( continue; } - profileSkill.Progress = mailEvent.Value; + profileSkill.Progress = (double)mailEvent.Value; logger.Success($"Set profile skill: {mailEvent.Entity} to: {mailEvent.Value}"); break; } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/HideoutHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/HideoutHelper.cs index 2592e15d..d38459d7 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/HideoutHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/HideoutHelper.cs @@ -1138,7 +1138,7 @@ public class HideoutHelper( // If the level is 51 we need to round it at 50 so on elite you dont get 25.5% // at level 1 you already get 0.5%, so it goes up until level 50. For some reason the wiki // says that it caps at level 51 with 25% but as per dump data that is incorrect apparently - var roundedLevel = Math.Floor(hideoutManagementSkill.Progress / 100 ?? 0D); + var roundedLevel = Math.Floor(hideoutManagementSkill.Progress / 100); roundedLevel = roundedLevel == 51 ? roundedLevel - 1 : roundedLevel; return roundedLevel @@ -1164,7 +1164,7 @@ public class HideoutHelper( // If the level is 51 we need to round it at 50 so on elite you dont get 25.5% // at level 1 you already get 0.5%, so it goes up until level 50. For some reason the wiki // says that it caps at level 51 with 25% but as per dump data that is incorrect apparently - var roundedLevel = Math.Floor(profileSkill.Progress / 100 ?? 0D); + var roundedLevel = Math.Floor(profileSkill.Progress / 100); roundedLevel = roundedLevel == 51 ? roundedLevel - 1 : roundedLevel; return roundedLevel * valuePerLevel / 100; @@ -1309,7 +1309,7 @@ public class HideoutHelper( var bonus = GetDogtagCombatSkillBonusPercent(pmcData, activeDogtags) * hideoutManagementSkillBonusPercent; // Update bonus value to above calcualted value - combatBonusProfile.Value = Math.Round(bonus ?? 0, 2); + combatBonusProfile.Value = Math.Round(bonus, 2); } /// diff --git a/Libraries/SPTarkov.Server.Core/Helpers/PrestigeHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/PrestigeHelper.cs index 1faaaf40..5cea9010 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/PrestigeHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/PrestigeHelper.cs @@ -135,7 +135,7 @@ public class PrestigeHelper( case RewardType.Skill: if (Enum.TryParse(reward.Target, out SkillTypes result)) { - profileHelper.AddSkillPointsToPlayer(newProfile.CharacterData.PmcData, result, reward.Value); + profileHelper.AddSkillPointsToPlayer(newProfile.CharacterData.PmcData, result, reward.Value.GetValueOrDefault(0)); } else { diff --git a/Libraries/SPTarkov.Server.Core/Helpers/ProfileHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/ProfileHelper.cs index 53fba5df..1f3b98e0 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/ProfileHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/ProfileHelper.cs @@ -478,7 +478,7 @@ public class ProfileHelper( public void AddSkillPointsToPlayer( PmcData pmcProfile, SkillTypes skill, - double? pointsToAddToSkill, + double pointsToAddToSkill, bool useSkillProgressRateMultiplier = false ) { @@ -516,7 +516,6 @@ public class ProfileHelper( profileSkill.Progress += pointsToAddToSkill; profileSkill.Progress = Math.Min(profileSkill?.Progress ?? 0D, 5100); // Prevent skill from ever going above level 51 (5100) - profileSkill.PointsEarnedDuringSession ??= 0; profileSkill.PointsEarnedDuringSession += pointsToAddToSkill; profileSkill.LastAccess = timeUtil.GetTimeStamp(); diff --git a/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs index 2aebd9c9..cc4f175a 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs @@ -140,7 +140,7 @@ public class QuestHelper( logger.Debug($"currentLevelRemainingProgress: {currentLevelRemainingProgress}"); } - var progressToAdd = Math.Min(remainingProgress, currentLevelRemainingProgress ?? 0); + var progressToAdd = Math.Min(remainingProgress, currentLevelRemainingProgress); var adjustedProgressToAdd = 10 / (currentLevel + 1) * progressToAdd; if (logger.IsLogEnabled(LogLevel.Debug)) { diff --git a/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs index faab3702..b7f8d519 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs @@ -138,7 +138,7 @@ public class QuestRewardHelper( var hideoutManagementBonusMultiplier = hideoutManagementSkill != null ? 2 + hideoutManagementSkill.Progress / 1000 : 1; // e.g 15% * 1.4 - return moneyRewardBonusPercent + hideoutManagementBonusMultiplier ?? 1; + return moneyRewardBonusPercent + hideoutManagementBonusMultiplier; } /// diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs index 8beff1cb..9cfcfd37 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs @@ -71,7 +71,11 @@ public class RewardHelper( { case RewardType.Skill: // This needs to use the passed in profileData, as it could be the scav profile - profileHelper.AddSkillPointsToPlayer(profileData, Enum.Parse(reward.Target), reward.Value); + profileHelper.AddSkillPointsToPlayer( + profileData, + Enum.Parse(reward.Target), + reward.Value.GetValueOrDefault(0) + ); break; case RewardType.Experience: profileHelper.AddExperienceToPmc(sessionId.Value, int.Parse(reward.Value.ToString())); // this must occur first as the output object needs to take the modified profile exp value diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/BotBase.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/BotBase.cs index 4209bff7..7d51b047 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/BotBase.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/BotBase.cs @@ -447,7 +447,7 @@ public record Skills public IEnumerable? Mastering { get; set; } - public double? Points { get; set; } + public double Points { get; set; } } public record MasterySkill @@ -455,9 +455,9 @@ public record MasterySkill [JsonExtensionData] public Dictionary? ExtensionData { get; set; } - public string? Id { get; set; } + public string Id { get; set; } - public double? Progress { get; set; } + public double Progress { get; set; } } public record CommonSkill @@ -465,13 +465,14 @@ public record CommonSkill [JsonExtensionData] public Dictionary? ExtensionData { get; set; } - public double? PointsEarnedDuringSession { get; set; } + public double PointsEarnedDuringSession { get; set; } - public long? LastAccess { get; set; } + public long LastAccess { get; set; } - public SkillTypes? Id { get; set; } + [JsonConverter(typeof(JsonStringEnumConverter))] + public SkillTypes Id { get; set; } - public double? Progress { get; set; } + public double Progress { get; set; } [JsonPropertyName("max")] public int? Max { get; set; } diff --git a/Libraries/SPTarkov.Server.Core/Services/RepairService.cs b/Libraries/SPTarkov.Server.Core/Services/RepairService.cs index d6fbc1ca..c8e3ac2e 100644 --- a/Libraries/SPTarkov.Server.Core/Services/RepairService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/RepairService.cs @@ -183,7 +183,7 @@ public class RepairService( var pointsToAddToVestSkill = repairDetails.RepairPoints * _repairConfig.ArmorKitSkillPointGainPerRepairPointMultiplier; logger.Debug($"Added: {pointsToAddToVestSkill} {vestSkillToLevel} skill"); - profileHelper.AddSkillPointsToPlayer(pmcData, vestSkillToLevel, pointsToAddToVestSkill); + profileHelper.AddSkillPointsToPlayer(pmcData, vestSkillToLevel, pointsToAddToVestSkill.GetValueOrDefault(0)); } // Handle giving INT to player - differs if using kit/trader and weapon vs armor