From 047849a23ed236bf1f2c985bd3983d95058a846b Mon Sep 17 00:00:00 2001 From: mateuszb Date: Fri, 12 Mar 2010 19:05:23 +0000 Subject: [PATCH] * general defence reduction support (behemoths) --- lib/CGameState.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/CGameState.cpp b/lib/CGameState.cpp index 86c8adaa2..2a09ca7aa 100644 --- a/lib/CGameState.cpp +++ b/lib/CGameState.cpp @@ -2387,11 +2387,22 @@ std::pair BattleInfo::calculateDmgRange(const CStack* attacker, cons if(attacker->hasFeatureOfType(StackFeature::GENERAL_ATTACK_REDUCTION)) { - attackDefenseBonus = attacker->Attack() * (attacker->valOfFeatures(StackFeature::GENERAL_ATTACK_REDUCTION, -1024) / 100.0f) - defender->Defense(); + float multAttackReduction = attacker->valOfFeatures(StackFeature::GENERAL_ATTACK_REDUCTION, -1024) / 100.0f; + attackDefenseBonus = attacker->Attack() * multAttackReduction; } else { - attackDefenseBonus = attacker->Attack() - defender->Defense(); + attackDefenseBonus = attacker->Attack(); + } + + if(attacker->hasFeatureOfType(StackFeature::ENEMY_DEFENCE_REDUCTION)) + { + float multDefenceReduction = (100.0f - attacker->valOfFeatures(StackFeature::ENEMY_DEFENCE_REDUCTION, -1024)) / 100.0f; + attackDefenseBonus -= defender->Defense() * multDefenceReduction; + } + else + { + attackDefenseBonus -= defender->Defense(); } //calculating total attack/defense skills modifier @@ -2406,7 +2417,6 @@ std::pair BattleInfo::calculateDmgRange(const CStack* attacker, cons attackDefenseBonus += attacker->valOfFeatures(StackFeature::ATTACK_BONUS, 1); } - if(attacker->getEffect(55)) //slayer handling { std::vector affectedIds;