Merge pull request #673 from kevlahnota/master
Fix Cant life change and Seperated Cascade from Depleter class.
This commit is contained in:
@@ -6076,16 +6076,27 @@ class AADepleter: public ActivatedAbilityTP
|
|||||||
public:
|
public:
|
||||||
string nbcardsStr;
|
string nbcardsStr;
|
||||||
bool toexile;
|
bool toexile;
|
||||||
bool cascade;
|
|
||||||
AADepleter(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbcardsStr, ManaCost * _cost = NULL,
|
AADepleter(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbcardsStr, ManaCost * _cost = NULL,
|
||||||
int who = TargetChooser::UNSET, bool toexile = false, bool cascade = false);
|
int who = TargetChooser::UNSET, bool toexile = false);
|
||||||
int resolve();
|
int resolve();
|
||||||
string Cascade;
|
|
||||||
void toCastCard(MTGCardInstance * card);
|
|
||||||
const string getMenuText();
|
const string getMenuText();
|
||||||
AADepleter * clone() const;
|
AADepleter * clone() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//AACascade
|
||||||
|
class AACascade: public ActivatedAbilityTP
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
string nbcardsStr;
|
||||||
|
AACascade(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbcardsStr, ManaCost * _cost = NULL,
|
||||||
|
int who = TargetChooser::UNSET);
|
||||||
|
int resolve();
|
||||||
|
void toCastCard(MTGCardInstance * card);
|
||||||
|
const string getMenuText();
|
||||||
|
AACascade * clone() const;
|
||||||
|
};
|
||||||
|
|
||||||
//Generic skip turn/extra turn
|
//Generic skip turn/extra turn
|
||||||
class AAModTurn: public ActivatedAbilityTP
|
class AAModTurn: public ActivatedAbilityTP
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -261,12 +261,49 @@ AADamager * AADamager::clone() const
|
|||||||
|
|
||||||
|
|
||||||
//AADepleter
|
//AADepleter
|
||||||
AADepleter::AADepleter(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbcardsStr, ManaCost * _cost, int who, bool toexile, bool cascade) :
|
AADepleter::AADepleter(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbcardsStr, ManaCost * _cost, int who, bool toexile) :
|
||||||
ActivatedAbilityTP(observer, _id, card, _target, _cost, who),nbcardsStr(nbcardsStr),toexile(toexile),cascade(cascade)
|
ActivatedAbilityTP(observer, _id, card, _target, _cost, who),nbcardsStr(nbcardsStr),toexile(toexile)
|
||||||
{
|
{
|
||||||
Cascade = "Cascade";
|
|
||||||
}
|
}
|
||||||
int AADepleter::resolve()
|
int AADepleter::resolve()
|
||||||
|
{
|
||||||
|
Player * player = getPlayerFromTarget(getTarget());
|
||||||
|
if (player)
|
||||||
|
{
|
||||||
|
WParsedInt numCards(nbcardsStr, NULL, source);
|
||||||
|
MTGLibrary * library = player->game->library;
|
||||||
|
for (int i = 0; i < numCards.getValue(); i++)
|
||||||
|
{
|
||||||
|
if (library->nb_cards)
|
||||||
|
{
|
||||||
|
if(toexile)
|
||||||
|
player->game->putInZone(library->cards[library->nb_cards - 1], library, player->game->exile);
|
||||||
|
else
|
||||||
|
player->game->putInZone(library->cards[library->nb_cards - 1], library, player->game->graveyard);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
const string AADepleter::getMenuText()
|
||||||
|
{
|
||||||
|
if(toexile)
|
||||||
|
return "Ingest";
|
||||||
|
return "Deplete";
|
||||||
|
}
|
||||||
|
|
||||||
|
AADepleter * AADepleter::clone() const
|
||||||
|
{
|
||||||
|
return NEW AADepleter(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
//AACascade
|
||||||
|
AACascade::AACascade(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbcardsStr, ManaCost * _cost, int who) :
|
||||||
|
ActivatedAbilityTP(observer, _id, card, _target, _cost, who),nbcardsStr(nbcardsStr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
int AACascade::resolve()
|
||||||
{
|
{
|
||||||
Player * player = getPlayerFromTarget(getTarget());
|
Player * player = getPlayerFromTarget(getTarget());
|
||||||
if (player)
|
if (player)
|
||||||
@@ -280,85 +317,72 @@ AADepleter::AADepleter(GameObserver* observer, int _id, MTGCardInstance * card,
|
|||||||
{
|
{
|
||||||
if (library->nb_cards)
|
if (library->nb_cards)
|
||||||
{
|
{
|
||||||
if(cascade)
|
for(int z = library->nb_cards; z >= 0; z--)
|
||||||
{
|
{
|
||||||
for(int z = library->nb_cards; z >= 0; z--)
|
if(!library->cards[z]->isLand() && (library->cards[z]->getManaCost()->getConvertedCost() < source->getManaCost()->getConvertedCost()))
|
||||||
{
|
{
|
||||||
if(!library->cards[z]->isLand() && (library->cards[z]->getManaCost()->getConvertedCost() < source->getManaCost()->getConvertedCost()))
|
viable = library->cards[z];
|
||||||
|
player->game->putInZone(viable, library, exile);
|
||||||
{
|
{
|
||||||
viable = library->cards[z];
|
vector<MTGCardInstance*>selectedCards;
|
||||||
player->game->putInZone(viable, library, exile);
|
for(int j=0; j < library->nb_cards; j++)
|
||||||
{
|
{
|
||||||
vector<MTGCardInstance*>selectedCards;
|
if(library->cards[j]->isCascaded)
|
||||||
for(int j=0; j < library->nb_cards; j++)
|
{
|
||||||
|
library->cards[j]->isCascaded = false;
|
||||||
|
selectedCards.push_back(library->cards[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(selectedCards.size())
|
||||||
|
{
|
||||||
|
std::random_shuffle ( selectedCards.begin(), selectedCards.end() );
|
||||||
|
for(unsigned int i = 0; i < selectedCards.size();++i)
|
||||||
{
|
{
|
||||||
if(library->cards[j]->isCascaded)
|
vector<MTGCardInstance *>oldOrder = library->cards;
|
||||||
{
|
vector<MTGCardInstance *>newOrder;
|
||||||
library->cards[j]->isCascaded = false;
|
newOrder.push_back(selectedCards[i]);
|
||||||
selectedCards.push_back(library->cards[j]);
|
for(unsigned int k = 0;k < oldOrder.size();++k)
|
||||||
}
|
|
||||||
}
|
|
||||||
if(selectedCards.size())
|
|
||||||
{
|
|
||||||
std::random_shuffle ( selectedCards.begin(), selectedCards.end() );
|
|
||||||
for(unsigned int i = 0; i < selectedCards.size();++i)
|
|
||||||
{
|
{
|
||||||
vector<MTGCardInstance *>oldOrder = library->cards;
|
MTGCardInstance * rearranged = oldOrder[k];
|
||||||
vector<MTGCardInstance *>newOrder;
|
if(rearranged != selectedCards[i])
|
||||||
newOrder.push_back(selectedCards[i]);
|
newOrder.push_back(rearranged);
|
||||||
for(unsigned int k = 0;k < oldOrder.size();++k)
|
|
||||||
{
|
|
||||||
MTGCardInstance * rearranged = oldOrder[k];
|
|
||||||
if(rearranged != selectedCards[i])
|
|
||||||
newOrder.push_back(rearranged);
|
|
||||||
}
|
|
||||||
library->cards = newOrder;
|
|
||||||
}
|
}
|
||||||
|
library->cards = newOrder;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
toCastCard(viable->next);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
library->cards[library->nb_cards - 1]->isCascaded=true;
|
|
||||||
counter++;
|
|
||||||
}
|
}
|
||||||
|
toCastCard(viable->next);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
library->cards[library->nb_cards - 1]->isCascaded=true;
|
||||||
|
counter++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(toexile)
|
|
||||||
player->game->putInZone(library->cards[library->nb_cards - 1], library, player->game->exile);
|
|
||||||
else
|
|
||||||
player->game->putInZone(library->cards[library->nb_cards - 1], library, player->game->graveyard);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AADepleter::toCastCard(MTGCardInstance * thisCard)
|
void AACascade::toCastCard(MTGCardInstance * thisCard)
|
||||||
{
|
{
|
||||||
MTGAbility *ac = NEW AACastCard(game, game->mLayers->actionLayer()->getMaxId(), thisCard, thisCard,false,false,true,"","",false,false);
|
MTGAbility *ac = NEW AACastCard(game, game->mLayers->actionLayer()->getMaxId(), thisCard, thisCard,false,false,true,"","",false,false);
|
||||||
//ac->oneShot=true;
|
MayAbility *ma1 = NEW MayAbility(game, game->mLayers->actionLayer()->getMaxId(), ac, thisCard->clone(),true);
|
||||||
//ac->addToGame();
|
|
||||||
MayAbility *ma1 = NEW MayAbility(game, game->mLayers->actionLayer()->getMaxId(), ac, thisCard,true);
|
|
||||||
MTGAbility *ga1 = NEW GenericAddToGame(game, game->mLayers->actionLayer()->getMaxId(), thisCard,NULL,ma1);
|
MTGAbility *ga1 = NEW GenericAddToGame(game, game->mLayers->actionLayer()->getMaxId(), thisCard,NULL,ma1);
|
||||||
ga1->resolve();
|
ga1->resolve();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const string AADepleter::getMenuText()
|
const string AACascade::getMenuText()
|
||||||
{
|
{
|
||||||
if(cascade)
|
return "Cascade";
|
||||||
return Cascade;
|
|
||||||
else if(toexile)
|
|
||||||
return "Ingest";
|
|
||||||
return "Deplete";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AADepleter * AADepleter::clone() const
|
AACascade * AACascade::clone() const
|
||||||
{
|
{
|
||||||
return NEW AADepleter(*this);
|
return NEW AACascade(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
//take extra turns or skip turns, values in the negitive will make you skip.
|
//take extra turns or skip turns, values in the negitive will make you skip.
|
||||||
|
|||||||
@@ -229,8 +229,8 @@ int Damage::resolve()
|
|||||||
{
|
{
|
||||||
// "Normal" case,
|
// "Normal" case,
|
||||||
//return the left over amount after effects have been applied to them.
|
//return the left over amount after effects have been applied to them.
|
||||||
if (target->type_as_damageable == Damageable::DAMAGEABLE_PLAYER && !((Player *)target)->inPlay()->hasAbility(Constants::CANTCHANGELIFE))
|
if (target->type_as_damageable == Damageable::DAMAGEABLE_PLAYER && ((Player *)target)->inPlay()->hasAbility(Constants::CANTCHANGELIFE))
|
||||||
a = target->dealDamage(damage);
|
;//do nothing
|
||||||
else
|
else
|
||||||
a = target->dealDamage(damage);
|
a = target->dealDamage(damage);
|
||||||
target->damageCount += damage;//the amount must be the actual damage so i changed this from 1 to damage, this fixes pdcount and odcount
|
target->damageCount += damage;//the amount must be the actual damage so i changed this from 1 to damage, this fixes pdcount and odcount
|
||||||
|
|||||||
@@ -1666,7 +1666,7 @@ ostream& operator<<(ostream& out, const GameObserver& g)
|
|||||||
out << g.mSeed;
|
out << g.mSeed;
|
||||||
out << endl;
|
out << endl;
|
||||||
out << "rvalues:";
|
out << "rvalues:";
|
||||||
g.randomGenerator.saveUsedRandValues(out);
|
out << g.randomGenerator.saveUsedRandValues(out);
|
||||||
out << endl;
|
out << endl;
|
||||||
out << g.startupGameSerialized;
|
out << g.startupGameSerialized;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2689,7 +2689,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
|
|||||||
if (splitCascade.size())
|
if (splitCascade.size())
|
||||||
{
|
{
|
||||||
Targetable * t = spell ? spell->getNextTarget() : NULL;
|
Targetable * t = spell ? spell->getNextTarget() : NULL;
|
||||||
MTGAbility * a = NEW AADepleter(observer, id, card, t , splitCascade[1], NULL, who, false,true);
|
MTGAbility * a = NEW AACascade(observer, id, card, t , splitCascade[1], NULL, who);
|
||||||
a->oneShot = 1;
|
a->oneShot = 1;
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user