revised copier copied abilities

the clone should copy original abilities only
This commit is contained in:
Anthony Calosa
2017-02-03 10:31:10 +08:00
parent dc696a0f45
commit 942c95e736
3 changed files with 17 additions and 4 deletions
+1
View File
@@ -48,6 +48,7 @@ public:
vector<MTGCardInstance*>parentCards; vector<MTGCardInstance*>parentCards;
vector<MTGCardInstance*>childrenCards; vector<MTGCardInstance*>childrenCards;
vector<MTGAbility *>cardsAbilities; vector<MTGAbility *>cardsAbilities;
vector<MTGAbility *>cardsAbilitiesFilter;
int setAttacker(int value); int setAttacker(int value);
int setDefenser(MTGCardInstance * c); int setDefenser(MTGCardInstance * c);
+4 -4
View File
@@ -1610,7 +1610,7 @@ int AACopier::resolve()
if(source->isACopier) if(source->isACopier)
{ {
source->GrantedAndAbility = andAbility; source->GrantedAndAbility = andAbility;
AbilityFactory af(game); //AbilityFactory af(game);
for(unsigned int i = 0;i < source->cardsAbilities.size();i++) for(unsigned int i = 0;i < source->cardsAbilities.size();i++)
{ {
MTGAbility * a = dynamic_cast<MTGAbility *>(source->cardsAbilities[i]); MTGAbility * a = dynamic_cast<MTGAbility *>(source->cardsAbilities[i]);
@@ -1620,10 +1620,10 @@ int AACopier::resolve()
source->cardsAbilities.clear(); source->cardsAbilities.clear();
source->magicText = _target->magicText; source->magicText = _target->magicText;
af.getAbilities(&currentAbilities, NULL, source); //af.getAbilities(&currentAbilities, NULL, source);
for (size_t i = 0; i < currentAbilities.size(); ++i) for (size_t i = 0; i < source->cardsAbilitiesFilter.size(); ++i)
{ {
MTGAbility * a = currentAbilities[i]; MTGAbility * a = source->cardsAbilitiesFilter[i];
a->source = (MTGCardInstance *) source; a->source = (MTGCardInstance *) source;
if (a) if (a)
{ {
+12
View File
@@ -141,6 +141,17 @@ void MTGCardInstance::copy(MTGCardInstance * card)
int castMethodBackUP = this->castMethod; int castMethodBackUP = this->castMethod;
mtgid = source->getId(); mtgid = source->getId();
MTGCardInstance * oldStored = this->storedSourceCard; MTGCardInstance * oldStored = this->storedSourceCard;
//test copy filtered
cardsAbilitiesFilter.clear();
for(unsigned int i = 0;i < card->cardsAbilities.size();i++)
{
MTGAbility * a = dynamic_cast<MTGAbility *>(card->cardsAbilities[i]);
if(a && a->source == card)
{
cardsAbilitiesFilter.push_back(a);
}
}
//
/*if(!isPhased) /*if(!isPhased)
{ {
Spell * spell = NEW Spell(observer, this); Spell * spell = NEW Spell(observer, this);
@@ -297,6 +308,7 @@ void MTGCardInstance::initMTGCI()
exileEffects = false; exileEffects = false;
currentZone = NULL; currentZone = NULL;
cardsAbilities = vector<MTGAbility *>(); cardsAbilities = vector<MTGAbility *>();
cardsAbilitiesFilter = vector<MTGAbility *>();
data = this; //an MTGCardInstance point to itself for data, allows to update it without killing the underlying database item 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]) if (observer && basicAbilities[(int)Constants::CHANGELING])