Add Snapcaster Mage Ability

tempflashback - flashback using manacost
This commit is contained in:
Anthony Calosa
2016-07-26 09:56:13 +08:00
parent 07b5f35b98
commit ae33977e10
8 changed files with 98 additions and 23 deletions
+1
View File
@@ -1176,6 +1176,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
if(found != string::npos)
{
observer->addObserver(NEW MTGFlashBackRule(observer, -1));
observer->addObserver(NEW MTGTempFlashBackRule(observer, -1));
return NULL;
}
//alternative cost type flashback
+2 -1
View File
@@ -166,7 +166,8 @@ const char* Constants::MTGBasicAbilities[] = {
"dethrone",
"overload",
"shackler",
"flyersonly"
"flyersonly",
"tempflashback"
};
map<string,int> Constants::MTGBasicAbilitiesMap;
+49
View File
@@ -1056,6 +1056,55 @@ MTGFlashBackRule * MTGFlashBackRule::clone() const
return NEW MTGFlashBackRule(*this);
}
//temporary flashback
MTGTempFlashBackRule::MTGTempFlashBackRule(GameObserver* observer, int _id) :
MTGAlternativeCostRule(observer, _id)
{
aType = MTGAbility::GRANTEDFLASHBACK_COST;
}
int MTGTempFlashBackRule::isReactingToClick(MTGCardInstance * card, ManaCost * mana)
{
Player * player = game->currentlyActing();
if (!player->game->graveyard->hasCard(card))
return 0;
if (!card->has(Constants::TEMPFLASHBACK))
return 0;
ManaCost * flashbackCost = card->getManaCost();
if(flashbackCost->extraCosts)
for(unsigned int i = 0; i < flashbackCost->extraCosts->costs.size();i++)
{
flashbackCost->extraCosts->costs[i]->setSource(card);
}
return MTGAlternativeCostRule::isReactingToClick(card, mana, flashbackCost );
}
int MTGTempFlashBackRule::reactToClick(MTGCardInstance * card)
{
ManaCost * flashbackCost = card->getManaCost();
if(flashbackCost->extraCosts)
for(unsigned int i = 0; i < flashbackCost->extraCosts->costs.size();i++)
{
flashbackCost->extraCosts->costs[i]->setSource(card);
}
if (!isReactingToClick(card))
return 0;
card->paymenttype = MTGAbility::FLASHBACK_COST;
return MTGAlternativeCostRule::reactToClick(card, flashbackCost, ManaCost::MANA_PAID_WITH_FLASHBACK);
}
ostream& MTGTempFlashBackRule::toString(ostream& out) const
{
out << "MTGTempFlashBackRule ::: (";
return MTGAbility::toString(out) << ")";
}
MTGTempFlashBackRule * MTGTempFlashBackRule::clone() const
{
return NEW MTGTempFlashBackRule(*this);
}
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------