added a modifier for "tap" for cards that say "enters the battlefield tapped", they are supposed to be tapped when put in play, which mean they should not trigger @tapped(.
for cards with the line or options "do/pay MANA or this card enters the battlefield tapped" simply change it to tap(noevent) it will simulate the card being placed into play already tapped.
This commit is contained in:
@@ -1159,6 +1159,8 @@ public:
|
||||
{
|
||||
WEventCardTap * e = dynamic_cast<WEventCardTap *> (event);
|
||||
if (!e) return 0;
|
||||
if (e->noTrigger)
|
||||
return 0;
|
||||
if (e->before == e->after) return 0;
|
||||
if (e->after != tap) return 0;
|
||||
if (!tc->canTarget(e->card)) return 0;
|
||||
@@ -4361,7 +4363,8 @@ public:
|
||||
class AATapper: public ActivatedAbility
|
||||
{
|
||||
public:
|
||||
AATapper(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target, ManaCost * _cost = NULL);
|
||||
bool _sendNoEvent;
|
||||
AATapper(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target, ManaCost * _cost = NULL, bool _sendNoEvent = true);
|
||||
int resolve();
|
||||
const string getMenuText();
|
||||
AATapper * clone() const;
|
||||
|
||||
@@ -222,7 +222,7 @@ public:
|
||||
int isUntapping();
|
||||
int isTapped();
|
||||
void untap();
|
||||
void tap();
|
||||
void tap(bool sendNoEvent = false);
|
||||
void attemptUntap();
|
||||
|
||||
//cda and other func
|
||||
|
||||
@@ -127,6 +127,7 @@ struct WEventCardChangeType : public WEventCardUpdate {
|
||||
struct WEventCardTap : public WEventCardUpdate {
|
||||
bool before;
|
||||
bool after;
|
||||
bool noTrigger;
|
||||
WEventCardTap(MTGCardInstance * card, bool before, bool after);
|
||||
virtual Targetable * getTarget(int target);
|
||||
};
|
||||
|
||||
@@ -4334,8 +4334,8 @@ ABestow * ABestow::clone() const
|
||||
}
|
||||
|
||||
//Tapper
|
||||
AATapper::AATapper(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target, ManaCost * _cost) :
|
||||
ActivatedAbility(observer, id, card, _cost, 0)
|
||||
AATapper::AATapper(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target, ManaCost * _cost, bool sendNoEvent) :
|
||||
ActivatedAbility(observer, id, card, _cost, 0),_sendNoEvent(sendNoEvent)
|
||||
{
|
||||
target = _target;
|
||||
aType = MTGAbility::TAPPER;
|
||||
@@ -4348,7 +4348,7 @@ int AATapper::resolve()
|
||||
{
|
||||
while (_target->next)
|
||||
_target = _target->next; //This is for cards such as rampant growth
|
||||
_target->tap();
|
||||
_target->tap(_sendNoEvent);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -3575,7 +3575,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
|
||||
found = s.find("tap");
|
||||
if (found != string::npos)
|
||||
{
|
||||
MTGAbility * a = NEW AATapper(observer, id, card, target);
|
||||
MTGAbility * a = NEW AATapper(observer, id, card, target, NULL, bool(s.find("tap(noevent)") != string::npos));
|
||||
a->oneShot = 1;
|
||||
return a;
|
||||
}
|
||||
|
||||
@@ -467,12 +467,14 @@ void MTGCardInstance::eventblocked(MTGCardInstance * opponent)
|
||||
}
|
||||
|
||||
//Taps the card
|
||||
void MTGCardInstance::tap()
|
||||
void MTGCardInstance::tap(bool sendNoEvent)
|
||||
{
|
||||
if (tapped)
|
||||
return;
|
||||
tapped = 1;
|
||||
WEvent * e = NEW WEventCardTap(this, 0, 1);
|
||||
if (sendNoEvent)
|
||||
dynamic_cast<WEventCardTap*>(e)->noTrigger = true;
|
||||
observer->receiveEvent(e);
|
||||
}
|
||||
|
||||
|
||||
@@ -364,7 +364,7 @@ MTGCardInstance * MTGPlayerCards::putInZone(MTGCardInstance * card, MTGGameZone
|
||||
to = g->players[i]->game->exile;
|
||||
}
|
||||
|
||||
|
||||
//close the currently open MAIN display.
|
||||
if (from == g->players[i]->game->library || from == g->players[i]->game->graveyard || from == g->players[i]->game->exile)
|
||||
{
|
||||
if (g->guiOpenDisplay)
|
||||
|
||||
@@ -56,6 +56,7 @@ WEvent(CHANGE_PHASE), from(from), to(to)
|
||||
WEventCardTap::WEventCardTap(MTGCardInstance * card, bool before, bool after) :
|
||||
WEventCardUpdate(card), before(before), after(after)
|
||||
{
|
||||
noTrigger = false;
|
||||
}
|
||||
|
||||
WEventCardTappedForMana::WEventCardTappedForMana(MTGCardInstance * card, bool before, bool after) :
|
||||
|
||||
Reference in New Issue
Block a user