diff --git a/projects/mtg/include/MTGCardInstance.h b/projects/mtg/include/MTGCardInstance.h index 8c64487de..c4af0024c 100644 --- a/projects/mtg/include/MTGCardInstance.h +++ b/projects/mtg/include/MTGCardInstance.h @@ -48,6 +48,7 @@ public: vectorparentCards; vectorchildrenCards; vectorcardsAbilities; + vectorcardsAbilitiesFilter; int setAttacker(int value); int setDefenser(MTGCardInstance * c); diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index 2de381334..635c0e8fa 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -1610,7 +1610,7 @@ int AACopier::resolve() if(source->isACopier) { source->GrantedAndAbility = andAbility; - AbilityFactory af(game); + //AbilityFactory af(game); for(unsigned int i = 0;i < source->cardsAbilities.size();i++) { MTGAbility * a = dynamic_cast(source->cardsAbilities[i]); @@ -1620,10 +1620,10 @@ int AACopier::resolve() source->cardsAbilities.clear(); source->magicText = _target->magicText; - af.getAbilities(¤tAbilities, NULL, source); - for (size_t i = 0; i < currentAbilities.size(); ++i) + //af.getAbilities(¤tAbilities, NULL, source); + for (size_t i = 0; i < source->cardsAbilitiesFilter.size(); ++i) { - MTGAbility * a = currentAbilities[i]; + MTGAbility * a = source->cardsAbilitiesFilter[i]; a->source = (MTGCardInstance *) source; if (a) { diff --git a/projects/mtg/src/MTGCardInstance.cpp b/projects/mtg/src/MTGCardInstance.cpp index 1f0e7962d..1dd74579b 100644 --- a/projects/mtg/src/MTGCardInstance.cpp +++ b/projects/mtg/src/MTGCardInstance.cpp @@ -141,6 +141,17 @@ void MTGCardInstance::copy(MTGCardInstance * card) int castMethodBackUP = this->castMethod; mtgid = source->getId(); MTGCardInstance * oldStored = this->storedSourceCard; + //test copy filtered + cardsAbilitiesFilter.clear(); + for(unsigned int i = 0;i < card->cardsAbilities.size();i++) + { + MTGAbility * a = dynamic_cast(card->cardsAbilities[i]); + if(a && a->source == card) + { + cardsAbilitiesFilter.push_back(a); + } + } + // /*if(!isPhased) { Spell * spell = NEW Spell(observer, this); @@ -297,6 +308,7 @@ void MTGCardInstance::initMTGCI() exileEffects = false; currentZone = NULL; cardsAbilities = vector(); + cardsAbilitiesFilter = vector(); data = this; //an MTGCardInstance point to itself for data, allows to update it without killing the underlying database item if (observer && basicAbilities[(int)Constants::CHANGELING])