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

View File

@@ -383,9 +383,12 @@ class TrCardAttackedBlocked: public TriggeredAbility
public:
TargetChooser * tc;
TargetChooser * fromTc;
TrCardAttackedBlocked(int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL) :
TriggeredAbility(id, source), tc(tc), fromTc(fromTc)
bool limitOnceATurn;
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()
@@ -398,10 +401,14 @@ public:
if(source->isPhased) return 0;
WEventCardAttackedBlocked * e = dynamic_cast<WEventCardAttackedBlocked *> (event);
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->blocked) return 0;
if (fromTc && !fromTc->canTarget(e->card->getNextOpponent())) return 0;
if (!tc->canTarget(e->card)) return 0;
triggeredTurn = g->turn;
return 1;
}
@@ -505,10 +512,13 @@ public:
TargetChooser * fromTc;
bool once;
bool activeTrigger;
TrCardBlocked(int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL,bool once = false) :
TriggeredAbility(id, source), tc(tc), fromTc(fromTc), once(once)
bool limitOnceATurn;
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()
@@ -523,11 +533,14 @@ public:
if (!e) return 0;
if(activeTrigger == false)
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 (!tc->canTarget(e->card)) return 0;
if(once && activeTrigger )
activeTrigger = false;
triggeredTurn = g->turn;
return 1;
}
@@ -657,9 +670,12 @@ public:
TargetChooser * fromTc;
int type;//this allows damagenoncombat and combatdamage to share this trigger
bool sourceUntapped;
TrDamaged(int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL, int type = 0,bool sourceUntapped = false) :
TriggeredAbility(id, source), tc(tc), fromTc(fromTc), type(type) , sourceUntapped(sourceUntapped)
bool limitOnceATurn;
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()
@@ -672,6 +688,9 @@ public:
if(source->isPhased) return 0;
WEventDamage * e = dynamic_cast<WEventDamage *> (event);
if (!e) return 0;
GameObserver * g = GameObserver::GetInstance();
if (limitOnceATurn && triggeredTurn == g->turn)
return 0;
if (sourceUntapped && source->isTapped() == 1)
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;
e->damage->target->thatmuch = e->damage->damage;
e->damage->source->thatmuch = e->damage->damage;
triggeredTurn = g->turn;
return 1;
}

View File

@@ -314,6 +314,7 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string magicText, int
bool opponentPoisoned = false;
bool lifelost = false;
int lifeamount = 0;
bool limitOnceATurn = false;
found = s.find("once");
if (found != string::npos)
{
@@ -346,6 +347,12 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string magicText, int
{
opponentPoisoned = true;
}
found = s.find("turnlimited");
if ( found != string::npos)
{
limitOnceATurn = true;
}
//Card Changed Zone
found = s.find("movedto(");
if (found != string::npos)
@@ -496,7 +503,7 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string magicText, int
fromTc->targetter = NULL;
}
return NEW TrCardAttackedBlocked(id, card, tc, fromTc);
return NEW TrCardAttackedBlocked(id, card, tc, fromTc,limitOnceATurn);
}
//Card card is a blocker
@@ -519,7 +526,7 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string magicText, int
fromTc->targetter = NULL;
}
return NEW TrCardBlocked(id, card, tc, fromTc,once);
return NEW TrCardBlocked(id, card, tc, fromTc,once,limitOnceATurn);
}
//Card card is drawn
@@ -602,7 +609,7 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string magicText, int
fromTc = tcf.createTargetChooser(starget, card);
fromTc->targetter = NULL;
}
return NEW TrDamaged(id, card, tc, fromTc, 1);
return NEW TrDamaged(id, card, tc, fromTc, 1,sourceUntapped,limitOnceATurn);
}
//Card Damaging
@@ -624,7 +631,7 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string magicText, int
fromTc = tcf.createTargetChooser(starget, card);
fromTc->targetter = NULL;
}
return NEW TrDamaged(id, card, tc, fromTc, 0,sourceUntapped);
return NEW TrDamaged(id, card, tc, fromTc, 0,sourceUntapped,limitOnceATurn);
}
//Card Damaging