mirror of
https://github.com/vcmi/vcmi.git
synced 2025-01-12 02:28:11 +02:00
Added common method for secondary skill availability checks
This commit is contained in:
parent
e06db2365d
commit
729357824b
@ -1700,9 +1700,7 @@ int CUniversityWindow::CItem::state()
|
|||||||
{
|
{
|
||||||
if(parent->hero->getSecSkillLevel(SecondarySkill(ID)))//hero know this skill
|
if(parent->hero->getSecSkillLevel(SecondarySkill(ID)))//hero know this skill
|
||||||
return 1;
|
return 1;
|
||||||
if(!parent->hero->canLearnSkill())//can't learn more skills
|
if(!parent->hero->canLearnSkill(SecondarySkill(ID)))//can't learn more skills
|
||||||
return 0;
|
|
||||||
if(parent->hero->type->heroClass->secSkillProbability[ID]==0)//can't learn this skill (like necromancy for most of non-necros)
|
|
||||||
return 0;
|
return 0;
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
@ -195,6 +195,23 @@ bool CGHeroInstance::canLearnSkill() const
|
|||||||
return secSkills.size() < GameConstants::SKILL_PER_HERO;
|
return secSkills.size() < GameConstants::SKILL_PER_HERO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CGHeroInstance::canLearnSkill(SecondarySkill which) const
|
||||||
|
{
|
||||||
|
if ( !canLearnSkill())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!cb->isAllowed(2, which))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (getSecSkillLevel(which) > 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (type->heroClass->secSkillProbability[which] == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
int CGHeroInstance::maxMovePoints(bool onLand) const
|
int CGHeroInstance::maxMovePoints(bool onLand) const
|
||||||
{
|
{
|
||||||
TurnInfo ti(this);
|
TurnInfo ti(this);
|
||||||
@ -1117,9 +1134,7 @@ std::vector<SecondarySkill> CGHeroInstance::getLevelUpProposedSecondarySkills()
|
|||||||
std::vector<SecondarySkill> obligatorySkills; //hero is offered magic school or wisdom if possible
|
std::vector<SecondarySkill> obligatorySkills; //hero is offered magic school or wisdom if possible
|
||||||
if (!skillsInfo.wisdomCounter)
|
if (!skillsInfo.wisdomCounter)
|
||||||
{
|
{
|
||||||
if (cb->isAllowed(2, SecondarySkill::WISDOM) &&
|
if (canLearnSkill(SecondarySkill::WISDOM))
|
||||||
!getSecSkillLevel(SecondarySkill::WISDOM) &&
|
|
||||||
type->heroClass->secSkillProbability[SecondarySkill::WISDOM] > 0)
|
|
||||||
obligatorySkills.push_back(SecondarySkill::WISDOM);
|
obligatorySkills.push_back(SecondarySkill::WISDOM);
|
||||||
}
|
}
|
||||||
if (!skillsInfo.magicSchoolCounter)
|
if (!skillsInfo.magicSchoolCounter)
|
||||||
@ -1133,7 +1148,7 @@ std::vector<SecondarySkill> CGHeroInstance::getLevelUpProposedSecondarySkills()
|
|||||||
|
|
||||||
for (auto skill : ss)
|
for (auto skill : ss)
|
||||||
{
|
{
|
||||||
if (cb->isAllowed(2, skill) && !getSecSkillLevel(skill) && type->heroClass->secSkillProbability[skill] > 0) //only schools hero doesn't know yet
|
if (canLearnSkill(skill)) //only schools hero doesn't know yet
|
||||||
{
|
{
|
||||||
obligatorySkills.push_back(skill);
|
obligatorySkills.push_back(skill);
|
||||||
break; //only one
|
break; //only one
|
||||||
@ -1145,7 +1160,7 @@ std::vector<SecondarySkill> CGHeroInstance::getLevelUpProposedSecondarySkills()
|
|||||||
//picking sec. skills for choice
|
//picking sec. skills for choice
|
||||||
std::set<SecondarySkill> basicAndAdv, expert, none;
|
std::set<SecondarySkill> basicAndAdv, expert, none;
|
||||||
for(int i = 0; i < VLC->skillh->size(); i++)
|
for(int i = 0; i < VLC->skillh->size(); i++)
|
||||||
if (cb->isAllowed(2,i) && type->heroClass->secSkillProbability[i] > 0)
|
if (canLearnSkill(SecondarySkill(i)))
|
||||||
none.insert(SecondarySkill(i));
|
none.insert(SecondarySkill(i));
|
||||||
|
|
||||||
for(auto & elem : secSkills)
|
for(auto & elem : secSkills)
|
||||||
|
@ -187,6 +187,7 @@ public:
|
|||||||
|
|
||||||
/// Returns true if hero has free secondary skill slot.
|
/// Returns true if hero has free secondary skill slot.
|
||||||
bool canLearnSkill() const;
|
bool canLearnSkill() const;
|
||||||
|
bool canLearnSkill(SecondarySkill which) const;
|
||||||
|
|
||||||
void setPrimarySkill(PrimarySkill::PrimarySkill primarySkill, si64 value, ui8 abs);
|
void setPrimarySkill(PrimarySkill::PrimarySkill primarySkill, si64 value, ui8 abs);
|
||||||
void setSecSkillLevel(SecondarySkill which, int val, bool abs);// abs == 0 - changes by value; 1 - sets to value
|
void setSecSkillLevel(SecondarySkill which, int val, bool abs);// abs == 0 - changes by value; 1 - sets to value
|
||||||
|
@ -4083,7 +4083,7 @@ bool CGameHandler::buySecSkill(const IMarket *m, const CGHeroInstance *h, Second
|
|||||||
if (!h->canLearnSkill())
|
if (!h->canLearnSkill())
|
||||||
COMPLAIN_RET("Hero can't learn any more skills");
|
COMPLAIN_RET("Hero can't learn any more skills");
|
||||||
|
|
||||||
if (h->type->heroClass->secSkillProbability.at(skill)==0)//can't learn this skill (like necromancy for most of non-necros)
|
if (!h->canLearnSkill(skill))
|
||||||
COMPLAIN_RET("The hero can't learn this skill!");
|
COMPLAIN_RET("The hero can't learn this skill!");
|
||||||
|
|
||||||
if (!vstd::contains(m->availableItemsIds(EMarketMode::RESOURCE_SKILL), skill))
|
if (!vstd::contains(m->availableItemsIds(EMarketMode::RESOURCE_SKILL), skill))
|
||||||
|
Loading…
Reference in New Issue
Block a user