revised fix for copier

This commit is contained in:
Anthony Calosa
2016-08-13 20:12:55 +08:00
parent 71aedfd96d
commit 27145bdabe
3 changed files with 52 additions and 14 deletions

View File

@@ -1470,17 +1470,40 @@ int AACopier::resolve()
source->copy(_target->clone());
else
{
if(!_target->isACopier)
source->copy(_target);
else
source->copy(_target);
}
//abilities
for(unsigned int i = 0;i < source->cardsAbilities.size();i++)
{
MTGAbility * a = dynamic_cast<MTGAbility *>(source->cardsAbilities[i]);
if(a) game->removeObserver(a);
}
source->cardsAbilities.clear();
af.getAbilities(&currentAbilities, NULL, source);
for (size_t i = 0; i < currentAbilities.size(); ++i)
{
MTGAbility * a = currentAbilities[i];
a->source = (MTGCardInstance *) source;
if (a)
{
source->copy(_target);
source->power -= _target->pbonus;
source->toughness -= _target->tbonus;
source->life = source->toughness;
if (a->oneShot)
{
a->resolve();
SAFE_DELETE(a);
}
else
{
a->addToGame();
MayAbility * dontAdd = dynamic_cast<MayAbility*>(a);
if(!dontAdd)
{
source->cardsAbilities.push_back(a);
}
}
}
}
//
source->isACopier = true;
source->hasCopiedToken = tokencopied;
source->copiedID = _target->copiedID;
@@ -3213,6 +3236,12 @@ int AAFlip::resolve()
MTGCardInstance * _target = (MTGCardInstance *) target;
if (_target)
{
if(((_target->isACopier||_target->isToken) && !isflipcard) || _target->has(Constants::CANTTRANSFORM))
{
game->removeObserver(this);
return 0;
}
while (_target->next)
_target = _target->next;

View File

@@ -402,7 +402,8 @@ void CardGui::Render()
mFont->SetColor(ARGB(static_cast<unsigned char>(actA),255,255,255));//white default
mFont->SetScale(actZ);
mFont->SetScale(actZ);
mFont->DrawString(buffer, actX - 10 * actZ, actY + 7 * actZ);
float halfbufferW = (mFont->GetStringWidth(buffer))/2;
mFont->DrawString(buffer, actX - halfbufferW * actZ, actY + 7 * actZ);
mFont->SetScale(1);
}

View File

@@ -96,10 +96,16 @@ MTGCardInstance::MTGCardInstance(MTGCard * card, MTGPlayerCards * arg_belongs_to
void MTGCardInstance::copy(MTGCardInstance * card)
{
//MTGCard * source = card->model;
MTGCard * source = card;
MTGCard * source = NULL;
if(card->isToken || card->hasCopiedToken)
{
source = card;
}
else
source = MTGCollection()->getCardById(card->copiedID);
CardPrimitive * data = source->data;
basicAbilities = card->model->data->basicAbilities;
basicAbilities = data->basicAbilities;
for (size_t i = 0; i < data->types.size(); i++)
{
types.push_back(data->types[i]);
@@ -121,17 +127,19 @@ void MTGCardInstance::copy(MTGCardInstance * card)
magicText = data->magicText;
spellTargetType = data->spellTargetType;
alias = data->alias;
copiedID = card->copiedID;
doubleFaced = data->doubleFaced;
//Now this is dirty...
int backupid = mtgid;
int castMethodBackUP = this->castMethod;
mtgid = source->getId();
MTGCardInstance * oldStored = this->storedSourceCard;
Spell * spell = NEW Spell(observer, this);
/*Spell * spell = NEW Spell(observer, this);
observer = card->observer;
AbilityFactory af(observer);
af.addAbilities(observer->mLayers->actionLayer()->getMaxId(), spell);
delete spell;
delete spell;*/
if(observer->players[1]->playMode == Player::MODE_TEST_SUITE)
mtgid = backupid; // there must be a way to get the token id...
else