From d604ae2d77b6fb4f2ccad2a790c3c5d1dd7515bb Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Mon, 13 Feb 2017 07:49:37 +0800 Subject: [PATCH] add gravecast restriction if gravecast then do something -> translates when this card was cast from a graveyard --- projects/mtg/src/AllAbilities.cpp | 2 +- projects/mtg/src/MTGAbility.cpp | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index 6277fd3a6..852777726 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -4389,7 +4389,7 @@ AAMover::AAMover(GameObserver* observer, int _id, MTGCardInstance * _source, MTG if (_target) target = _target; andAbility = NULL; - if(destination.size() && !named.size() && source->controller()->isAI()) + if(destination.size() && !named.size()) { if(destination.find("library") != string::npos) named = "Put in Library"; diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index d9cfc823b..adbeeb958 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -314,6 +314,21 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe return 0; } } + check = restriction[i].find("gravecast"); + if(check != string::npos) + { + int count = 0; + for(unsigned int k = 0; k < player->game->stack->cardsSeenThisTurn.size(); k++) + { + MTGCardInstance * stackCard = player->game->stack->cardsSeenThisTurn[k]; + if(stackCard->next && stackCard->next == card && (card->previousZone == card->controller()->game->graveyard||card->previousZone == card->controller()->opponent()->game->graveyard)) + count++; + if(stackCard == card && (card->previousZone == card->controller()->game->graveyard||card->previousZone == card->controller()->opponent()->game->graveyard)) + count++; + } + if(!count) + return 0; + } check = restriction[i].find("rebound"); if(check != string::npos) { @@ -321,9 +336,9 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe for(unsigned int k = 0; k < player->game->stack->cardsSeenThisTurn.size(); k++) { MTGCardInstance * stackCard = player->game->stack->cardsSeenThisTurn[k]; - if(stackCard->next && stackCard->next == card && card->previousZone == card->controller()->game->hand) + if(stackCard->next && stackCard->next == card && (card->previousZone == card->controller()->game->hand||card->previousZone == card->controller()->opponent()->game->hand)) count++; - if(stackCard == card && card->previousZone == card->controller()->game->hand) + if(stackCard == card && (card->previousZone == card->controller()->game->hand||card->previousZone == card->controller()->opponent()->game->hand)) count++; } if(!count)