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
+37 -8
View File
@@ -1470,17 +1470,40 @@ int AACopier::resolve()
source->copy(_target->clone()); source->copy(_target->clone());
else else
{ {
if(!_target->isACopier) source->copy(_target);
source->copy(_target); }
else //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); if (a->oneShot)
source->power -= _target->pbonus; {
source->toughness -= _target->tbonus; a->resolve();
source->life = source->toughness; SAFE_DELETE(a);
}
else
{
a->addToGame();
MayAbility * dontAdd = dynamic_cast<MayAbility*>(a);
if(!dontAdd)
{
source->cardsAbilities.push_back(a);
}
}
} }
} }
//
source->isACopier = true; source->isACopier = true;
source->hasCopiedToken = tokencopied; source->hasCopiedToken = tokencopied;
source->copiedID = _target->copiedID; source->copiedID = _target->copiedID;
@@ -3213,6 +3236,12 @@ int AAFlip::resolve()
MTGCardInstance * _target = (MTGCardInstance *) target; MTGCardInstance * _target = (MTGCardInstance *) target;
if (_target) if (_target)
{ {
if(((_target->isACopier||_target->isToken) && !isflipcard) || _target->has(Constants::CANTTRANSFORM))
{
game->removeObserver(this);
return 0;
}
while (_target->next) while (_target->next)
_target = _target->next; _target = _target->next;
+2 -1
View File
@@ -402,7 +402,8 @@ void CardGui::Render()
mFont->SetColor(ARGB(static_cast<unsigned char>(actA),255,255,255));//white default mFont->SetColor(ARGB(static_cast<unsigned char>(actA),255,255,255));//white default
mFont->SetScale(actZ); mFont->SetScale(actZ);
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); mFont->SetScale(1);
} }
+13 -5
View File
@@ -96,10 +96,16 @@ MTGCardInstance::MTGCardInstance(MTGCard * card, MTGPlayerCards * arg_belongs_to
void MTGCardInstance::copy(MTGCardInstance * card) void MTGCardInstance::copy(MTGCardInstance * card)
{ {
//MTGCard * source = card->model; MTGCard * source = NULL;
MTGCard * source = card; if(card->isToken || card->hasCopiedToken)
{
source = card;
}
else
source = MTGCollection()->getCardById(card->copiedID);
CardPrimitive * data = source->data; CardPrimitive * data = source->data;
basicAbilities = card->model->data->basicAbilities; basicAbilities = data->basicAbilities;
for (size_t i = 0; i < data->types.size(); i++) for (size_t i = 0; i < data->types.size(); i++)
{ {
types.push_back(data->types[i]); types.push_back(data->types[i]);
@@ -121,17 +127,19 @@ void MTGCardInstance::copy(MTGCardInstance * card)
magicText = data->magicText; magicText = data->magicText;
spellTargetType = data->spellTargetType; spellTargetType = data->spellTargetType;
alias = data->alias; alias = data->alias;
copiedID = card->copiedID;
doubleFaced = data->doubleFaced;
//Now this is dirty... //Now this is dirty...
int backupid = mtgid; int backupid = mtgid;
int castMethodBackUP = this->castMethod; int castMethodBackUP = this->castMethod;
mtgid = source->getId(); mtgid = source->getId();
MTGCardInstance * oldStored = this->storedSourceCard; MTGCardInstance * oldStored = this->storedSourceCard;
Spell * spell = NEW Spell(observer, this); /*Spell * spell = NEW Spell(observer, this);
observer = card->observer; observer = card->observer;
AbilityFactory af(observer); AbilityFactory af(observer);
af.addAbilities(observer->mLayers->actionLayer()->getMaxId(), spell); af.addAbilities(observer->mLayers->actionLayer()->getMaxId(), spell);
delete spell; delete spell;*/
if(observer->players[1]->playMode == Player::MODE_TEST_SUITE) if(observer->players[1]->playMode == Player::MODE_TEST_SUITE)
mtgid = backupid; // there must be a way to get the token id... mtgid = backupid; // there must be a way to get the token id...
else else