-Fix issue 107 as well as another issue with doesnotuntap mentioned by leungcl -Changed wording for Paralyzing Graps (to match oracle), please verify
43 lines
1009 B
C++
43 lines
1009 B
C++
#include "../include/config.h"
|
|
#include "../include/ConstraintResolver.h"
|
|
|
|
|
|
int ConstraintResolver::untap(GameObserver * game, MTGCardInstance * card){
|
|
if (!card->isUntapping()){
|
|
return 0;
|
|
}
|
|
if (card->has(Constants::DOESNOTUNTAP)) return 0;
|
|
int ok = 1;
|
|
ManaCost * untapManaCost = NEW ManaCost();
|
|
UntapBlockers * blockers = card->getUntapBlockers();
|
|
UntapBlocker * blocker;
|
|
blockers->rewind();
|
|
Player * player = game->currentPlayer;
|
|
while ((blocker = blockers->next())){
|
|
#if defined (WIN32) || defined (LINUX)
|
|
char buf[4096];
|
|
sprintf(buf, "next\n");
|
|
OutputDebugString(buf);
|
|
#endif
|
|
untapManaCost->add(blocker->untapManaCost());
|
|
}
|
|
if (player->getManaPool()->canAfford(untapManaCost)){
|
|
blockers->rewind();
|
|
while ((blocker = blockers->next())){
|
|
if (!blocker->unblock()){
|
|
ok = 0;
|
|
break;
|
|
}
|
|
}
|
|
}else{
|
|
ok = 0;
|
|
}
|
|
|
|
if (ok) {
|
|
player->getManaPool()->pay(untapManaCost);
|
|
card->attemptUntap();
|
|
}
|
|
delete untapManaCost;
|
|
return ok;
|
|
}
|