1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-25 22:42:04 +02:00

Skill removal as reward

This commit is contained in:
George King
2025-03-22 17:16:46 +01:00
committed by GitHub
parent a3d1159512
commit cae84e0e77

View File

@@ -133,7 +133,16 @@ ui8 CGHeroInstance::getSecSkillLevel(const SecondarySkill & skill) const
void CGHeroInstance::setSecSkillLevel(const SecondarySkill & which, int val, bool abs)
{
if(getSecSkillLevel(which) == 0)
if (val == 0) // skill removal
{
auto it = std::find_if(secSkills.begin(), secSkills.end(), [&](const std::pair<SecondarySkill, ui8>& pair) { return pair.first == which; });
if (it != secSkills.end())
{
secSkills.erase(it);
updateSkillBonus(which, val);
}
}
else if(getSecSkillLevel(which) == 0)
{
secSkills.emplace_back(which, val);
updateSkillBonus(which, val);
@@ -660,9 +669,13 @@ void CGHeroInstance::recreateSecondarySkillsBonuses()
void CGHeroInstance::updateSkillBonus(const SecondarySkill & which, int val)
{
removeBonuses(Selector::source(BonusSource::SECONDARY_SKILL, BonusSourceID(which)));
auto skillBonus = (*LIBRARY->skillh)[which]->at(val).effects;
for(const auto & b : skillBonus)
addNewBonus(std::make_shared<Bonus>(*b));
if(val > 0)
{
auto skillBonus = (*LIBRARY->skillh)[which]->at(val).effects;
for(const auto& b : skillBonus)
addNewBonus(std::make_shared<Bonus>(*b));
}
}
void CGHeroInstance::setPropertyDer(ObjProperty what, ObjPropertyID identifier)