Various Skill Progress Hideout Adjustments (#739)

* Adjust ArmorKitSkillPointGainPerRepairPointMultiplier evaluation

* Adjust GetWeaponRepairSkillPoints

* adjust WeaponRepair Treatment gain values and intellect gain values

* enable scaling for hideout upgrade

* Adjust HandleRecipe

* adjust skill points addition for PrestigeHelper and RewardHelper

* format

* adjust doc

* adjust doc

* amend some ABI changes

* clarify bool usage

* adjust UpdateFuel, WaterFilters and AirFilters

* add HideoutManagement skill progression to scav case

---------

Co-authored-by: rootdarkarchon <root.darkarchon@outlook.com>
This commit is contained in:
rootdarkarchon
2026-02-18 14:43:56 +01:00
committed by GitHub
parent 8cdce4e54a
commit b8f9ab8646
10 changed files with 82 additions and 37 deletions
@@ -217,7 +217,8 @@ public class HideoutController(
profileHelper.AddSkillPointsToPlayer(
pmcData,
SkillTypes.HideoutManagement,
globals.Configuration.SkillsSettings.HideoutManagement.SkillPointsPerAreaUpgrade
globals.Configuration.SkillsSettings.HideoutManagement.SkillPointsPerAreaUpgrade,
true
);
}
@@ -687,8 +688,9 @@ public class HideoutController(
);
pmcData.Hideout.Production[request.RecipeId].SptIsScavCase = true;
// reward charisma based on skill progress rate for each scav production start
// reward charisma and hideout management based on skill progress rate for each scav production start
profileHelper.AddSkillPointsToPlayer(pmcData, SkillTypes.Charisma, 1, true);
profileHelper.AddSkillPointsToPlayer(pmcData, SkillTypes.HideoutManagement, 1, true);
return output;
}
@@ -822,7 +824,7 @@ public class HideoutController(
}
// Variables for management of skill
var craftingExpAmount = 0;
double craftingExpAmount = 0;
var counterHoursCrafting = GetCustomSptHoursCraftingTaskConditionCounter(pmcData, recipe);
var totalCraftingHours = counterHoursCrafting.Value;
@@ -863,19 +865,19 @@ public class HideoutController(
// Check if the recipe is the same as the last one - get bonus when crafting same thing multiple times
var area = pmcData.Hideout.Areas.FirstOrDefault(area => area.Type == recipe.AreaType);
if (area is not null && request.RecipeId != area.LastRecipe)
// 1 point per craft upon the end of production for alternating between 2 different crafting recipes in the same module
// 5 points per craft upon the end of production for alternating between 2 different crafting recipes in the same module
{
craftingExpAmount += HideoutConfig.ExpCraftAmount; // Default is 10
craftingExpAmount += HideoutConfig.CraftingExpAmount; // Default is 12.5, scaled (at 0.4 scale => 5 points per alternating craft)
}
// Update variable with time spent crafting item(s)
// 1 point per 8 hours of crafting
// 1.5 (3.75 w/ applying default 0.4 scale) points per 8 hours of crafting
totalCraftingHours += recipe.ProductionTime;
if (totalCraftingHours / HideoutConfig.HoursForSkillCrafting >= 1)
{
// Spent enough time crafting to get a bonus xp multiplier
var multiplierCrafting = Math.Floor(totalCraftingHours.Value / HideoutConfig.HoursForSkillCrafting);
craftingExpAmount += (int)(1 * multiplierCrafting);
craftingExpAmount += (HideoutConfig.CraftingExpForHoursOfCrafting * multiplierCrafting);
totalCraftingHours -= HideoutConfig.HoursForSkillCrafting * multiplierCrafting;
}
@@ -943,12 +945,18 @@ public class HideoutController(
// Add Crafting skill to player profile
if (craftingExpAmount > 0)
{
profileHelper.AddSkillPointsToPlayer(pmcData, SkillTypes.Crafting, craftingExpAmount);
profileHelper.AddSkillPointsToPlayer(pmcData, SkillTypes.Crafting, craftingExpAmount, true);
// TODO: verify this is still giving intellect skill points on live
var intellectAmountToGive = 0.5 * Math.Round((double)(craftingExpAmount / 15));
if (intellectAmountToGive > 0)
{
profileHelper.AddSkillPointsToPlayer(pmcData, SkillTypes.Intellect, intellectAmountToGive);
profileHelper.AddSkillPointsToPlayer(
pmcData,
SkillTypes.Intellect,
intellectAmountToGive,
useSkillProgressRateMultiplier: false
);
}
}
@@ -277,7 +277,13 @@ public class InventoryController(
}
// TODO: update this with correct calculation using values from globals json
profileHelper.AddSkillPointsToPlayer(fullProfile.CharacterData.PmcData, SkillTypes.Intellect, 0.05 * itemTpls.Count());
// TODO: verify this is still giving intellect skill points on live
profileHelper.AddSkillPointsToPlayer(
fullProfile.CharacterData.PmcData,
SkillTypes.Intellect,
0.05 * itemTpls.Count(),
useSkillProgressRateMultiplier: false
);
}
/// <summary>