added "turnlimited" restriction for blocked, blocking, combatdamaged, and damaged triggers.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user