فهرست منبع

Updated catapult spell effect to match new code

Dydzio 7 سال پیش
والد
کامیت
07cf59592b
2فایلهای تغییر یافته به همراه7 افزوده شده و 5 حذف شده
  1. 6 4
      lib/spells/effects/Catapult.cpp
  2. 1 1
      server/CGameHandler.cpp

+ 6 - 4
lib/spells/effects/Catapult.cpp

@@ -86,6 +86,8 @@ void Catapult::apply(BattleStateProxy * battleState, RNG & rng, const Mechanics
 	CatapultAttack ca;
 	ca.attacker = -1;
 
+	BattleUnitsChanged removeUnits;
+
 	for(int i = 0; i < targetsToAttack; i++)
 	{
 		//Any destructible part can be hit regardless of its HP. Multiple hit on same target is allowed.
@@ -120,9 +122,8 @@ void Catapult::apply(BattleStateProxy * battleState, RNG & rng, const Mechanics
 			break;
 		}
 
-		if(posRemove != BattleHex::INVALID)
+		if(posRemove != BattleHex::INVALID && state - attackInfo.damageDealt <= 0) //HP enum subtraction not intuitive, consider using SiegeInfo::applyDamage
 		{
-			BattleUnitsChanged removeUnits;
 			auto all = m->cb->battleGetUnitsIf([=](const battle::Unit * unit)
 			{
 				return !unit->isGhost();
@@ -136,12 +137,13 @@ void Catapult::apply(BattleStateProxy * battleState, RNG & rng, const Mechanics
 					break;
 				}
 			}
-			if(!removeUnits.changedStacks.empty())
-				battleState->apply(&removeUnits);
 		}
 	}
 
 	battleState->apply(&ca);
+
+	if(!removeUnits.changedStacks.empty())
+		battleState->apply(&removeUnits);
 }
 
 void Catapult::serializeJsonEffect(JsonSerializeFormat & handler)

+ 1 - 1
server/CGameHandler.cpp

@@ -4363,7 +4363,7 @@ bool CGameHandler::makeBattleAction(BattleAction &ba)
 				logGlobal->trace("Catapult attacks %d dealing %d damage", (int)attack.attackedPart, (int)attack.damageDealt);
 
 				//removing creatures in turrets / keep if one is destroyed
-				if (currentHP.at(attackedPart) - attack.damageDealt <= 0 && (attackedPart == EWallPart::KEEP ||
+				if (currentHP.at(attackedPart) - attack.damageDealt <= 0 && (attackedPart == EWallPart::KEEP || //HP enum subtraction not intuitive, consider using SiegeInfo::applyDamage
 					attackedPart == EWallPart::BOTTOM_TOWER || attackedPart == EWallPart::UPPER_TOWER))
 				{
 					int posRemove = -1;