From c28c14171f49fe24dedcc8b159d8e4cb2d96c968 Mon Sep 17 00:00:00 2001 From: "wagic.the.homebrew@gmail.com" Date: Tue, 7 Dec 2010 14:12:04 +0000 Subject: [PATCH] Erwan -fix for issue 489 (protection prevents some triggers to happen) --- projects/mtg/bin/Res/test/_tests.txt | 1 + .../mtg/bin/Res/test/{bugs => }/souls_attendant_i489.txt | 0 projects/mtg/src/MTGAbility.cpp | 6 ++++-- projects/mtg/src/TargetChooser.cpp | 9 ++++++--- 4 files changed, 11 insertions(+), 5 deletions(-) rename projects/mtg/bin/Res/test/{bugs => }/souls_attendant_i489.txt (100%) diff --git a/projects/mtg/bin/Res/test/_tests.txt b/projects/mtg/bin/Res/test/_tests.txt index 99235a632..cdfab77e5 100644 --- a/projects/mtg/bin/Res/test/_tests.txt +++ b/projects/mtg/bin/Res/test/_tests.txt @@ -469,6 +469,7 @@ sleeper_agent.txt slith_bloodletter.txt sneak_attack.txt soulblast.txt +souls_attendant_i489.txt spark_elemental.txt sphinx_summoner.txt spirit_link.txt diff --git a/projects/mtg/bin/Res/test/bugs/souls_attendant_i489.txt b/projects/mtg/bin/Res/test/souls_attendant_i489.txt similarity index 100% rename from projects/mtg/bin/Res/test/bugs/souls_attendant_i489.txt rename to projects/mtg/bin/Res/test/souls_attendant_i489.txt diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index a78f3d8a3..9d9e8da2d 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -137,9 +137,10 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string magicText, int found = end + 1; } toTcCard->setAllZones(); + toTcCard->targetter = NULL; //avoid protection from starget = starget.substr(found, end - found).insert(0, "*|"); toTc = tcf.createTargetChooser(starget, card); - toTc->targetter = NULL; + toTc->targetter = NULL; //avoid protection from TargetChooser *fromTc = NULL; TargetChooser * fromTcCard = NULL; @@ -158,10 +159,11 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string magicText, int found = end + 1; } fromTcCard->setAllZones(); + fromTcCard->targetter=NULL; //avoid protection from end = s.find(")", found); starget = s.substr(found, end - found).insert(0, "*|"); fromTc = tcf.createTargetChooser(starget, card); - fromTc->targetter = NULL; + fromTc->targetter = NULL; //avoid protection from } return NEW TrCardAddedToZone(id, card, (TargetZoneChooser *) toTc, toTcCard, (TargetZoneChooser *) fromTc, fromTcCard); } diff --git a/projects/mtg/src/TargetChooser.cpp b/projects/mtg/src/TargetChooser.cpp index 3a848f397..a19977d57 100644 --- a/projects/mtg/src/TargetChooser.cpp +++ b/projects/mtg/src/TargetChooser.cpp @@ -540,9 +540,12 @@ bool TargetChooser::canTarget(Targetable * target) tempcard = tempcard->previous; } } - if (source && targetter && card->isInPlay() && (card->has(Constants::SHROUD) || card->protectedAgainst(targetter))) return false; - if (source && targetter && card->isInPlay() && (targetter->controller() != card->controller()) && (card->has( - Constants::OPPONENTSHROUD) || card->protectedAgainst(targetter))) return false; + if (source && targetter && card->isInPlay()) + { + if (card->has(Constants::SHROUD)) return false; + if (card->protectedAgainst(targetter)) return false; + if ((targetter->controller() != card->controller()) && card->has(Constants::OPPONENTSHROUD)) return false; + } return true; } else if (target->typeAsTarget() == TARGET_STACKACTION) return true;