mirror of
https://github.com/correl/mage.git
synced 2024-12-24 11:50:45 +00:00
* Myth Unbound - Fixed the two working abilities(fixe #5347).
This commit is contained in:
parent
15ba067be5
commit
e938f91e3e
5 changed files with 133 additions and 8 deletions
|
@ -80,7 +80,7 @@ class MythUnboundCostReductionEffect extends CostModificationEffectImpl {
|
||||||
public boolean apply(Game game, Ability source, Ability abilityToModify) {
|
public boolean apply(Game game, Ability source, Ability abilityToModify) {
|
||||||
Ability spellAbility = abilityToModify;
|
Ability spellAbility = abilityToModify;
|
||||||
if (spellAbility != null) {
|
if (spellAbility != null) {
|
||||||
Integer amount = (Integer) game.getState().getValue(abilityToModify.getControllerId() + "_castCount");
|
Integer amount = (Integer) game.getState().getValue(abilityToModify.getSourceId() + "_castCount");
|
||||||
if (amount != null && amount > 0) {
|
if (amount != null && amount > 0) {
|
||||||
CardUtil.reduceCost(spellAbility, amount);
|
CardUtil.reduceCost(spellAbility, amount);
|
||||||
return true;
|
return true;
|
||||||
|
@ -99,7 +99,7 @@ class MythUnboundCostReductionEffect extends CostModificationEffectImpl {
|
||||||
if (abilityToModify.isControlledBy(source.getControllerId())) {
|
if (abilityToModify.isControlledBy(source.getControllerId())) {
|
||||||
Spell spell = (Spell) game.getStack().getStackObject(abilityToModify.getId());
|
Spell spell = (Spell) game.getStack().getStackObject(abilityToModify.getId());
|
||||||
if (spell != null) {
|
if (spell != null) {
|
||||||
return player.getCommandersIds().contains(spell.getId());
|
return player.getCommandersIds().contains(spell.getSourceId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
77
Mage.Tests/CommanderOviya.dck
Normal file
77
Mage.Tests/CommanderOviya.dck
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
NAME:Oviya Test Deck
|
||||||
|
1 [C14:56] Loreseeker's Stone
|
||||||
|
1 [C14:54] Commander's Sphere
|
||||||
|
1 [C14:53] Assault Suit
|
||||||
|
1 [C14:52] Wolfcaller's Howl
|
||||||
|
1 [C14:51] Wave of Vitriol
|
||||||
|
1 [C14:50] Titania, Protector of Argoth
|
||||||
|
1 [C14:305] Oran-Rief, the Vastwood
|
||||||
|
1 [C14:227] Wren's Run Packmaster
|
||||||
|
1 [C14:226] Wood Elves
|
||||||
|
1 [C14:225] Wolfbriar Elemental
|
||||||
|
1 [C14:302] Jungle Basin
|
||||||
|
1 [C14:268] Skullclamp
|
||||||
|
1 [C14:224] Whirlwind
|
||||||
|
1 [C14:301] Havenwood Battleground
|
||||||
|
1 [C14:223] Wellwisher
|
||||||
|
1 [C14:267] Seer's Sundial
|
||||||
|
1 [C14:300] Haunted Fengraf
|
||||||
|
1 [C14:189] Drove of Elves
|
||||||
|
1 [C14:222] Tornado Elemental
|
||||||
|
1 [C14:221] Titania's Chosen
|
||||||
|
1 [C14:188] Desert Twister
|
||||||
|
1 [C14:220] Timberwatch Elf
|
||||||
|
1 [C14:187] Collective Unconscious
|
||||||
|
1 [C14:263] Predator, Flagship
|
||||||
|
1 [C14:186] Beastmaster Ascension
|
||||||
|
1 [C14:61] Myriad Landscape
|
||||||
|
1 [C14:316] Tranquil Thicket
|
||||||
|
1 [C14:315] Terramorphic Expanse
|
||||||
|
1 [C14:237] Emerald Medallion
|
||||||
|
1 [C14:311] Slippery Karst
|
||||||
|
1 [C14:199] Harrow
|
||||||
|
1 [C14:275] Swiftfoot Boots
|
||||||
|
1 [C14:198] Grim Flowering
|
||||||
|
1 [C14:197] Fresh Meat
|
||||||
|
1 [C14:196] Farhaven Elf
|
||||||
|
1 [C14:195] Ezuri, Renegade Leader
|
||||||
|
1 [C14:194] Essence Warden
|
||||||
|
1 [C14:193] Elvish Visionary
|
||||||
|
1 [C14:270] Sol Ring
|
||||||
|
1 [C14:192] Elvish Skysweeper
|
||||||
|
1 [C14:191] Elvish Mystic
|
||||||
|
1 [C14:190] Elvish Archdruid
|
||||||
|
1 [C14:209] Praetor's Counsel
|
||||||
|
1 [C14:208] Overwhelming Stampede
|
||||||
|
1 [C14:207] Overrun
|
||||||
|
1 [C14:206] Masked Admirers
|
||||||
|
1 [C14:205] Lys Alana Huntmaster
|
||||||
|
1 [C14:204] Llanowar Elves
|
||||||
|
1 [C14:203] Joraga Warcaller
|
||||||
|
1 [C14:202] Imperious Perfect
|
||||||
|
1 [C14:201] Immaculate Magistrate
|
||||||
|
1 [C14:289] Crystal Vein
|
||||||
|
1 [C14:200] Hunting Triad
|
||||||
|
1 [C14:45] Lifeblood Hydra
|
||||||
|
1 [C14:44] Grave Sifter
|
||||||
|
1 [C14:42] Creeperhulk
|
||||||
|
1 [C14:219] Thornweald Archer
|
||||||
|
1 [C14:49] Thunderfoot Baloth
|
||||||
|
1 [C14:218] Terastodon
|
||||||
|
1 [C14:217] Sylvan Safekeeper
|
||||||
|
1 [C14:48] Sylvan Offering
|
||||||
|
1 [C14:216] Sylvan Ranger
|
||||||
|
1 [C14:47] Song of the Dryads
|
||||||
|
1 [C14:215] Soul of the Harvest
|
||||||
|
1 [C14:46] Siege Behemoth
|
||||||
|
1 [C14:214] Silklash Spider
|
||||||
|
1 [C14:213] Reclamation Sage
|
||||||
|
25 [C14:334] Forest
|
||||||
|
1 [C14:212] Rampaging Baloths
|
||||||
|
1 [C14:211] Primordial Sage
|
||||||
|
1 [C14:210] Priest of Titania
|
||||||
|
1 [C14:298] Ghost Quarter
|
||||||
|
1 [C14:297] Gargoyle Castle
|
||||||
|
1 [C14:252] Moss Diamond
|
||||||
|
1 [C14:295] Evolving Wilds
|
||||||
|
SB: 1 [KLD:165] Oviya Pashiri, Sage Lifecrafter
|
|
@ -1,11 +1,9 @@
|
||||||
|
|
||||||
package org.mage.test.commander;
|
package org.mage.test.commander;
|
||||||
|
|
||||||
import mage.cards.Card;
|
import mage.cards.Card;
|
||||||
import mage.cards.repository.CardInfo;
|
import mage.cards.repository.CardInfo;
|
||||||
import mage.cards.repository.CardRepository;
|
import mage.cards.repository.CardRepository;
|
||||||
import mage.filter.FilterMana;
|
import mage.filter.FilterMana;
|
||||||
import mage.util.CardUtil;
|
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.mage.test.serverside.base.CardTestCommander3PlayersFFA;
|
import org.mage.test.serverside.base.CardTestCommander3PlayersFFA;
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
package org.mage.test.commander.duel;
|
||||||
|
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import mage.constants.PhaseStep;
|
||||||
|
import mage.constants.Zone;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.game.GameException;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.mage.test.serverside.base.CardTestCommanderDuelBase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author LevelX2
|
||||||
|
*/
|
||||||
|
public class MythUnboundTest extends CardTestCommanderDuelBase {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Game createNewGameAndPlayers() throws GameException, FileNotFoundException {
|
||||||
|
// Karador, Ghost Chieftain costs {1} less to cast for each creature card in your graveyard.
|
||||||
|
// During each of your turns, you may cast one creature card from your graveyard.
|
||||||
|
setDecknamePlayerA("CommanderOviya.dck"); // Commander = Oviya Pashiri, Sage Lifecrafter {G}
|
||||||
|
setDecknamePlayerB("CMDNorinTheWary.dck");
|
||||||
|
|
||||||
|
return super.createNewGameAndPlayers();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void castCommanderTwice() {
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, "Forest", 4);
|
||||||
|
// Your commander costs {1} less to cast for each time it's been cast from the command zone this game.
|
||||||
|
// Whenever your commander is put into the command zone from anywhere, draw a card.
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, "Myth Unbound", 1); // Enchantment {2}{G}
|
||||||
|
|
||||||
|
addCard(Zone.BATTLEFIELD, playerB, "Mountain", 2);
|
||||||
|
addCard(Zone.HAND, playerB, "Lightning Bolt", 1);
|
||||||
|
|
||||||
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Oviya Pashiri, Sage Lifecrafter");
|
||||||
|
|
||||||
|
castSpell(1, PhaseStep.BEGIN_COMBAT, playerB, "Lightning Bolt", "Oviya Pashiri, Sage Lifecrafter");
|
||||||
|
|
||||||
|
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Oviya Pashiri, Sage Lifecrafter");
|
||||||
|
setStopAt(1, PhaseStep.END_TURN);
|
||||||
|
execute();
|
||||||
|
|
||||||
|
assertPermanentCount(playerA, "Myth Unbound", 1);
|
||||||
|
assertGraveyardCount(playerB, "Lightning Bolt", 1);
|
||||||
|
assertPermanentCount(playerA, "Oviya Pashiri, Sage Lifecrafter", 1);
|
||||||
|
assertHandCount(playerA, 1);
|
||||||
|
assertTappedCount("Forest", false, 1);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,3 @@
|
||||||
|
|
||||||
|
|
||||||
package mage.abilities.common;
|
package mage.abilities.common;
|
||||||
|
|
||||||
import mage.abilities.TriggeredAbilityImpl;
|
import mage.abilities.TriggeredAbilityImpl;
|
||||||
|
@ -50,8 +48,9 @@ public class ZoneChangeAllTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean checkTrigger(GameEvent event, Game game) {
|
public boolean checkTrigger(GameEvent event, Game game) {
|
||||||
ZoneChangeEvent zEvent = (ZoneChangeEvent)event;
|
ZoneChangeEvent zEvent = (ZoneChangeEvent) event;
|
||||||
if ((fromZone == null || zEvent.getFromZone() == fromZone) && (toZone == null || zEvent.getToZone() == toZone)) {
|
if ((fromZone == null || fromZone.match(zEvent.getFromZone()))
|
||||||
|
&& (toZone == null || toZone.match(zEvent.getToZone()))) {
|
||||||
Permanent perm;
|
Permanent perm;
|
||||||
if (zEvent.getTarget() != null) {
|
if (zEvent.getTarget() != null) {
|
||||||
perm = zEvent.getTarget();
|
perm = zEvent.getTarget();
|
||||||
|
|
Loading…
Reference in a new issue