added "turnlimited" restriction for blocked, blocking, combatdamaged, and damaged triggers.

This commit is contained in:
omegablast2002@yahoo.com
2011-02-10 19:50:09 +00:00
parent 93c63cef3d
commit 25fe86ad89
2 changed files with 39 additions and 12 deletions
+28 -8
View File
@@ -383,9 +383,12 @@ class TrCardAttackedBlocked: public TriggeredAbility
public: public:
TargetChooser * tc; TargetChooser * tc;
TargetChooser * fromTc; TargetChooser * fromTc;
TrCardAttackedBlocked(int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL) : bool limitOnceATurn;
TriggeredAbility(id, source), tc(tc), fromTc(fromTc) int triggeredTurn;
TrCardAttackedBlocked(int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL,bool limitOnceATurn = false) :
TriggeredAbility(id, source), tc(tc), fromTc(fromTc),limitOnceATurn(limitOnceATurn)
{ {
triggeredTurn = -1;
} }
int resolve() int resolve()
@@ -398,10 +401,14 @@ public:
if(source->isPhased) return 0; if(source->isPhased) return 0;
WEventCardAttackedBlocked * e = dynamic_cast<WEventCardAttackedBlocked *> (event); WEventCardAttackedBlocked * e = dynamic_cast<WEventCardAttackedBlocked *> (event);
if (!e) return 0; if (!e) return 0;
GameObserver * g = GameObserver::GetInstance();
if (limitOnceATurn && triggeredTurn == g->turn)
return 0;
if (e->card->didattacked < 1) return 0; if (e->card->didattacked < 1) return 0;
if (!e->card->blocked) return 0; if (!e->card->blocked) return 0;
if (fromTc && !fromTc->canTarget(e->card->getNextOpponent())) return 0; if (fromTc && !fromTc->canTarget(e->card->getNextOpponent())) return 0;
if (!tc->canTarget(e->card)) return 0; if (!tc->canTarget(e->card)) return 0;
triggeredTurn = g->turn;
return 1; return 1;
} }
@@ -505,10 +512,13 @@ public:
TargetChooser * fromTc; TargetChooser * fromTc;
bool once; bool once;
bool activeTrigger; bool activeTrigger;
TrCardBlocked(int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL,bool once = false) : bool limitOnceATurn;
TriggeredAbility(id, source), tc(tc), fromTc(fromTc), once(once) int triggeredTurn;
TrCardBlocked(int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL,bool once = false,bool limitOnceATurn = false) :
TriggeredAbility(id, source), tc(tc), fromTc(fromTc), once(once),limitOnceATurn(limitOnceATurn)
{ {
activeTrigger = true; activeTrigger = true;
triggeredTurn = -1;
} }
int resolve() int resolve()
@@ -523,11 +533,14 @@ public:
if (!e) return 0; if (!e) return 0;
if(activeTrigger == false) if(activeTrigger == false)
return 0; return 0;
//if(e->card->didblocked < 1) return 0; GameObserver * g = GameObserver::GetInstance();
if (limitOnceATurn && triggeredTurn == g->turn)
return 0;
if (fromTc && !fromTc->canTarget(e->card->getNextOpponent())) return 0; if (fromTc && !fromTc->canTarget(e->card->getNextOpponent())) return 0;
if (!tc->canTarget(e->card)) return 0; if (!tc->canTarget(e->card)) return 0;
if(once && activeTrigger ) if(once && activeTrigger )
activeTrigger = false; activeTrigger = false;
triggeredTurn = g->turn;
return 1; return 1;
} }
@@ -657,9 +670,12 @@ public:
TargetChooser * fromTc; TargetChooser * fromTc;
int type;//this allows damagenoncombat and combatdamage to share this trigger int type;//this allows damagenoncombat and combatdamage to share this trigger
bool sourceUntapped; bool sourceUntapped;
TrDamaged(int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL, int type = 0,bool sourceUntapped = false) : bool limitOnceATurn;
TriggeredAbility(id, source), tc(tc), fromTc(fromTc), type(type) , sourceUntapped(sourceUntapped) int triggeredTurn;
TrDamaged(int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL, int type = 0,bool sourceUntapped = false,bool limitOnceATurn = false) :
TriggeredAbility(id, source), tc(tc), fromTc(fromTc), type(type) , sourceUntapped(sourceUntapped),limitOnceATurn(limitOnceATurn)
{ {
triggeredTurn = -1;
} }
int resolve() int resolve()
@@ -672,6 +688,9 @@ public:
if(source->isPhased) return 0; if(source->isPhased) return 0;
WEventDamage * e = dynamic_cast<WEventDamage *> (event); WEventDamage * e = dynamic_cast<WEventDamage *> (event);
if (!e) return 0; if (!e) return 0;
GameObserver * g = GameObserver::GetInstance();
if (limitOnceATurn && triggeredTurn == g->turn)
return 0;
if (sourceUntapped && source->isTapped() == 1) if (sourceUntapped && source->isTapped() == 1)
return 0; return 0;
if (!tc->canTarget(e->damage->target)) return 0; if (!tc->canTarget(e->damage->target)) return 0;
@@ -680,6 +699,7 @@ public:
if (type == 2 && e->damage->typeOfDamage == DAMAGE_COMBAT) return 0; if (type == 2 && e->damage->typeOfDamage == DAMAGE_COMBAT) return 0;
e->damage->target->thatmuch = e->damage->damage; e->damage->target->thatmuch = e->damage->damage;
e->damage->source->thatmuch = e->damage->damage; e->damage->source->thatmuch = e->damage->damage;
triggeredTurn = g->turn;
return 1; return 1;
} }
+11 -4
View File
@@ -314,6 +314,7 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string magicText, int
bool opponentPoisoned = false; bool opponentPoisoned = false;
bool lifelost = false; bool lifelost = false;
int lifeamount = 0; int lifeamount = 0;
bool limitOnceATurn = false;
found = s.find("once"); found = s.find("once");
if (found != string::npos) if (found != string::npos)
{ {
@@ -346,6 +347,12 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string magicText, int
{ {
opponentPoisoned = true; opponentPoisoned = true;
} }
found = s.find("turnlimited");
if ( found != string::npos)
{
limitOnceATurn = true;
}
//Card Changed Zone //Card Changed Zone
found = s.find("movedto("); found = s.find("movedto(");
if (found != string::npos) if (found != string::npos)
@@ -496,7 +503,7 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string magicText, int
fromTc->targetter = NULL; fromTc->targetter = NULL;
} }
return NEW TrCardAttackedBlocked(id, card, tc, fromTc); return NEW TrCardAttackedBlocked(id, card, tc, fromTc,limitOnceATurn);
} }
//Card card is a blocker //Card card is a blocker
@@ -519,7 +526,7 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string magicText, int
fromTc->targetter = NULL; fromTc->targetter = NULL;
} }
return NEW TrCardBlocked(id, card, tc, fromTc,once); return NEW TrCardBlocked(id, card, tc, fromTc,once,limitOnceATurn);
} }
//Card card is drawn //Card card is drawn
@@ -602,7 +609,7 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string magicText, int
fromTc = tcf.createTargetChooser(starget, card); fromTc = tcf.createTargetChooser(starget, card);
fromTc->targetter = NULL; fromTc->targetter = NULL;
} }
return NEW TrDamaged(id, card, tc, fromTc, 1); return NEW TrDamaged(id, card, tc, fromTc, 1,sourceUntapped,limitOnceATurn);
} }
//Card Damaging //Card Damaging
@@ -624,7 +631,7 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string magicText, int
fromTc = tcf.createTargetChooser(starget, card); fromTc = tcf.createTargetChooser(starget, card);
fromTc->targetter = NULL; fromTc->targetter = NULL;
} }
return NEW TrDamaged(id, card, tc, fromTc, 0,sourceUntapped); return NEW TrDamaged(id, card, tc, fromTc, 0,sourceUntapped,limitOnceATurn);
} }
//Card Damaging //Card Damaging