mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
Merge pull request #3836 from vcmi/unpropagate_bonus
Fixes issue of bonuses not correctly removed
This commit is contained in:
commit
b0effdbbf4
@ -147,6 +147,9 @@ std::string Bonus::Description(std::optional<si32> customValue) const
|
|||||||
descriptionHelper.replaceRawString(std::to_string(valueToShow));
|
descriptionHelper.replaceRawString(std::to_string(valueToShow));
|
||||||
else
|
else
|
||||||
descriptionHelper.replaceRawString("-" + std::to_string(valueToShow));
|
descriptionHelper.replaceRawString("-" + std::to_string(valueToShow));
|
||||||
|
|
||||||
|
if(type == BonusType::CREATURE_GROWTH_PERCENT)
|
||||||
|
descriptionHelper.appendRawString(" +" + std::to_string(valueToShow));
|
||||||
}
|
}
|
||||||
|
|
||||||
return descriptionHelper.toString();
|
return descriptionHelper.toString();
|
||||||
|
@ -414,8 +414,20 @@ void CBonusSystemNode::unpropagateBonus(const std::shared_ptr<Bonus> & b)
|
|||||||
{
|
{
|
||||||
if(b->propagator->shouldBeAttached(this))
|
if(b->propagator->shouldBeAttached(this))
|
||||||
{
|
{
|
||||||
bonuses -= b;
|
if (bonuses -= b)
|
||||||
logBonus->trace("#$# %s #is no longer propagated to# %s", b->Description(), nodeName());
|
logBonus->trace("#$# %s #is no longer propagated to# %s", b->Description(), nodeName());
|
||||||
|
else
|
||||||
|
logBonus->warn("Attempt to remove #$# %s, which is not propagated to %s", b->Description(), nodeName());
|
||||||
|
|
||||||
|
bonuses.remove_if([b](const auto & bonus)
|
||||||
|
{
|
||||||
|
if (bonus->propagationUpdater && bonus->propagationUpdater == b->propagationUpdater)
|
||||||
|
{
|
||||||
|
treeHasChanged();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
TNodes lchildren;
|
TNodes lchildren;
|
||||||
|
@ -156,7 +156,10 @@ GrowthInfo CGTownInstance::getGrowthInfo(int level) const
|
|||||||
for(const auto & b : *bonuses2)
|
for(const auto & b : *bonuses2)
|
||||||
{
|
{
|
||||||
const auto growth = b->val * (base + castleBonus) / 100;
|
const auto growth = b->val * (base + castleBonus) / 100;
|
||||||
ret.entries.emplace_back(growth, b->Description(growth));
|
if (growth)
|
||||||
|
{
|
||||||
|
ret.entries.emplace_back(growth, b->Description(growth));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//other *-of-legion-like bonuses (%d to growth cumulative with grail)
|
//other *-of-legion-like bonuses (%d to growth cumulative with grail)
|
||||||
|
Loading…
Reference in New Issue
Block a user