Преглед изворни кода

* general defence reduction support (behemoths)

mateuszb пре 15 година
родитељ
комит
047849a23e
1 измењених фајлова са 13 додато и 3 уклоњено
  1. 13 3
      lib/CGameState.cpp

+ 13 - 3
lib/CGameState.cpp

@@ -2387,11 +2387,22 @@ std::pair<ui32, ui32> 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<ui32, ui32> BattleInfo::calculateDmgRange(const CStack* attacker, cons
 		attackDefenseBonus += attacker->valOfFeatures(StackFeature::ATTACK_BONUS, 1);
 	}
 
-
 	if(attacker->getEffect(55)) //slayer handling
 	{
 		std::vector<int> affectedIds;