- Improved detection of combat death in AttachAi for flash auras.

This commit is contained in:
Agetian
2018-11-22 19:39:45 +03:00
parent 64d47560dc
commit 2e0177fc08

View File

@@ -27,6 +27,7 @@ import forge.game.staticability.StaticAbility;
import forge.game.trigger.Trigger; import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerType; import forge.game.trigger.TriggerType;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.util.Aggregates;
import forge.util.MyRandom; import forge.util.MyRandom;
import java.util.ArrayList; import java.util.ArrayList;
@@ -192,6 +193,29 @@ public class AttachAi extends SpellAbilityAi {
} }
} }
boolean canSurviveCombat = true;
if (combat != null && combat.isBlocked(attachTarget)) {
if (!attachTarget.hasKeyword(Keyword.INDESTRUCTIBLE) && !ComputerUtil.canRegenerate(ai, attachTarget)) {
boolean dangerous = false;
int totalAtkPower = 0;
for (Card attacker : combat.getBlockers(attachTarget)) {
if (attacker.hasKeyword(Keyword.DEATHTOUCH) || attacker.hasKeyword(Keyword.INFECT)
|| attacker.hasKeyword(Keyword.WITHER)) {
dangerous = true;
}
totalAtkPower += attacker.getNetPower();
}
if (totalAtkPower > attachTarget.getNetToughness() + toughness || dangerous) {
canSurviveCombat = false;
}
}
}
if (!canSurviveCombat) {
// don't buff anything that will die or get seriously crippled in combat
return false;
}
int chanceToCastAtEOT = aic.getIntProperty(AiProps.FLASH_BUFF_AURA_CHANCE_CAST_AT_EOT); int chanceToCastAtEOT = aic.getIntProperty(AiProps.FLASH_BUFF_AURA_CHANCE_CAST_AT_EOT);
int chanceToCastEarly = aic.getIntProperty(AiProps.FLASH_BUFF_AURA_CHANCE_TO_CAST_EARLY); int chanceToCastEarly = aic.getIntProperty(AiProps.FLASH_BUFF_AURA_CHANCE_TO_CAST_EARLY);
int chanceToRespondToStack = aic.getIntProperty(AiProps.FLASH_BUFF_AURA_CHANCE_TO_RESPOND_TO_STACK); int chanceToRespondToStack = aic.getIntProperty(AiProps.FLASH_BUFF_AURA_CHANCE_TO_RESPOND_TO_STACK);