fixed Issue 819, changed the parsing of and(()) to and!()!, i no longer share the storedstring of transformer, so you can ability$!transforms(( now....
This commit is contained in:
@@ -445,6 +445,7 @@ class AbilityFactory
|
||||
{
|
||||
private:
|
||||
string storedString;
|
||||
string storedAbilityString;
|
||||
string storedAndAbility;
|
||||
int countCards(TargetChooser * tc, Player * player = NULL, int option = 0);
|
||||
TriggeredAbility * parseTrigger(string s, string magicText, int id, Spell * spell, MTGCardInstance *card, Targetable * target);
|
||||
|
||||
@@ -217,8 +217,9 @@ class Constants
|
||||
NOACTIVATEDTAP = 96,
|
||||
NOMANA = 97,
|
||||
ONLYMANA = 98,
|
||||
POISONDAMAGER = 99,
|
||||
|
||||
NB_BASIC_ABILITIES = 99,
|
||||
NB_BASIC_ABILITIES = 100,
|
||||
|
||||
|
||||
RARITY_S = 'S', //Special Rarity
|
||||
|
||||
@@ -146,7 +146,7 @@ int Damage::resolve()
|
||||
if(_target->toughness <= 0 && _target->has(Constants::INDESTRUCTIBLE))
|
||||
_target->controller()->game->putInGraveyard(_target);
|
||||
}
|
||||
else if (target->type_as_damageable == DAMAGEABLE_PLAYER && source->has(Constants::INFECT))
|
||||
else if (target->type_as_damageable == DAMAGEABLE_PLAYER && (source->has(Constants::INFECT)||source->has(Constants::POISONDAMAGER)))
|
||||
{
|
||||
// Poison on player
|
||||
Player * _target = (Player *) target;
|
||||
|
||||
@@ -1014,18 +1014,18 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
|
||||
{
|
||||
size_t real_end = s.find("!$", found);
|
||||
size_t sIndex = found + 9;
|
||||
storedString.append(s.substr(sIndex, real_end - sIndex).c_str());
|
||||
storedAbilityString.append(s.substr(sIndex, real_end - sIndex).c_str());
|
||||
s.erase(sIndex, real_end - sIndex);
|
||||
}
|
||||
|
||||
found = s.find("and((");
|
||||
found = s.find("and!(");
|
||||
if (found != string::npos && found + 6 != ')' && storedAndAbility.empty())
|
||||
{
|
||||
vector<string> splitAnd = parseBetween(s, "and((", " ))",false);
|
||||
vector<string> splitAnd = parseBetween(s, "and!(", ")!",false);
|
||||
if(splitAnd.size())
|
||||
{
|
||||
storedAndAbility.append(splitAnd[1]);
|
||||
size_t real_end = s.find("))", found);
|
||||
size_t real_end = s.find(")!", found);
|
||||
size_t sIndex = found + 5;
|
||||
s.erase(sIndex, real_end - sIndex);
|
||||
}
|
||||
@@ -1779,9 +1779,9 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
|
||||
//ability creator the target has to do the ability.
|
||||
if(s.find("ability$") != string::npos)
|
||||
{
|
||||
if (storedString.size())
|
||||
if (storedAbilityString.size())
|
||||
{
|
||||
ATargetedAbilityCreator * abl = NEW ATargetedAbilityCreator(observer, id, card,target, NULL,newName, storedString, who);
|
||||
ATargetedAbilityCreator * abl = NEW ATargetedAbilityCreator(observer, id, card,target, NULL,newName, storedAbilityString, who);
|
||||
abl->oneShot = 1;
|
||||
storedString.clear();
|
||||
return abl;
|
||||
|
||||
@@ -127,7 +127,8 @@ const char* Constants::MTGBasicAbilities[] = {
|
||||
"noactivatedability",
|
||||
"notapability",
|
||||
"nomanaability",
|
||||
"onlymanaability"
|
||||
"onlymanaability",
|
||||
"poisondamager"//deals damage to players as poison counters.
|
||||
};
|
||||
|
||||
map<string,int> Constants::MTGBasicAbilitiesMap;
|
||||
|
||||
Reference in New Issue
Block a user