From b962bc9ca6d8e10f5c819a7d388d8a96cf52f6fa Mon Sep 17 00:00:00 2001 From: excessum Date: Thu, 6 Oct 2016 02:25:15 +0000 Subject: [PATCH] - Stopped AI from crewing vehicles with stronger or equal (ie. crew vehicle with another copy of crewed vehicle) creatures --- forge-ai/src/main/java/forge/ai/ComputerUtil.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtil.java b/forge-ai/src/main/java/forge/ai/ComputerUtil.java index 4c825a3144f..690d02032fb 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtil.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtil.java @@ -32,6 +32,7 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Multimap; +import forge.ai.ability.AnimateAi; import forge.ai.ability.ProtectAi; import forge.card.CardType; import forge.card.MagicColor; @@ -44,6 +45,7 @@ import forge.game.ability.effects.CharmEffect; import forge.game.card.Card; import forge.game.card.CardCollection; import forge.game.card.CardCollectionView; +import forge.game.card.CardFactory; import forge.game.card.CardLists; import forge.game.card.CardPredicates; import forge.game.card.CardPredicates.Presets; @@ -497,10 +499,12 @@ public class ComputerUtil { return tapList; } - public static CardCollection chooseTapTypeAccumulatePower(final Player ai, final String type, final SpellAbility sa, final boolean tap, final int amount, final CardCollectionView exclude) { + public static CardCollection chooseTapTypeAccumulatePower(final Player ai, final String type, final SpellAbility sa, + final boolean tap, final int amount, final CardCollectionView exclude) { // Used for Crewing vehicles, ideally we sort by useless creatures. Can't Attack/Defender int totalPower = 0; final Card activate = sa.getHostCard(); + int vehicleValue = 0; CardCollection all = new CardCollection(ai.getCardsIn(ZoneType.Battlefield)); all.removeAll(exclude); @@ -509,6 +513,9 @@ public class ComputerUtil { if (sa.hasParam("Crew")) { typeList = CardLists.getNotKeyword(typeList, "CARDNAME can't crew Vehicles."); + Card vehicle = CardFactory.copyCard(sa.getHostCard(), true); + AnimateAi.becomeAnimated(vehicle, false, sa); + vehicleValue = ComputerUtilCard.evaluateCreature(vehicle); } // is this needed? @@ -524,7 +531,7 @@ public class ComputerUtil { // Very very rudimentary for (Card next : typeList) { int pow = next.getNetPower(); - if (pow <= 0) { + if (pow <= 0 || ComputerUtilCard.evaluateCreature(next) > vehicleValue) { continue; } totalPower += pow;