more work on cascade, I think I figured out what was causing a weird crash.
This commit is contained in:
@@ -6208,6 +6208,7 @@ class AACascade: public ActivatedAbility
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
string nbcardsStr;
|
string nbcardsStr;
|
||||||
|
MTGCardInstance * castingThis;
|
||||||
vector<MTGCardInstance*>selectedCards;
|
vector<MTGCardInstance*>selectedCards;
|
||||||
vector<MTGCardInstance *>oldOrder;
|
vector<MTGCardInstance *>oldOrder;
|
||||||
vector<MTGCardInstance *>newOrder;
|
vector<MTGCardInstance *>newOrder;
|
||||||
|
|||||||
@@ -133,6 +133,7 @@ class GameObserver{
|
|||||||
int isInPlay(MTGCardInstance * card);
|
int isInPlay(MTGCardInstance * card);
|
||||||
int isInGrave(MTGCardInstance * card);
|
int isInGrave(MTGCardInstance * card);
|
||||||
int isInExile(MTGCardInstance * card);
|
int isInExile(MTGCardInstance * card);
|
||||||
|
int isInHand(MTGCardInstance * card);
|
||||||
virtual void Update(float dt);
|
virtual void Update(float dt);
|
||||||
void Render();
|
void Render();
|
||||||
void ButtonPressed(PlayGuiObject*);
|
void ButtonPressed(PlayGuiObject*);
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ public:
|
|||||||
bool isPhased;
|
bool isPhased;
|
||||||
bool isCascaded;
|
bool isCascaded;
|
||||||
int phasedTurn;
|
int phasedTurn;
|
||||||
|
bool handEffects;
|
||||||
bool graveEffects;
|
bool graveEffects;
|
||||||
bool exileEffects;
|
bool exileEffects;
|
||||||
bool suspended;
|
bool suspended;
|
||||||
|
|||||||
@@ -1143,6 +1143,7 @@ AACascade::AACascade(GameObserver* observer, int _id, MTGCardInstance * _source,
|
|||||||
selectedCards.clear();
|
selectedCards.clear();
|
||||||
oldOrder.clear();
|
oldOrder.clear();
|
||||||
newOrder.clear();
|
newOrder.clear();
|
||||||
|
castingThis = NULL;
|
||||||
}
|
}
|
||||||
int AACascade::resolve()
|
int AACascade::resolve()
|
||||||
{
|
{
|
||||||
@@ -1171,10 +1172,9 @@ int AACascade::resolve()
|
|||||||
{
|
{
|
||||||
if (!viable->isLand() && (viable->getManaCost()->getConvertedCost() < source->getManaCost()->getConvertedCost()))
|
if (!viable->isLand() && (viable->getManaCost()->getConvertedCost() < source->getManaCost()->getConvertedCost()))
|
||||||
{
|
{
|
||||||
|
|
||||||
toCastCard(viable);
|
|
||||||
viable = player->game->putInZone(viable, library, exile);
|
viable = player->game->putInZone(viable, library, exile);
|
||||||
viable->isCascaded = true;
|
viable->isCascaded = true;
|
||||||
|
castingThis = viable;
|
||||||
found = true;
|
found = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -1193,7 +1193,7 @@ int AACascade::resolve()
|
|||||||
{
|
{
|
||||||
if (exile->cards[j]->isCascaded)
|
if (exile->cards[j]->isCascaded)
|
||||||
{
|
{
|
||||||
MTGCardInstance * CardToPutBack = exile->cards[j];//player->game->putInZone(exile->cards[j], exile, library);
|
MTGCardInstance * CardToPutBack = exile->cards[j];;
|
||||||
CardToPutBack->isCascaded = false;
|
CardToPutBack->isCascaded = false;
|
||||||
selectedCards.push_back(CardToPutBack);
|
selectedCards.push_back(CardToPutBack);
|
||||||
}
|
}
|
||||||
@@ -1213,6 +1213,13 @@ int AACascade::resolve()
|
|||||||
selectedCards.pop_back();
|
selectedCards.pop_back();
|
||||||
}
|
}
|
||||||
} while (selectedCards.size());
|
} while (selectedCards.size());
|
||||||
|
|
||||||
|
if (castingThis)
|
||||||
|
{
|
||||||
|
while (castingThis->next)
|
||||||
|
castingThis = castingThis->next;
|
||||||
|
toCastCard(castingThis);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//////////////////////////////////////
|
//////////////////////////////////////
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
@@ -1568,7 +1568,17 @@ int GameObserver::isInExile(MTGCardInstance * card)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
int GameObserver::isInHand(MTGCardInstance * card)
|
||||||
|
{
|
||||||
|
|
||||||
|
for (int i = 0; i < 2; i++)
|
||||||
|
{
|
||||||
|
MTGGameZone * hand = players[i]->game->hand;
|
||||||
|
if (players[i]->game->isInZone(card, hand))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
void GameObserver::cleanupPhase()
|
void GameObserver::cleanupPhase()
|
||||||
{
|
{
|
||||||
currentPlayer->cleanupPhase();
|
currentPlayer->cleanupPhase();
|
||||||
|
|||||||
@@ -3982,13 +3982,14 @@ int AbilityFactory::getAbilities(vector<MTGAbility *> * v, Spell * spell, MTGCar
|
|||||||
{
|
{
|
||||||
card->graveEffects = false;
|
card->graveEffects = false;
|
||||||
card->exileEffects = false;
|
card->exileEffects = false;
|
||||||
|
card->handEffects = false;
|
||||||
for (int i = 0; i < 2; ++i)
|
for (int i = 0; i < 2; ++i)
|
||||||
{
|
{
|
||||||
MTGPlayerCards * zones = observer->players[i]->game;
|
MTGPlayerCards * zones = observer->players[i]->game;
|
||||||
if (dest == zones->hand)
|
if (dest == zones->hand)
|
||||||
{
|
{
|
||||||
magicText = card->magicTexts["hand"];
|
magicText = card->magicTexts["hand"];
|
||||||
|
card->handEffects = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (dest == zones->graveyard)
|
if (dest == zones->graveyard)
|
||||||
@@ -4891,6 +4892,8 @@ int MTGAbility::testDestroy()
|
|||||||
return 1;
|
return 1;
|
||||||
if (forceDestroy == -1)
|
if (forceDestroy == -1)
|
||||||
return 0;
|
return 0;
|
||||||
|
if (source->handEffects && game->isInHand(source))
|
||||||
|
return 0;
|
||||||
if(source->graveEffects && game->isInGrave(source))
|
if(source->graveEffects && game->isInGrave(source))
|
||||||
return 0;
|
return 0;
|
||||||
if(source->exileEffects && game->isInExile(source))
|
if(source->exileEffects && game->isInExile(source))
|
||||||
@@ -5934,8 +5937,17 @@ int AManaProducer::isReactingToClick(MTGCardInstance * _card, ManaCost * mana)
|
|||||||
int result = 0;
|
int result = 0;
|
||||||
if (!mana)
|
if (!mana)
|
||||||
mana = game->currentlyActing()->getManaPool();
|
mana = game->currentlyActing()->getManaPool();
|
||||||
if (_card == source && (!tap || !source->isTapped()) && game->currentlyActing()->game->inPlay->hasCard(source)
|
//please do not condense the following, I broke it apart for readability, it was far to difficult to tell what exactly happened before with it all in a single line.
|
||||||
&& (source->hasType(Subtypes::TYPE_LAND) || !tap || !source->hasSummoningSickness()) && !source->isPhased)
|
//and far to prone to bugs.
|
||||||
|
if (_card == source)
|
||||||
|
{
|
||||||
|
if (!tap || (tap && !source->isTapped()))
|
||||||
|
{
|
||||||
|
if (!source->hasSummoningSickness())
|
||||||
|
{
|
||||||
|
if (game->currentlyActing()->game->inPlay->hasCard(source) && source->hasType(Subtypes::TYPE_LAND))
|
||||||
|
{
|
||||||
|
if (!source->isPhased)
|
||||||
{
|
{
|
||||||
ManaCost * cost = getCost();
|
ManaCost * cost = getCost();
|
||||||
if (!cost || (mana->canAfford(cost) && (!cost->extraCosts || cost->extraCosts->canPay())))/*counter cost bypass react to click*/
|
if (!cost || (mana->canAfford(cost) && (!cost->extraCosts || cost->extraCosts->canPay())))/*counter cost bypass react to click*/
|
||||||
@@ -5943,6 +5955,10 @@ int AManaProducer::isReactingToClick(MTGCardInstance * _card, ManaCost * mana)
|
|||||||
result = 1;
|
result = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user