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:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user