mirror of
https://github.com/magefree/mage.git
synced 2025-12-22 19:41:59 -08:00
* Fixed that AI used activated abilities for Battlefield as the card was on hand (fix #588).
This commit is contained in:
parent
b3b51f9f1e
commit
54f0fd8fc1
5 changed files with 14 additions and 8 deletions
|
|
@ -13,7 +13,14 @@ public class ArrogantBloodlordTest extends CardTestPlayerBase {
|
||||||
// blocked trigger
|
// blocked trigger
|
||||||
@Test
|
@Test
|
||||||
public void testCardBlocked() {
|
public void testCardBlocked() {
|
||||||
|
// Arrogant Bloodlord
|
||||||
|
// 4/4
|
||||||
|
// Whenever Arrogant Bloodlord blocks or becomes blocked by a creature with power 1 or less,
|
||||||
|
// destroy Arrogant Bloodlord at end of combat.
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Arrogant Bloodlord");
|
addCard(Zone.BATTLEFIELD, playerA, "Arrogant Bloodlord");
|
||||||
|
// Wall of Air
|
||||||
|
// 1/5
|
||||||
|
// Defender, flying
|
||||||
addCard(Zone.BATTLEFIELD, playerB, "Wall of Air");
|
addCard(Zone.BATTLEFIELD, playerB, "Wall of Air");
|
||||||
|
|
||||||
attack(1, playerA, "Arrogant Bloodlord");
|
attack(1, playerA, "Arrogant Bloodlord");
|
||||||
|
|
@ -26,7 +33,7 @@ public class ArrogantBloodlordTest extends CardTestPlayerBase {
|
||||||
assertLife(playerB, 20);
|
assertLife(playerB, 20);
|
||||||
assertPermanentCount(playerA, "Arrogant Bloodlord", 0);
|
assertPermanentCount(playerA, "Arrogant Bloodlord", 0);
|
||||||
assertPermanentCount(playerB, "Wall of Air", 1);
|
assertPermanentCount(playerB, "Wall of Air", 1);
|
||||||
}
|
}
|
||||||
// blocks trigger
|
// blocks trigger
|
||||||
@Test
|
@Test
|
||||||
public void testCardBlocker() {
|
public void testCardBlocker() {
|
||||||
|
|
|
||||||
|
|
@ -133,7 +133,7 @@ public class AbilitiesImpl<T extends Ability> extends ArrayList<T> implements Ab
|
||||||
public Abilities<ActivatedAbility> getPlayableAbilities(Zone zone) {
|
public Abilities<ActivatedAbility> getPlayableAbilities(Zone zone) {
|
||||||
Abilities<ActivatedAbility> zonedAbilities = new AbilitiesImpl<>();
|
Abilities<ActivatedAbility> zonedAbilities = new AbilitiesImpl<>();
|
||||||
for (T ability: this) {
|
for (T ability: this) {
|
||||||
if (((ability instanceof SpellAbility) || (ability instanceof PlayLandAbility))
|
if ((ability instanceof ActivatedAbility || (ability instanceof PlayLandAbility))
|
||||||
&& ability.getZone().match(zone)) {
|
&& ability.getZone().match(zone)) {
|
||||||
zonedAbilities.add((ActivatedAbility)ability);
|
zonedAbilities.add((ActivatedAbility)ability);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ import mage.constants.Zone;
|
||||||
public abstract class EvasionAbility extends StaticAbility {
|
public abstract class EvasionAbility extends StaticAbility {
|
||||||
|
|
||||||
public EvasionAbility() {
|
public EvasionAbility() {
|
||||||
super(AbilityType.EVASION, Zone.BATTLEFIELD);
|
super(AbilityType.EVASION, Zone.ALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
public EvasionAbility(final EvasionAbility ability) {
|
public EvasionAbility(final EvasionAbility ability) {
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,6 @@ import mage.abilities.costs.CostsImpl;
|
||||||
import mage.abilities.costs.mana.GenericManaCost;
|
import mage.abilities.costs.mana.GenericManaCost;
|
||||||
import mage.abilities.costs.mana.ManaCost;
|
import mage.abilities.costs.mana.ManaCost;
|
||||||
import mage.abilities.costs.mana.ManaCosts;
|
import mage.abilities.costs.mana.ManaCosts;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
|
||||||
import mage.abilities.effects.ContinuousEffectImpl;
|
import mage.abilities.effects.ContinuousEffectImpl;
|
||||||
import mage.abilities.effects.common.continious.SourceEffect;
|
import mage.abilities.effects.common.continious.SourceEffect;
|
||||||
import mage.cards.Card;
|
import mage.cards.Card;
|
||||||
|
|
@ -131,7 +130,6 @@ public class MorphAbility extends StaticAbility implements AlternativeSourceCost
|
||||||
sb.append(REMINDER_TEXT);
|
sb.append(REMINDER_TEXT);
|
||||||
ruleText = sb.toString();
|
ruleText = sb.toString();
|
||||||
|
|
||||||
// alternateCosts.add(new AlternativeCost2Impl(ABILITY_KEYWORD, REMINDER_TEXT, new GenericManaCost(3)));
|
|
||||||
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BecomesFaceDownCreatureEffect(morphCosts));
|
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BecomesFaceDownCreatureEffect(morphCosts));
|
||||||
ability.setRuleVisible(false);
|
ability.setRuleVisible(false);
|
||||||
card.addAbility(ability);
|
card.addAbility(ability);
|
||||||
|
|
|
||||||
|
|
@ -2021,8 +2021,8 @@ public abstract class PlayerImpl implements Player, Serializable {
|
||||||
|
|
||||||
if (hidden) {
|
if (hidden) {
|
||||||
for (Card card : hand.getUniqueCards(game)) {
|
for (Card card : hand.getUniqueCards(game)) {
|
||||||
for (Ability ability : card.getAbilities()) {
|
for (Ability ability : card.getAbilities().getPlayableAbilities(Zone.HAND)) { // gets this activated ability from hand? (Morph?)
|
||||||
if (ability instanceof ActivatedAbility) {
|
if (ability instanceof ActivatedAbility) {
|
||||||
if (ability instanceof PlayLandAbility) {
|
if (ability instanceof PlayLandAbility) {
|
||||||
if (game.getContinuousEffects().preventedByRuleModification(GameEvent.getEvent(GameEvent.EventType.PLAY_LAND, ability.getSourceId(), ability.getSourceId(), playerId), ability, game, true)) {
|
if (game.getContinuousEffects().preventedByRuleModification(GameEvent.getEvent(GameEvent.EventType.PLAY_LAND, ability.getSourceId(), ability.getSourceId(), playerId), ability, game, true)) {
|
||||||
break;
|
break;
|
||||||
|
|
@ -2033,7 +2033,8 @@ public abstract class PlayerImpl implements Player, Serializable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ability instanceof AlternativeSourceCosts) {
|
if (ability instanceof AlternativeSourceCosts) {
|
||||||
|
// something missing here
|
||||||
|
int test = 6;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue