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:
parent
7ae02b7c5a
commit
29e7530ff5
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user