diff --git a/docs/modders/Map_Objects/Rewardable.md b/docs/modders/Map_Objects/Rewardable.md index f406e3cc2..022172bb3 100644 --- a/docs/modders/Map_Objects/Rewardable.md +++ b/docs/modders/Map_Objects/Rewardable.md @@ -418,6 +418,7 @@ Keep in mind, that all randomization is performed on map load and on object rese - If hero does not have selected skill and have free skill slots, he will receive skill at specified level - Possible values: 1 (basic), 2 (advanced), 3 (expert) - Each secondary skill can be explicitly specified or randomly selected +- Negative values can be used to downgrade or remove secondary skills from hero ```json "secondary": [ diff --git a/lib/rewardable/Reward.cpp b/lib/rewardable/Reward.cpp index 6c6efee59..fa8955f59 100644 --- a/lib/rewardable/Reward.cpp +++ b/lib/rewardable/Reward.cpp @@ -107,7 +107,7 @@ void Rewardable::Reward::loadComponents(std::vector & comps, const CG auto skillID = entry.first; int levelsGained = entry.second; int currentLevel = h ? h->getSecSkillLevel(skillID) : 0; - int finalLevel = std::min(static_cast(MasteryLevel::EXPERT), currentLevel + levelsGained); + int finalLevel = std::clamp(currentLevel + levelsGained, MasteryLevel::BASIC, MasteryLevel::EXPERT); comps.emplace_back(ComponentType::SEC_SKILL, entry.first, finalLevel); }