force event for token sacrifice

This commit is contained in:
Anthony Calosa
2016-07-27 07:11:30 +08:00
parent 2971e64182
commit 014ca36a4a
5 changed files with 36 additions and 25 deletions
+2
View File
@@ -1370,6 +1370,8 @@ public:
{ {
WEventCardSacrifice * e = dynamic_cast<WEventCardSacrifice *> (event); WEventCardSacrifice * e = dynamic_cast<WEventCardSacrifice *> (event);
if (!e) return 0; if (!e) return 0;
if (e->istoken)
return 1;
MTGCardInstance * check = e->cardAfter; MTGCardInstance * check = e->cardAfter;
MTGGameZone * oldZone = e->cardAfter->currentZone; MTGGameZone * oldZone = e->cardAfter->currentZone;
check->currentZone = check->previousZone; check->currentZone = check->previousZone;
+2 -1
View File
@@ -184,7 +184,8 @@ struct WEventCardBlocked : public WEventCardUpdate {
//event when card is sacrificed. //event when card is sacrificed.
struct WEventCardSacrifice : public WEventCardUpdate { struct WEventCardSacrifice : public WEventCardUpdate {
MTGCardInstance * cardAfter; MTGCardInstance * cardAfter;
WEventCardSacrifice(MTGCardInstance * card,MTGCardInstance * afterCard); bool istoken;
WEventCardSacrifice(MTGCardInstance * card,MTGCardInstance * afterCard, bool token = false);
virtual Targetable * getTarget(int target); virtual Targetable * getTarget(int target);
}; };
+5 -1
View File
@@ -2704,10 +2704,14 @@ int AASacrificeCard::resolve()
{ {
Player * p = _target->controller(); Player * p = _target->controller();
MTGCardInstance * beforeCard = _target; MTGCardInstance * beforeCard = _target;
WEvent * e;
if(!_target->isToken)
e = NEW WEventCardSacrifice(beforeCard,_target);
else
e = NEW WEventCardSacrifice(beforeCard,_target,true);
p->game->putInGraveyard(_target); p->game->putInGraveyard(_target);
while(_target->next) while(_target->next)
_target = _target->next; _target = _target->next;
WEvent * e = NEW WEventCardSacrifice(beforeCard,_target);
game->receiveEvent(e); game->receiveEvent(e);
if(andAbility) if(andAbility)
{ {
+5 -1
View File
@@ -1288,8 +1288,12 @@ int SacrificeCost::doPay()
{ {
MTGCardInstance * beforeCard = target; MTGCardInstance * beforeCard = target;
source->storedCard = target->createSnapShot(); source->storedCard = target->createSnapShot();
WEvent * e;
if(!target->isToken)
e = NEW WEventCardSacrifice(beforeCard,target);
else
e = NEW WEventCardSacrifice(beforeCard,target,true);
target->controller()->game->putInGraveyard(target); target->controller()->game->putInGraveyard(target);
WEvent * e = NEW WEventCardSacrifice(beforeCard,target);
GameObserver * game = target->owner->getObserver(); GameObserver * game = target->owner->getObserver();
game->receiveEvent(e); game->receiveEvent(e);
target = NULL; target = NULL;
+2 -2
View File
@@ -99,8 +99,8 @@ player(player), nb_cards(nb_cards),drawAbility(cardDraw)
{ {
} }
WEventCardSacrifice::WEventCardSacrifice(MTGCardInstance * card, MTGCardInstance * after) : WEventCardSacrifice::WEventCardSacrifice(MTGCardInstance * card, MTGCardInstance * after, bool token) :
WEventCardUpdate(card),cardAfter(after) WEventCardUpdate(card),cardAfter(after),istoken(token)
{ {
} }