mirror of
https://github.com/vcmi/vcmi.git
synced 2025-08-13 19:54:17 +02:00
Merge pull request #3377 from dydzio0614/commander-skills-fix
Commander skills fix
This commit is contained in:
@@ -82,6 +82,13 @@ namespace Selector
|
|||||||
return CSelectFieldEqual<BonusValueType>(&Bonus::valType)(valType);
|
return CSelectFieldEqual<BonusValueType>(&Bonus::valType)(valType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CSelector DLL_LINKAGE typeSubtypeValueType(BonusType Type, BonusSubtypeID Subtype, BonusValueType valType)
|
||||||
|
{
|
||||||
|
return type()(Type)
|
||||||
|
.And(subtype()(Subtype))
|
||||||
|
.And(valueType(valType));
|
||||||
|
}
|
||||||
|
|
||||||
DLL_LINKAGE CSelector all([](const Bonus * b){return true;});
|
DLL_LINKAGE CSelector all([](const Bonus * b){return true;});
|
||||||
DLL_LINKAGE CSelector none([](const Bonus * b){return false;});
|
DLL_LINKAGE CSelector none([](const Bonus * b){return false;});
|
||||||
}
|
}
|
||||||
|
@@ -139,6 +139,7 @@ namespace Selector
|
|||||||
CSelector DLL_LINKAGE source(BonusSource source, BonusSourceID sourceID);
|
CSelector DLL_LINKAGE source(BonusSource source, BonusSourceID sourceID);
|
||||||
CSelector DLL_LINKAGE sourceTypeSel(BonusSource source);
|
CSelector DLL_LINKAGE sourceTypeSel(BonusSource source);
|
||||||
CSelector DLL_LINKAGE valueType(BonusValueType valType);
|
CSelector DLL_LINKAGE valueType(BonusValueType valType);
|
||||||
|
CSelector DLL_LINKAGE typeSubtypeValueType(BonusType Type, BonusSubtypeID Subtype, BonusValueType valType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Selects all bonuses
|
* Selects all bonuses
|
||||||
|
@@ -356,7 +356,7 @@ void CBonusSystemNode::addNewBonus(const std::shared_ptr<Bonus>& b)
|
|||||||
|
|
||||||
void CBonusSystemNode::accumulateBonus(const std::shared_ptr<Bonus>& b)
|
void CBonusSystemNode::accumulateBonus(const std::shared_ptr<Bonus>& b)
|
||||||
{
|
{
|
||||||
auto bonus = exportedBonuses.getFirst(Selector::typeSubtype(b->type, b->subtype)); //only local bonuses are interesting //TODO: what about value type?
|
auto bonus = exportedBonuses.getFirst(Selector::typeSubtypeValueType(b->type, b->subtype, b->valType)); //only local bonuses are interesting
|
||||||
if(bonus)
|
if(bonus)
|
||||||
bonus->val += b->val;
|
bonus->val += b->val;
|
||||||
else
|
else
|
||||||
|
@@ -253,11 +253,12 @@ void CGameHandler::levelUpCommander (const CCommanderInstance * c, int skill)
|
|||||||
break;
|
break;
|
||||||
case ECommander::HEALTH:
|
case ECommander::HEALTH:
|
||||||
scp.accumulatedBonus.type = BonusType::STACK_HEALTH;
|
scp.accumulatedBonus.type = BonusType::STACK_HEALTH;
|
||||||
scp.accumulatedBonus.valType = BonusValueType::PERCENT_TO_BASE;
|
scp.accumulatedBonus.valType = BonusValueType::PERCENT_TO_ALL; //TODO: check how it accumulates in original WoG with artifacts such as vial of life blood, elixir of life etc.
|
||||||
break;
|
break;
|
||||||
case ECommander::DAMAGE:
|
case ECommander::DAMAGE:
|
||||||
scp.accumulatedBonus.type = BonusType::CREATURE_DAMAGE;
|
scp.accumulatedBonus.type = BonusType::CREATURE_DAMAGE;
|
||||||
scp.accumulatedBonus.valType = BonusValueType::PERCENT_TO_BASE;
|
scp.accumulatedBonus.subtype = BonusCustomSubtype::creatureDamageBoth;
|
||||||
|
scp.accumulatedBonus.valType = BonusValueType::PERCENT_TO_ALL;
|
||||||
break;
|
break;
|
||||||
case ECommander::SPEED:
|
case ECommander::SPEED:
|
||||||
scp.accumulatedBonus.type = BonusType::STACKS_SPEED;
|
scp.accumulatedBonus.type = BonusType::STACKS_SPEED;
|
||||||
|
Reference in New Issue
Block a user