Skip to content

Various Skill Progress Hideout Adjustments#739

Merged
ArchangelWTF merged 13 commits intosp-tarkov:developfrom
rootdarkarchon:develop
Feb 18, 2026
Merged

Various Skill Progress Hideout Adjustments#739
ArchangelWTF merged 13 commits intosp-tarkov:developfrom
rootdarkarchon:develop

Conversation

@rootdarkarchon
Copy link
Contributor

@rootdarkarchon rootdarkarchon commented Feb 13, 2026

This PR aims to further adjust a variety of skill progression as provided through the SPT server to align it with the values as described in the Tarkov Wiki.

Following adjustments have been made:

  • HideoutManagement skill in HideoutController.UpgradeComplete now gives 12 points per completed upgrade
  • Crafting skill in HideoutController.HandleRecipe now gives 5 points per alternating craft and 1.5 points per 8h of crafting
    • A TODO was added to check whether or not Crafting an item still gives Intellect on live
  • A TODO was added to InventoryController.FlagItemsAsInspectedAndRewardXp whether it still gives Intellect on live
  • PrestigeHelper and RewardHelper applying Skill rewards were adjusted to not use low level scaling and no progress rate multiplier, now yielding skill rewards always being +1 level
  • RepairService.AddRepairSkillPoints was adjusted to more accurately represent live
    • Repairing a weapon with kit now gives 0.8 points of WeaponTreatment skill per 5 durability repaired
    • Repairing a Light/Heavy vest with kit now gives 0.4 points of Light/HeavyVest skill per 10 durability repaired
    • Intellect gain for armor and weapon repair was adjusted to 0.4 points per 10 durability repaired
  • HideoutHelper UpdateFuel UpdateWaterFilters and UpdateAirFilters should now give 0.8 points per 10 points durability consumed
  • HideoutHelper.ScavCaseProductionStart now gives 0.4 points of HideoutManagement for starting scav case
  • All skill points changes except Prestige/RewardHelper are now scalable via SkillProgressRate

Open points as of now are still the two TODO's I've added and whether HideoutManagement skill progression in HideoutHelper UpdateFuel, UpdateWaterFilters and UpdateAirFilters is correct (there are values in globals but who knows how accurate they are), also it seems like when having SolarPower it should yield 1.2 points per 50 fuel consumed (?).
It is also not 100% clear how many points of HideoutManagement should be provided for sending out scav case. I set it to 0.4 as per default skill progression rate for now.

@qodo-free-for-open-source-projects
Copy link

qodo-free-for-open-source-projects bot commented Feb 13, 2026

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
Possible issue
Use a shared random instance

Replace the local new Random() instance with the injected randomUtil to prevent
potential issues with random number generation when the method is called in
quick succession.

Libraries/SPTarkov.Server.Core/Services/RepairService.cs [247-268]

 protected double GetWeaponRepairSkillPoints(RepairDetails repairDetails)
 {
-    var random = new Random();
     // Every 5 points repaired with kit should give 0.4 skill points, so PointGainMultiplier is 0.2
     // The return value is later scaled in AddSkillPointsToPlayer, i.e. 1 skill point returned here = 0.4 skill points added
     var skillPoints = repairDetails.RepairAmount.GetValueOrDefault(0) * RepairConfig.WeaponTreatment.PointGainMultiplier;
 
     // You can both crit fail and succeed at the same time, for fun (Balances out to 0 with default settings)
     // Add a random chance to crit-fail
-    if (random.NextDouble() <= RepairConfig.WeaponTreatment.CritFailureChance)
+    if (randomUtil.GetDouble() <= RepairConfig.WeaponTreatment.CritFailureChance)
     {
         skillPoints -= RepairConfig.WeaponTreatment.CritFailureAmount;
     }
 
     // Add a random chance to crit-succeed
-    if (random.NextDouble() <= RepairConfig.WeaponTreatment.CritSuccessChance)
+    if (randomUtil.GetDouble() <= RepairConfig.WeaponTreatment.CritSuccessChance)
     {
         skillPoints += RepairConfig.WeaponTreatment.CritSuccessAmount;
     }
 
     return Math.Max(skillPoints, 0);
 }
Suggestion importance[1-10]: 7

__

Why: This is a valid and important best practice for using Random. The suggestion correctly identifies the potential issue and proposes using the already injected randomUtil for consistency and correctness.

Medium
General
Use named boolean parameter

Use the named argument useSkillProgressRateMultiplier: true in the
AddSkillPointsToPlayer call to improve code clarity and explicitly state the
purpose of the boolean flag.

Libraries/SPTarkov.Server.Core/Services/RepairService.cs [193]

-profileHelper.AddSkillPointsToPlayer(pmcData, vestSkillToLevel, pointsToAddToVestSkill.GetValueOrDefault(0), true);
+profileHelper.AddSkillPointsToPlayer(
+    pmcData,
+    vestSkillToLevel,
+    pointsToAddToVestSkill.GetValueOrDefault(0),
+    useSkillProgressRateMultiplier: true
+);
Suggestion importance[1-10]: 6

__

Why: The suggestion correctly identifies that using a named argument for the boolean parameter useSkillProgressRateMultiplier significantly improves code readability and makes the intent of the true value explicit.

Low
Ensure skill points are integers

Ensure intellectAmountToGive is an integer by applying Math.Floor to the
calculation, preventing the assignment of fractional skill points.

Libraries/SPTarkov.Server.Core/Controllers/HideoutController.cs [950-959]

-var intellectAmountToGive = 0.5 * Math.Round((double)(craftingExpAmount / 15));
+var intellectAmountToGive = Math.Floor(0.5 * Math.Round(craftingExpAmount / 15));
 if (intellectAmountToGive > 0)
 {
     profileHelper.AddSkillPointsToPlayer(
         pmcData,
         SkillTypes.Intellect,
         intellectAmountToGive,
         useSkillProgressRateMultiplier: false
     );
 }
Suggestion importance[1-10]: 5

__

Why: The suggestion correctly identifies that the calculation can produce fractional skill points and proposes using Math.Floor to ensure integer values, which improves the predictability of skill progression.

Low
Round repair skill points

Round the calculated skillPoints to a fixed precision before applying critical
success or failure adjustments to prevent floating-point inaccuracies.

Libraries/SPTarkov.Server.Core/Services/RepairService.cs [252-267]

-var skillPoints = repairDetails.RepairAmount.GetValueOrDefault(0) * RepairConfig.WeaponTreatment.PointGainMultiplier;
+var rawPoints = repairDetails.RepairAmount.GetValueOrDefault(0) * RepairConfig.WeaponTreatment.PointGainMultiplier;
+var skillPoints = Math.Round(rawPoints, 2);
 // ...crit checks...
 return Math.Max(skillPoints, 0);
Suggestion importance[1-10]: 4

__

Why: The suggestion correctly points out potential floating-point inaccuracies. Rounding the value after the initial calculation but before applying critical adjustments improves the predictability and stability of the skill point calculation.

Low
  • Update

@ArchangelWTF ArchangelWTF merged commit b8f9ab8 into sp-tarkov:develop Feb 18, 2026
5 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants