1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-08-13 19:54:17 +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 case 2://secondary skill
speciality.growthsWithLevel = true; speciality.growthsWithLevel = true;
bonus.type = Bonus::SPECIAL_SECONDARY_SKILL; //needs to be recalculated with level, based on this value 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.subtype = it->subtype; //skill id
bonus.val = it->val; //value per level, in percent bonus.val = it->val; //value per level, in percent
speciality.bonuses.push_back (bonus);
switch (it->additionalinfo) switch (it->additionalinfo)
{ {
case 0: //normal case 0: //normal
@@ -992,8 +994,7 @@ void CGHeroInstance::initObj()
bonus.valType = Bonus::PERCENT_TO_ALL; bonus.valType = Bonus::PERCENT_TO_ALL;
break; break;
} }
speciality.bonuses.push_back (bonus); bonus.type = Bonus::SECONDARY_SKILL_PREMY; //value will be calculated later
bonus.val = valOfBonuses(Bonus::SECONDARY_SKILL_PREMY, it->subtype) * it->val; //TODO: limit range to hero only
speciality.bonuses.push_back(bonus); speciality.bonuses.push_back(bonus);
break; break;
case 3://spell damage bonus, level dependant but calculated elsehwere case 3://spell damage bonus, level dependant but calculated elsehwere
@@ -1117,10 +1118,8 @@ void CGHeroInstance::UpdateSpeciality()
switch (it->type) switch (it->type)
{ {
case Bonus::SECONDARY_SKILL_PREMY: case Bonus::SECONDARY_SKILL_PREMY:
it->val = (speciality.valOfBonuses(Bonus::SPECIAL_SECONDARY_SKILL, it->subtype) * it->val = (speciality.valOfBonuses(Bonus::SPECIAL_SECONDARY_SKILL, it->subtype) * level);
valOfBonuses(Selector::typeSybtype(Bonus::SECONDARY_SKILL_PREMY, it->subtype),this) * level); break; //use only hero skills as bonuses to avoid feedback loop
//use only hero skills as bonuses to avoid feedback loop
break;
case Bonus::PRIMARY_SKILL: //for crearures, that is case Bonus::PRIMARY_SKILL: //for crearures, that is
int creLevel = (*creatures)[it->additionalInfo]->level; int creLevel = (*creatures)[it->additionalInfo]->level;
if(!creLevel) 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 (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 else
{ {
bonuses.push_back Bonus bonus(Bonus::PERMANENT, Bonus::SECONDARY_SKILL_PREMY, id, skillVal, ID, which, Bonus::BASE_NUMBER);
(Bonus(Bonus::PERMANENT, Bonus::SECONDARY_SKILL_PREMY, id, skillVal, ID, which, Bonus::BASE_NUMBER)); bonus.source = Bonus::SECONDARY_SKILL;
bonuses.push_back (bonus);
} }
} }
} }