added Prowl support.
example usage:
other={1}{B} name(Prowl)
otherrestriction=prowl
This commit is contained in:
@@ -42,6 +42,7 @@ public:
|
||||
int skippingTurn;
|
||||
int extraTurn;
|
||||
int drawCounter;
|
||||
vector<string> prowledTypes;
|
||||
vector<MTGCardInstance*>curses;
|
||||
Player(GameObserver *observer, string deckFile, string deckFileSmall, MTGDeck * deck = NULL);
|
||||
virtual ~Player();
|
||||
|
||||
@@ -153,6 +153,15 @@ int Damage::resolve()
|
||||
if(!_target->inPlay()->hasAbility(Constants::POISONSHROUD))
|
||||
_target->poisonCount += damage;//this will be changed to poison counters.
|
||||
_target->damageCount += damage;
|
||||
if ( typeOfDamage == 1 && target == source->controller()->opponent() )//add vector prowledtypes.
|
||||
{
|
||||
vector<string> values = MTGAllCards::getCreatureValuesById();
|
||||
for (size_t i = 0; i < values.size(); ++i)
|
||||
{
|
||||
if ( source->hasSubtype( values[i] ) && find(source->controller()->prowledTypes.begin(), source->controller()->prowledTypes.end(), values[i])==source->controller()->prowledTypes.end() )
|
||||
source->controller()->prowledTypes.push_back(values[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (target->type_as_damageable == DAMAGEABLE_PLAYER && (source->has(Constants::POISONTOXIC) ||
|
||||
source->has(Constants::POISONTWOTOXIC) || source->has(Constants::POISONTHREETOXIC)))
|
||||
@@ -161,6 +170,15 @@ int Damage::resolve()
|
||||
Player * _target = (Player *) target;
|
||||
a = target->dealDamage(damage);
|
||||
target->damageCount += damage;
|
||||
if ( typeOfDamage == 1 && target == source->controller()->opponent() )//add vector prowledtypes.
|
||||
{
|
||||
vector<string> values = MTGAllCards::getCreatureValuesById();
|
||||
for (size_t i = 0; i < values.size(); ++i)
|
||||
{
|
||||
if ( source->hasSubtype( values[i] ) && find(source->controller()->prowledTypes.begin(), source->controller()->prowledTypes.end(), values[i])==source->controller()->prowledTypes.end() )
|
||||
source->controller()->prowledTypes.push_back(values[i]);
|
||||
}
|
||||
}
|
||||
if(!_target->inPlay()->hasAbility(Constants::POISONSHROUD))
|
||||
{
|
||||
if (source->has(Constants::POISONTOXIC))
|
||||
@@ -197,6 +215,15 @@ int Damage::resolve()
|
||||
((MTGCardInstance*)source)->damageToOpponent = true;
|
||||
}
|
||||
target->lifeLostThisTurn += damage;
|
||||
if ( typeOfDamage == 1 && target == source->controller()->opponent() )//add vector prowledtypes.
|
||||
{
|
||||
vector<string> values = MTGAllCards::getCreatureValuesById();
|
||||
for (size_t i = 0; i < values.size(); ++i)
|
||||
{
|
||||
if ( source->hasSubtype( values[i] ) && find(source->controller()->prowledTypes.begin(), source->controller()->prowledTypes.end(), values[i])==source->controller()->prowledTypes.end() )
|
||||
source->controller()->prowledTypes.push_back(values[i]);
|
||||
}
|
||||
}
|
||||
WEvent * lifed = NEW WEventLife((Player*)target,-damage);
|
||||
observer->receiveEvent(lifed);
|
||||
}
|
||||
|
||||
@@ -204,6 +204,7 @@ void GameObserver::nextGamePhase()
|
||||
cleanupPhase();
|
||||
currentPlayer->damageCount = 0;
|
||||
currentPlayer->drawCounter = 0;
|
||||
currentPlayer->prowledTypes.clear();
|
||||
currentPlayer->opponent()->damageCount = 0; //added to clear odcount
|
||||
currentPlayer->preventable = 0;
|
||||
mLayers->actionLayer()->cleanGarbage(); //clean abilities history for this turn;
|
||||
@@ -230,6 +231,7 @@ void GameObserver::nextGamePhase()
|
||||
}
|
||||
mLayers->actionLayer()->Update(0);
|
||||
currentPlayer->drawCounter = 0;
|
||||
currentPlayer->prowledTypes.clear();
|
||||
currentPlayer->lifeLostThisTurn = 0;
|
||||
currentPlayer->opponent()->lifeLostThisTurn = 0;
|
||||
currentPlayer->doesntEmpty->remove(currentPlayer->doesntEmpty);
|
||||
|
||||
@@ -341,6 +341,22 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
|
||||
return 0;
|
||||
}
|
||||
|
||||
check = restriction[i].find("prowl");
|
||||
if(check != string::npos)
|
||||
{
|
||||
bool isProwled = false;
|
||||
for (size_t i = 0; i < card->controller()->prowledTypes.size(); ++i)
|
||||
{
|
||||
if ( card->hasSubtype( card->controller()->prowledTypes[i] ))
|
||||
{
|
||||
isProwled = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!isProwled)
|
||||
return 0;
|
||||
}
|
||||
|
||||
check = restriction[i].find("ownerscontrol");
|
||||
if(check != string::npos)
|
||||
{
|
||||
|
||||
@@ -33,6 +33,7 @@ Player::Player(GameObserver *observer, string file, string fileSmall, MTGDeck *
|
||||
skippingTurn = 0;
|
||||
extraTurn = 0;
|
||||
drawCounter = 0;
|
||||
prowledTypes.clear();
|
||||
doesntEmpty = NEW ManaCost();
|
||||
poolDoesntEmpty = NEW ManaCost();
|
||||
if (deck != NULL)
|
||||
|
||||
Reference in New Issue
Block a user