1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-02-03 13:01:33 +02:00

Fix 2264 learning stone & Learning skill

This commit is contained in:
Vadim Markovtsev 2016-01-31 10:12:01 +03:00
parent ab27464541
commit e18b21b78e
2 changed files with 17 additions and 11 deletions

View File

@ -99,7 +99,7 @@ void CRewardableObject::onHeroVisit(const CGHeroInstance *h) const
iw.player = h->tempOwner;
iw.soundID = soundID;
iw.text = info[index].message;
info[index].reward.loadComponents(iw.components);
info[index].reward.loadComponents(iw.components, h);
cb->showInfoDialog(&iw);
}
// grant reward afterwards. Note that it may remove object
@ -112,7 +112,7 @@ void CRewardableObject::onHeroVisit(const CGHeroInstance *h) const
sd.soundID = soundID;
sd.text = onSelect;
for (auto index : rewards)
sd.components.push_back(info[index].reward.getDisplayedComponent());
sd.components.push_back(info[index].reward.getDisplayedComponent(h));
cb->showBlockingDialog(&sd);
};
@ -341,12 +341,17 @@ bool CRewardableObject::wasVisited (const CGHeroInstance * h) const
}
}
void CRewardInfo::loadComponents(std::vector<Component> & comps) const
void CRewardInfo::loadComponents(std::vector<Component> & comps,
const CGHeroInstance * h) const
{
for (auto comp : extraComponents)
comps.push_back(comp);
if (gainedExp) comps.push_back(Component(Component::EXPERIENCE, 0, gainedExp, 0));
if (gainedExp)
{
comps.push_back(Component(
Component::EXPERIENCE, 0, h->calculateXp(gainedExp), 0));
}
if (gainedLevels) comps.push_back(Component(Component::EXPERIENCE, 0, gainedLevels, 0));
if (manaDiff) comps.push_back(Component(Component::PRIM_SKILL, 5, manaDiff, 0));
@ -376,10 +381,10 @@ void CRewardInfo::loadComponents(std::vector<Component> & comps) const
}
}
Component CRewardInfo::getDisplayedComponent() const
Component CRewardInfo::getDisplayedComponent(const CGHeroInstance * h) const
{
std::vector<Component> comps;
loadComponents(comps);
loadComponents(comps, h);
assert(!comps.empty());
return comps.front();
}

View File

@ -104,9 +104,10 @@ public:
/// if set to true, object will be removed after granting reward
bool removeObject;
/// Generates list of components that describes reward
virtual void loadComponents(std::vector<Component> & comps) const;
Component getDisplayedComponent() const;
/// Generates list of components that describes reward for a specific hero
virtual void loadComponents(std::vector<Component> & comps,
const CGHeroInstance * h) const;
Component getDisplayedComponent(const CGHeroInstance * h) const;
CRewardInfo() :
gainedExp(0),