persist/undying fix

persist/undying wont trigger when there is a replacement effect for
cards that goes to graveyard like leyline of the void. support  for
anafenza the foremost.
This commit is contained in:
Anthony Calosa
2015-10-19 19:43:07 +08:00
parent b060c4205c
commit 0d8b2f4a01
5 changed files with 11 additions and 3 deletions

View File

@@ -2744,8 +2744,8 @@ toughness=2
[/card]
[card]
name=Anafenza, the Foremost
abilities=oppgcreatureexiler
auto=@combat(attacking) source(this):counter(1/1,1) target(other creature[tapped]|mybattlefield)
auto=@movedTo(creature|opponentGraveyard):all(trigger[to]) moveTo(exile)
text=When Anafenza, the Foremost attacks, put a +1/+1 counter on another target tapped creature you control. -- If a creature card would be put into an opponent's graveyard from anywhere, exile it instead.
mana={W}{B}{G}
type=Legendary Creature

View File

@@ -232,7 +232,9 @@ class Constants
AURAWARD = 114,
MADNESS = 115,
PROTECTIONFROMCOLOREDSPELLS = 116,
NB_BASIC_ABILITIES = 117,
MYGCREATUREEXILER = 117,
OPPGCREATUREEXILER = 118,
NB_BASIC_ABILITIES = 119,
RARITY_S = 'S', //Special Rarity

View File

@@ -145,7 +145,9 @@ const char* Constants::MTGBasicAbilities[] = {
"nolifegainopponent",
"auraward",
"madness",
"protectionfromcoloredspells"
"protectionfromcoloredspells",
"mygcreatureexiler",
"oppgcreatureexiler"
};
map<string,int> Constants::MTGBasicAbilitiesMap;

View File

@@ -349,6 +349,8 @@ MTGCardInstance * MTGPlayerCards::putInZone(MTGCardInstance * card, MTGGameZone
for(int i = 0; i < 2; ++i)
{
if ((to == g->players[i]->game->graveyard) && (
(g->players[i]->game->battlefield->hasAbility(Constants::MYGCREATUREEXILER) && card->isCreature()) ||
(g->players[i]->opponent()->game->battlefield->hasAbility(Constants::OPPGCREATUREEXILER) && card->isCreature())||
g->players[i]->game->battlefield->hasAbility(Constants::MYGRAVEEXILER) ||
g->players[i]->opponent()->game->battlefield->hasAbility(Constants::OPPGRAVEEXILER)))
{

View File

@@ -2276,6 +2276,8 @@ int MTGPersistRule::receiveEvent(WEvent * event)
if (e->from == p->game->inPlay)
ok = 1;
}
if ((card->owner->game->battlefield->hasAbility(Constants::MYGRAVEEXILER)||card->owner->opponent()->game->battlefield->hasAbility(Constants::OPPGRAVEEXILER)) || ((card->owner->game->battlefield->hasAbility(Constants::MYGCREATUREEXILER)||card->owner->opponent()->game->battlefield->hasAbility(Constants::OPPGCREATUREEXILER) && card->isCreature())))
ok = 0;
if (!ok)
return 0;