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