add restriction for checking what alternative cost was paid. combined with if/ifnot ability becomes a very powerful tool.

paid(blah)
auto=if paid(alternative) then damage:3 target(creature)
auto=if paid(alternative) then life:10 target(player)
auto=ifnot paid(alternative) then damage:3 controller
auto=ifnot paid(alternative) then life:4 opponent

it can be used any place a restriction can be used. 
rearranged the constants for the payment type keywords to match the order we int the alternatePayment array on a card, added keywords for the remaining payment types, 

    "notpaid",
    "paidmana",
the 2 above pretain to paying the real manacost of a card
it checks the mana={1} cost line and is not joined to the other types.

    "kicker", 
    "alternative", 
    "buyback", 
    "flashback", 
    "retrace", 
    "facedown",
    "suspended"

note: all test pass in this revision.
This commit is contained in:
omegablast2002@yahoo.com
2013-01-15 02:11:05 +00:00
parent 9201860744
commit a26f872ff3
5 changed files with 56 additions and 6 deletions

View File

@@ -29,10 +29,29 @@ const int kMaxCastZones[] = { MTGGameZone::BATTLEFIELD, MTGGameZone::STACK};
const size_t kMaxCastKeywordsCount = 2;
//Used for alternate Costs parsing
const string kAlternateCostKeywords[] = { "kicker", "retrace", "alternative", "buyback", "flashback", "facedown"};
const int kAlternateCostIds[] = {
ManaCost::MANA_PAID_WITH_KICKER, ManaCost::MANA_PAID_WITH_RETRACE, ManaCost::MANA_PAID_WITH_ALTERNATIVE,
ManaCost::MANA_PAID_WITH_BUYBACK, ManaCost::MANA_PAID_WITH_FLASHBACK, ManaCost::MANA_PAID_WITH_MORPH
const string kAlternateCostKeywords[] =
{
"notpaid",
"paidmana",
"kicker",
"alternative",
"buyback",
"flashback",
"retrace",
"facedown",
"suspended"
};
const int kAlternateCostIds[] =
{
ManaCost::MANA_UNPAID,
ManaCost::MANA_PAID,
ManaCost::MANA_PAID_WITH_KICKER,
ManaCost::MANA_PAID_WITH_ALTERNATIVE,
ManaCost::MANA_PAID_WITH_BUYBACK,
ManaCost::MANA_PAID_WITH_FLASHBACK,
ManaCost::MANA_PAID_WITH_RETRACE,
ManaCost::MANA_PAID_WITH_MORPH,
ManaCost::MANA_PAID_WITH_SUSPEND
};
//Used for "dynamic ability" parsing
@@ -353,6 +372,26 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
{
restriction.push_back("type(creature|mybattlefield)~lessthan~type(creature|opponentbattlefield)");
}
check = restriction[i].find("paid(");
if(check != string::npos)
{
vector<string>getPaid = parseBetween(restriction[i].c_str(),"paid(",")");
string paid = getPaid[1];
for (size_t j = 0; j < sizeof(kAlternateCostIds)/sizeof(kAlternateCostIds[0]); ++j)
{
string keyword = kAlternateCostKeywords[j];
if (paid.find(keyword) != string::npos)
{
if (!(card->alternateCostPaid[j] > 0 ))
{
return 0;
}
}
}
}
}
return 1;
}