diff --git a/hch/CObjectHandler.cpp b/hch/CObjectHandler.cpp index 34fe1c070..af4858b55 100644 --- a/hch/CObjectHandler.cpp +++ b/hch/CObjectHandler.cpp @@ -4890,10 +4890,14 @@ void CGPandoraBox::giveContents( const CGHeroInstance *h, bool afterBattle ) con { std::set<ui32> spellsToGive; iw.components.clear(); - for(int i=0; i<spells.size(); i++) + std::vector<CSpell> * sp = &VLC->spellh->spells; + for(std::vector<si32>::const_iterator i=spells.begin(); i != spells.end(); i++) { - iw.components.push_back(Component(Component::SPELL,spells[i],0,0)); - spellsToGive.insert(spells[i]); + if ((*sp)[*i].level <= h->getSecSkillLevel(7) + 2) //enough wisdom + { + iw.components.push_back(Component(Component::SPELL,*i,0,0)); + spellsToGive.insert(*i); + } } if(spellsToGive.size()) { @@ -5217,7 +5221,8 @@ void CGScholar::onHeroVisit( const CGHeroInstance * h ) const int ssl = h->getSecSkillLevel(bid); //current sec skill level, used if bonusType == 1 if((type == 1 && ((ssl == 3) || (!ssl && h->secSkills.size() == SKILL_PER_HERO))) ////hero already has expert level in the skill or (don't know skill and doesn't have free slot) - || (type == 2 && (!h->getArt(17) || vstd::contains(h->spells, (ui32) bid)))) //hero doesn't have a spellbook or already knows the spell + || (type == 2 && (!h->getArt(17) || vstd::contains(h->spells, (ui32) bid) || (VLC->spellh->spells[bid].level > h->getSecSkillLevel(7) + 2) + ))) //hero doesn't have a spellbook or already knows the spell or doesn't have Wisdom { type = 0; bid = ran() % PRIMARY_SKILLS;