1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-03-25 21:38:59 +02:00

Corrected calculation of secondary skill speciality.

This commit is contained in:
DjWarmonger 2010-07-21 09:00:24 +00:00
parent 7ae02b7c5a
commit 29e7530ff5

View File

@ -981,8 +981,10 @@ void CGHeroInstance::initObj()
case 2://secondary skill
speciality.growthsWithLevel = true;
bonus.type = Bonus::SPECIAL_SECONDARY_SKILL; //needs to be recalculated with level, based on this value
bonus.valType = Bonus::BASE_NUMBER; // to receive nonzero value
bonus.subtype = it->subtype; //skill id
bonus.val = it->val; //value per level, in percent
speciality.bonuses.push_back (bonus);
switch (it->additionalinfo)
{
case 0: //normal
@ -992,8 +994,7 @@ void CGHeroInstance::initObj()
bonus.valType = Bonus::PERCENT_TO_ALL;
break;
}
speciality.bonuses.push_back (bonus);
bonus.val = valOfBonuses(Bonus::SECONDARY_SKILL_PREMY, it->subtype) * it->val; //TODO: limit range to hero only
bonus.type = Bonus::SECONDARY_SKILL_PREMY; //value will be calculated later
speciality.bonuses.push_back(bonus);
break;
case 3://spell damage bonus, level dependant but calculated elsehwere
@ -1117,10 +1118,8 @@ void CGHeroInstance::UpdateSpeciality()
switch (it->type)
{
case Bonus::SECONDARY_SKILL_PREMY:
it->val = (speciality.valOfBonuses(Bonus::SPECIAL_SECONDARY_SKILL, it->subtype) *
valOfBonuses(Selector::typeSybtype(Bonus::SECONDARY_SKILL_PREMY, it->subtype),this) * level);
//use only hero skills as bonuses to avoid feedback loop
break;
it->val = (speciality.valOfBonuses(Bonus::SPECIAL_SECONDARY_SKILL, it->subtype) * level);
break; //use only hero skills as bonuses to avoid feedback loop
case Bonus::PRIMARY_SKILL: //for crearures, that is
int creLevel = (*creatures)[it->additionalInfo]->level;
if(!creLevel)
@ -1192,14 +1191,16 @@ void CGHeroInstance::updateSkill(int which, int val)
}
if (skillVal) //we don't need bonuses of other types here
{
if (hasBonusOfType(Bonus::SECONDARY_SKILL_PREMY, which))
Bonus * b = getBonus(Selector::typeSybtype(Bonus::SECONDARY_SKILL_PREMY, which) && Selector::sourceType(Bonus::SECONDARY_SKILL));
if (b) //only local hero bonus
{
getBonus(Selector::typeSybtype(Bonus::SECONDARY_SKILL_PREMY, which))->val = skillVal;
b->val = skillVal;
}
else
{
bonuses.push_back
(Bonus(Bonus::PERMANENT, Bonus::SECONDARY_SKILL_PREMY, id, skillVal, ID, which, Bonus::BASE_NUMBER));
Bonus bonus(Bonus::PERMANENT, Bonus::SECONDARY_SKILL_PREMY, id, skillVal, ID, which, Bonus::BASE_NUMBER);
bonus.source = Bonus::SECONDARY_SKILL;
bonuses.push_back (bonus);
}
}
}