diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index 4e20da195..1abaf0276 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -1159,6 +1159,8 @@ public: { WEventCardTap * e = dynamic_cast (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; diff --git a/projects/mtg/include/MTGCardInstance.h b/projects/mtg/include/MTGCardInstance.h index eabdea192..8486582dc 100644 --- a/projects/mtg/include/MTGCardInstance.h +++ b/projects/mtg/include/MTGCardInstance.h @@ -222,7 +222,7 @@ public: int isUntapping(); int isTapped(); void untap(); - void tap(); + void tap(bool sendNoEvent = false); void attemptUntap(); //cda and other func diff --git a/projects/mtg/include/WEvent.h b/projects/mtg/include/WEvent.h index 677293e0c..1ee984ffa 100644 --- a/projects/mtg/include/WEvent.h +++ b/projects/mtg/include/WEvent.h @@ -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); }; diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index eb2d7e5bb..db7a3eedb 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -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; } diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index 9dfee7f4d..49eeab63a 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -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; } diff --git a/projects/mtg/src/MTGCardInstance.cpp b/projects/mtg/src/MTGCardInstance.cpp index 0e6bb1ea0..6d110cfe3 100644 --- a/projects/mtg/src/MTGCardInstance.cpp +++ b/projects/mtg/src/MTGCardInstance.cpp @@ -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(e)->noTrigger = true; observer->receiveEvent(e); } diff --git a/projects/mtg/src/MTGGameZones.cpp b/projects/mtg/src/MTGGameZones.cpp index c04e5d1f0..0f814c705 100644 --- a/projects/mtg/src/MTGGameZones.cpp +++ b/projects/mtg/src/MTGGameZones.cpp @@ -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) diff --git a/projects/mtg/src/WEvent.cpp b/projects/mtg/src/WEvent.cpp index bcf4041ad..8c7d1062e 100644 --- a/projects/mtg/src/WEvent.cpp +++ b/projects/mtg/src/WEvent.cpp @@ -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) :