Browse Source

Fix battle AI using Fire elementals (had score 0)

Andrii Danylchenko 2 years ago
parent
commit
06fcbf891b
1 changed files with 12 additions and 4 deletions
  1. 12 4
      AI/BattleAI/BattleAI.cpp

+ 12 - 4
AI/BattleAI/BattleAI.cpp

@@ -596,9 +596,18 @@ void CBattleAI::attemptCastingSpell()
 
 		size_t ourUnits = 0;
 
-		for(auto unit : all)
+		std::set<uint32_t> unitIds;
+
+		state.battleGetUnitsIf([&](const battle::Unit * u)->bool
+		{
+			if(!u->isGhost() && !u->isTurret())
+				unitIds.insert(u->unitId());
+
+			return false;
+		});
+
+		for(auto unitId : unitIds)
 		{
-			auto unitId = unit->unitId();
 			auto localUnit = state.battleGetUnitByID(unitId);
 
 			newHealthOfStack[unitId] = localUnit->getAvailableHealth();
@@ -620,9 +629,8 @@ void CBattleAI::attemptCastingSpell()
 		{
 			int64_t totalGain = 0;
 
-			for(auto unit : all)
+			for(auto unitId : unitIds)
 			{
-				auto unitId = unit->unitId();
 				auto localUnit = state.battleGetUnitByID(unitId);
 
 				auto newValue = getValOr(newValueOfStack, unitId, 0);