andAbility on ATokenCreator, Extend AAFlip,
This commit is contained in:
@@ -1462,16 +1462,31 @@ int AACopier::resolve()
|
||||
if (_target)
|
||||
{
|
||||
MTGCard* clone ;
|
||||
if(_target->isToken || (_target->isACopier && _target->hasCopiedToken))
|
||||
if((_target->isToken || _target->isACopier) && _target->hasCopiedToken)
|
||||
{
|
||||
clone = _target;
|
||||
tokencopied = true;
|
||||
}
|
||||
else
|
||||
clone = MTGCollection()->getCardById(_target->copiedID);
|
||||
MTGCardInstance * myClone = NEW MTGCardInstance(clone, source->controller()->game);
|
||||
source->copy(myClone);
|
||||
SAFE_DELETE(myClone);
|
||||
|
||||
if(tokencopied)
|
||||
{
|
||||
MTGCardInstance * myClone = NEW MTGCardInstance(clone, source->controller()->game);
|
||||
source->copy(myClone);
|
||||
SAFE_DELETE(myClone);
|
||||
}
|
||||
else
|
||||
{/*********************************************
|
||||
* instead of using source->copy(myClone) use *
|
||||
* AAFlip with forcedcopy to true *
|
||||
*********************************************/
|
||||
AAFlip * af = NEW AAFlip(game, game->mLayers->actionLayer()->getMaxId(), source, source, clone->data->name, false, true);
|
||||
af->oneShot;
|
||||
af->canBeInterrupted = false;
|
||||
af->resolve();
|
||||
SAFE_DELETE(af);
|
||||
}
|
||||
source->isACopier = true;
|
||||
source->hasCopiedToken = tokencopied;
|
||||
source->copiedID = _target->copiedID;
|
||||
@@ -3155,8 +3170,8 @@ AAMeld * AAMeld::clone() const
|
||||
}
|
||||
|
||||
// flip a card
|
||||
AAFlip::AAFlip(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target,string flipStats, bool isflipcard) :
|
||||
InstantAbility(observer, id, card, _target),flipStats(flipStats),isflipcard(isflipcard)
|
||||
AAFlip::AAFlip(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target,string flipStats, bool isflipcard, bool forcedcopy) :
|
||||
InstantAbility(observer, id, card, _target),flipStats(flipStats),isflipcard(isflipcard),forcedcopy(forcedcopy)
|
||||
{
|
||||
target = _target;
|
||||
}
|
||||
@@ -3179,7 +3194,7 @@ int AAFlip::resolve()
|
||||
MTGCardInstance * _target = (MTGCardInstance *) target;
|
||||
if (_target)
|
||||
{
|
||||
if((_target->isACopier||_target->isToken) && !isflipcard)
|
||||
if((_target->isACopier||_target->isToken) && !isflipcard && !forcedcopy)
|
||||
{
|
||||
game->removeObserver(this);
|
||||
return 0;
|
||||
@@ -3208,9 +3223,20 @@ int AAFlip::resolve()
|
||||
_target->types = myFlip->types;
|
||||
_target->text = myFlip->text;
|
||||
_target->formattedText = myFlip->formattedText;
|
||||
_target->basicAbilities = myFlip->basicAbilities;
|
||||
//_target->basicAbilities = myFlip->basicAbilities;
|
||||
for(int k = 0; k < Constants::NB_BASIC_ABILITIES; k++)
|
||||
{
|
||||
if(myFlip->model->data->basicAbilities[k])
|
||||
_target->basicAbilities[k] = myFlip->model->data->basicAbilities[k];
|
||||
}
|
||||
_target->modbasicAbilities = myFlip->modbasicAbilities;
|
||||
cdaDamage = _target->damageCount;
|
||||
_target->copiedID = myFlip->getMTGId();//for copier
|
||||
if(forcedcopy && _target->owner->playMode != Player::MODE_TEST_SUITE)
|
||||
{
|
||||
_target->setMTGId(myFlip->getMTGId());
|
||||
_target->setId = myFlip->setId;
|
||||
}
|
||||
for(unsigned int i = 0;i < _target->cardsAbilities.size();i++)
|
||||
{
|
||||
MTGAbility * a = dynamic_cast<MTGAbility *>(_target->cardsAbilities[i]);
|
||||
|
||||
@@ -2381,6 +2381,13 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
|
||||
|
||||
ATokenCreator * tok = NEW ATokenCreator(observer, id, card,target, NULL, tokenId, starfound, multiplier, who);
|
||||
tok->oneShot = 1;
|
||||
//andability
|
||||
if(storedAndAbility.size())
|
||||
{
|
||||
string stored = storedAndAbility;
|
||||
storedAndAbility.clear();
|
||||
((ATokenCreator*)tok)->andAbility = parseMagicLine(stored, id, spell, card);
|
||||
}
|
||||
return tok;
|
||||
}
|
||||
|
||||
@@ -2395,6 +2402,13 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
|
||||
{
|
||||
ATokenCreator * tok = NEW ATokenCreator(observer, id, card, target, NULL, cardName, starfound, multiplier, who);
|
||||
tok->oneShot = 1;
|
||||
//andability
|
||||
if(storedAndAbility.size())
|
||||
{
|
||||
string stored = storedAndAbility;
|
||||
storedAndAbility.clear();
|
||||
((ATokenCreator*)tok)->andAbility = parseMagicLine(stored, id, spell, card);
|
||||
}
|
||||
return tok;
|
||||
}
|
||||
}
|
||||
@@ -2431,6 +2445,13 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
|
||||
tok->oneShot = 1;
|
||||
if(aLivingWeapon)
|
||||
tok->forceDestroy = 1;
|
||||
//andability
|
||||
if(storedAndAbility.size())
|
||||
{
|
||||
string stored = storedAndAbility;
|
||||
storedAndAbility.clear();
|
||||
((ATokenCreator*)tok)->andAbility = parseMagicLine(stored, id, spell, card);
|
||||
}
|
||||
return tok;
|
||||
}
|
||||
|
||||
|
||||
@@ -104,7 +104,7 @@ void MTGCardInstance::copy(MTGCardInstance * card)
|
||||
if(card->model->data->basicAbilities[k])
|
||||
basicAbilities[k] = card->model->data->basicAbilities[k];
|
||||
}
|
||||
|
||||
modbasicAbilities = card->modbasicAbilities;
|
||||
for (size_t i = 0; i < data->types.size(); i++)
|
||||
{
|
||||
types.push_back(data->types[i]);
|
||||
@@ -141,9 +141,9 @@ void MTGCardInstance::copy(MTGCardInstance * card)
|
||||
mtgid = backupid; // there must be a way to get the token id...
|
||||
else
|
||||
{
|
||||
mtgid = card->getMTGId(); ///////////////////////////////////////////////////
|
||||
setId = card->setId; // Copier/Cloner cards produces the same token...//
|
||||
rarity = card->getRarity(); ///////////////////////////////////////////////////
|
||||
mtgid = card->getMTGId(); ///////////////////////////////////////////////////
|
||||
setId = card->setId; // Copier/Cloner cards produces the same token...//
|
||||
//rarity = card->getRarity(); ///////////////////////////////////////////////////
|
||||
}
|
||||
castMethod = castMethodBackUP;
|
||||
backupTargets = this->backupTargets;
|
||||
@@ -611,7 +611,7 @@ int MTGCardInstance::hasSummoningSickness()
|
||||
{
|
||||
if (!summoningSickness)
|
||||
return 0;
|
||||
if (basicAbilities[(int)Constants::HASTE])
|
||||
if (has(Constants::HASTE))
|
||||
return 0;
|
||||
if (!isCreature())
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user