diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index 8465cb5d3..d4d1a6059 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -1207,7 +1207,10 @@ public: WEventcardDraw * e = dynamic_cast (event); if (!e) return 0; if (!tc->canTarget(e->player)) return 0; - + if(source->controller() == e->player) + source->controllerTrigger = 1; + else + source->opponentTrigger = 1; return 1; } @@ -1315,6 +1318,18 @@ public: if (type == 2 && e->damage->typeOfDamage == Damage::DAMAGE_COMBAT) return 0; e->damage->target->thatmuch = e->damage->damage; e->damage->source->thatmuch = e->damage->damage; + if (e->damage->target->type_as_damageable == Damageable::DAMAGEABLE_PLAYER) + { + Player * p = (Player *) e->damage->target; + if(p && p == source->controller()->opponent()) + { + source->opponentTrigger = 1; + } + else + { + source->controllerTrigger = 1; + } + } this->source->thatmuch = e->damage->damage; triggeredTurn = game->turn; @@ -1354,6 +1369,10 @@ public: if (type == 1 && (e->amount > 0)) return 0; if (type == 0 && (e->amount < 0)) return 0; e->player->thatmuch = abs(e->amount); + if(source->controller() == e->player) + source->controllerTrigger = 1; + else + source->opponentTrigger = 1; this->source->thatmuch = abs(e->amount); return 1; diff --git a/projects/mtg/include/MTGCardInstance.h b/projects/mtg/include/MTGCardInstance.h index 5146b4940..d14270c99 100644 --- a/projects/mtg/include/MTGCardInstance.h +++ b/projects/mtg/include/MTGCardInstance.h @@ -253,6 +253,8 @@ public: int cardistargetted; bool isTargetter(); int cardistargetter; + int opponentTrigger; + int controllerTrigger; void eventattacked(); void eventattackedAlone(); diff --git a/projects/mtg/src/GameObserver.cpp b/projects/mtg/src/GameObserver.cpp index 72fcb8aca..e018016c1 100644 --- a/projects/mtg/src/GameObserver.cpp +++ b/projects/mtg/src/GameObserver.cpp @@ -593,15 +593,25 @@ void GameObserver::gameStateBasedEffects() ///////////////////////////////////// for (int d = 0; d < 2; d++) { - MTGGameZone * zone = players[d]->game->inPlay; - if (mLayers->stackLayer()->count(0, NOT_RESOLVED) == 0) - { - for (int c = zone->nb_cards - 1; c >= 0; c--) + MTGGameZone * dzones[] = { players[d]->game->inPlay, players[d]->game->graveyard, players[d]->game->hand, players[d]->game->library }; + for (int k = 0; k < 4; k++) + { + MTGGameZone * zone = dzones[k]; + if (mLayers->stackLayer()->count(0, NOT_RESOLVED) == 0) { - zone->cards[c]->cardistargetted = 0; - zone->cards[c]->cardistargetter = 0; + for (int c = zone->nb_cards - 1; c >= 0; c--) + { + zone->cards[c]->cardistargetted = 0; + zone->cards[c]->cardistargetter = 0; + } } - } + //clear trigger + for (int b = zone->nb_cards - 1; b >= 0; b--) + { + zone->cards[b]->controllerTrigger = 0; + zone->cards[b]->opponentTrigger = 0; + } + }//check for losers if its gameover call the statebased action players[d]->DeadLifeState(); } //////////////////////////////////// diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index 34f142492..dcb775d84 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -411,6 +411,20 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe } } + check = restriction[i].find("opponenttrigger"); + if(check != string::npos) + { + if(!card->opponentTrigger) + return 0; + } + + check = restriction[i].find("controllertrigger"); + if(check != string::npos) + { + if(!card->controllerTrigger) + return 0; + } + check = restriction[i].find("discarded"); if(check != string::npos) { diff --git a/projects/mtg/src/MTGCardInstance.cpp b/projects/mtg/src/MTGCardInstance.cpp index 140c4f5cf..5b12d88a1 100644 --- a/projects/mtg/src/MTGCardInstance.cpp +++ b/projects/mtg/src/MTGCardInstance.cpp @@ -65,6 +65,8 @@ MTGCardInstance::MTGCardInstance(MTGCard * card, MTGPlayerCards * arg_belongs_to LKItoughness = toughness; cardistargetted = 0; cardistargetter = 0; + opponentTrigger = 0; + controllerTrigger = 0; } MTGCardInstance * MTGCardInstance::createSnapShot()