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:
parent
ab27464541
commit
e18b21b78e
@ -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();
|
||||
}
|
||||
|
@ -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),
|
||||
|
Loading…
x
Reference in New Issue
Block a user