revert pw attack rule

need to refactor this as this cause crashes on android when you cast a
planeswalker
This commit is contained in:
Anthony Calosa
2017-03-01 16:07:12 +08:00
parent 3bf1cca118
commit d761bac85c
11 changed files with 17 additions and 48 deletions
-1
View File
@@ -171,7 +171,6 @@ public:
int canBlock(); int canBlock();
int canBlock(MTGCardInstance * opponent); int canBlock(MTGCardInstance * opponent);
int canAttack(); int canAttack();
int canPWAttack();
int isAttacker(); int isAttacker();
Targetable * isAttacking; Targetable * isAttacking;
MTGCardInstance * storedCard; MTGCardInstance * storedCard;
+1 -2
View File
@@ -266,8 +266,7 @@ class Constants
HIDDENFACE = 144, HIDDENFACE = 144,
ANYTYPEOFMANA = 145, ANYTYPEOFMANA = 145,
NECROED = 146, NECROED = 146,
CANTATTACKPW = 147, NB_BASIC_ABILITIES = 147,
NB_BASIC_ABILITIES = 148,
RARITY_S = 'S', //Special Rarity RARITY_S = 'S', //Special Rarity
RARITY_M = 'M', //Mythics RARITY_M = 'M', //Mythics
+1 -1
View File
@@ -279,7 +279,7 @@ public:
MTGAttackRule(GameObserver* observer, int _id); MTGAttackRule(GameObserver* observer, int _id);
const string getMenuText() const string getMenuText()
{ {
return "Attack Player"; return "Attacker";
} }
int receiveEvent(WEvent * event); int receiveEvent(WEvent * event);
virtual MTGAttackRule * clone() const; virtual MTGAttackRule * clone() const;
-7
View File
@@ -1158,14 +1158,7 @@ AADamager::AADamager(GameObserver* observer, int _id, MTGCardInstance * _source,
{ {
MTGCardInstance * _target = dynamic_cast<MTGCardInstance*>(target); MTGCardInstance * _target = dynamic_cast<MTGCardInstance*>(target);
if(_target && _target->hasType(Subtypes::TYPE_PLANESWALKER)) if(_target && _target->hasType(Subtypes::TYPE_PLANESWALKER))
{
if(d.size())
{
WParsedInt parsedNum(d, NULL, source);
return _("Deal " + parsedNum.getStringValue() + " Damage to " + _target->name).c_str();
}
return _target->name.c_str(); return _target->name.c_str();
}
if(redirected) if(redirected)
{ {
if(d.size()) if(d.size())
+6 -5
View File
@@ -684,8 +684,6 @@ void GameObserver::gameStateBasedEffects()
int onum = w+1; int onum = w+1;
card->zpos = abs(onum - zone->nb_cards)+1; card->zpos = abs(onum - zone->nb_cards)+1;
} }
if(card && zone->owner)//last controller
card->lastController = zone->owner;
} }
@@ -714,6 +712,8 @@ void GameObserver::gameStateBasedEffects()
for (int j = zone->nb_cards - 1; j >= 0; j--) for (int j = zone->nb_cards - 1; j >= 0; j--)
{ {
MTGCardInstance * card = zone->cards[j]; MTGCardInstance * card = zone->cards[j];
//lastcontroller zone update
card->lastController = players[i];
card->entersBattlefield = 0; card->entersBattlefield = 0;
card->LKIpower = card->power; card->LKIpower = card->power;
card->LKItoughness = card->toughness; card->LKItoughness = card->toughness;
@@ -1049,14 +1049,15 @@ void GameObserver::gameStateBasedEffects()
int skipLevel = (currentPlayer->playMode == Player::MODE_TEST_SUITE || mLoading) ? Constants::ASKIP_NONE int skipLevel = (currentPlayer->playMode == Player::MODE_TEST_SUITE || mLoading) ? Constants::ASKIP_NONE
: options[Options::ASPHASES].number; : options[Options::ASPHASES].number;
bool noattackers = currentPlayer->noPossibleAttackers(); bool noattackers = currentPlayer->noPossibleAttackers();
bool hasdiaochan = currentPlayer->game->inPlay->hasAlias(10544);//diaochan activated ability combat begins bool nodiaochan = (currentPlayer->game->battlefield->countByAlias(10544)<1)?true:false;
if (skipLevel == Constants::ASKIP_SAFE || skipLevel == Constants::ASKIP_FULL) if (skipLevel == Constants::ASKIP_SAFE || skipLevel == Constants::ASKIP_FULL)
{ {
if ((opponent()->isAI() && !(isInterrupting)) && ((mCurrentGamePhase == MTG_PHASE_UNTAP) if ((opponent()->isAI() && !(isInterrupting)) && ((mCurrentGamePhase == MTG_PHASE_UNTAP)
|| (mCurrentGamePhase == MTG_PHASE_DRAW) || (mCurrentGamePhase == MTG_PHASE_DRAW)
|| ((mCurrentGamePhase == MTG_PHASE_COMBATBEGIN) && (!hasdiaochan)) || ((mCurrentGamePhase == MTG_PHASE_COMBATBEGIN) && (nodiaochan))
|| ((mCurrentGamePhase == MTG_PHASE_COMBATATTACKERS) && (noattackers)) || ((mCurrentGamePhase == MTG_PHASE_COMBATATTACKERS) && (noattackers))
|| (mCurrentGamePhase == MTG_PHASE_COMBATEND) || (mCurrentGamePhase == MTG_PHASE_ENDOFTURN) || (mCurrentGamePhase == MTG_PHASE_COMBATEND)
|| (mCurrentGamePhase == MTG_PHASE_ENDOFTURN)
|| ((mCurrentGamePhase == MTG_PHASE_CLEANUP) && (currentPlayer->game->hand->nb_cards < 8)))) || ((mCurrentGamePhase == MTG_PHASE_CLEANUP) && (currentPlayer->game->hand->nb_cards < 8))))
userRequestNextGamePhase(); userRequestNextGamePhase();
} }
+5 -1
View File
@@ -742,10 +742,14 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
} }
check = restriction[i].find("didnotcastnontoken"); check = restriction[i].find("didnotcastnontoken");
if(check != string::npos) if(check != string::npos)
{
restriction.push_back("lastturn(*[-token]|mystack,mybattlefield)~lessthan~1");
}
check = restriction[i].find("didnotcastnontoken");
if(check != string::npos)
{ {
restriction.push_back("lastturn(*[-token]|opponentstack,opponentbattlefield)~lessthan~1"); restriction.push_back("lastturn(*[-token]|opponentstack,opponentbattlefield)~lessthan~1");
} }
check = restriction[i].find("paid("); check = restriction[i].find("paid(");
if(check != string::npos) if(check != string::npos)
{ {
-17
View File
@@ -690,23 +690,6 @@ int MTGCardInstance::canAttack()
return 1; return 1;
} }
int MTGCardInstance::canPWAttack()
{
if (has(Constants::CANTATTACKPW))
return 0;
if (tapped)
return 0;
if (hasSummoningSickness())
return 0;
if (has(Constants::DEFENSER) && !has(Constants::CANATTACK))
return 0;
if (!isCreature())
return 0;
if (!isInPlay(observer))
return 0;
return 1;
}
int MTGCardInstance::addToToughness(int value) int MTGCardInstance::addToToughness(int value)
{ {
toughness += value; toughness += value;
+1 -2
View File
@@ -177,8 +177,7 @@ const char* Constants::MTGBasicAbilities[] = {
"cantcrew", "cantcrew",
"hiddenface",//test for hiding card "hiddenface",//test for hiding card
"anytypeofmana", "anytypeofmana",
"necroed"//hide necored, "necroed"//hide necored
"cantpwattack"
}; };
map<string,int> Constants::MTGBasicAbilitiesMap; map<string,int> Constants::MTGBasicAbilitiesMap;
-2
View File
@@ -1142,8 +1142,6 @@ MTGGameZone * MTGGameZone::intToZone(GameObserver *g, int zoneId, MTGCardInstanc
else else
p2 = target->controller(); p2 = target->controller();
//if(p2 != p && p2 != p->opponent())//should match at least one
//p2 = p;
MTGGameZone * result = intToZone(zoneId, p, p2); MTGGameZone * result = intToZone(zoneId, p, p2);
if (result) return result; if (result) return result;
+3 -8
View File
@@ -1862,13 +1862,8 @@ int MTGAttackRule::receiveEvent(WEvent *e)
card->setAttacker(0); card->setAttacker(0);
if (card->isAttacker() && !card->has(Constants::VIGILANCE)) if (card->isAttacker() && !card->has(Constants::VIGILANCE))
card->tap(); card->tap();
if (card->isAttacker() && card->has(Constants::CANTATTACK) && (card->isAttacking && ((Damageable*)card->isAttacking)->type_as_damageable == Damageable::DAMAGEABLE_PLAYER)) if (card->isAttacker() && card->has(Constants::CANTATTACK))
card->toggleAttacker();//if a card has cantattack, then you cant card->toggleAttacker();//if a card has cantattack, then you cant
/*if (card->isAttacker() && card->has(Constants::CANTATTACKPW) && (card->isAttacking && ((Damageable*)card->isAttacking)->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE))
{
if(((MTGCardInstance *)card->isAttacking)->hasType("planeswalker"))
card->toggleAttacker();
}*/
} }
return 1; return 1;
} }
@@ -1920,7 +1915,7 @@ int MTGPlaneswalkerAttackRule::isReactingToClick(MTGCardInstance * card, ManaCos
return 0; return 0;
if (card->isAttacker()) if (card->isAttacker())
return 1; return 1;
if (card->canPWAttack() && card->attackPlaneswalkerCost < 1) if (card->canAttack() && card->attackPlaneswalkerCost < 1)
return 1; return 1;
} }
return 0; return 0;
@@ -1977,7 +1972,7 @@ bool MTGPlaneswalkerAttackRule::select(Target* t)
if (CardView* c = dynamic_cast<CardView*>(t)) if (CardView* c = dynamic_cast<CardView*>(t))
{ {
MTGCardInstance * card = c->getCard(); MTGCardInstance * card = c->getCard();
if (card->canPWAttack() && !card->isPhased) if (card->canAttack() && !card->isPhased)
return true; return true;
} }
return false; return false;
-2
View File
@@ -262,8 +262,6 @@ bool Player::hasPossibleAttackers()
MTGCardInstance * c = z->cards[j]; MTGCardInstance * c = z->cards[j];
if (c->canAttack() && c->isCreature()) if (c->canAttack() && c->isCreature())
return true; return true;
if (c->canPWAttack() && c->isCreature() && c->controller()->opponent()->inPlay()->hasType("planeswalker"))
return true;
} }
return false; return false;
} }