From 2b9cae8950f55f4499de443bf1c464e1e4f16237 Mon Sep 17 00:00:00 2001 From: "omegablast2002@yahoo.com" Date: Mon, 28 Jan 2013 03:49:24 +0000 Subject: [PATCH] added functionality to may and choice ability so that it can check a "restriction{}" like a activated ability with cost, that can keep a menu option from appearing if the restriction is not met auto=choice damage:1 target(creature) restriction{type(creature[blue])~morethan~1} this choice menu will only appear is there is more than one blue creature inplay --- projects/mtg/include/AllAbilities.h | 3 ++- projects/mtg/src/AllAbilities.cpp | 13 +++++++++++-- projects/mtg/src/MTGAbility.cpp | 8 +++++++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index 0965d1481..baae3aac1 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -1074,11 +1074,12 @@ class MayAbility: public MTGAbility, public NestedAbility public: int triggered; bool must; + string Cond; Player * previousInterrupter; MTGAbility * mClone; ManaCost * optionalCost; - MayAbility(GameObserver* observer, int _id, MTGAbility * _ability, MTGCardInstance * _source, bool must = false); + MayAbility(GameObserver* observer, int _id, MTGAbility * _ability, MTGCardInstance * _source, bool must = false, string restriction = ""); void Update(float dt); diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index 92a66351e..8bae5ee1c 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -3077,8 +3077,8 @@ IfThenAbility::~IfThenAbility() // //May Abilities -MayAbility::MayAbility(GameObserver* observer, int _id, MTGAbility * _ability, MTGCardInstance * _source, bool must) : - MTGAbility(observer, _id, _source), NestedAbility(_ability), must(must) +MayAbility::MayAbility(GameObserver* observer, int _id, MTGAbility * _ability, MTGCardInstance * _source, bool must,string _cond) : + MTGAbility(observer, _id, _source), NestedAbility(_ability), must(must), Cond(_cond) { triggered = 0; mClone = NULL; @@ -3093,6 +3093,15 @@ void MayAbility::Update(float dt) triggered = 1; if(optionalCost && !source->controller()->getManaPool()->canAfford(optionalCost)) return; + if(Cond.size()) + { + AbilityFactory af(game); + int checkCond = af.parseCastRestrictions(source,source->controller(),Cond); + if(!checkCond) + { + return; + } + } if (TargetAbility * ta = dynamic_cast(ability)) { if (!ta->getActionTc()->validTargetsExist()) diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index 2a679bbb8..26a59cd96 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -1164,6 +1164,12 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG if (splitRest.size()) castRestriction = splitRest[1]; } + if (s.find("restriction{{") != string::npos) + { + vector splitRest = parseBetween(s,"restriction{{","}}"); + if (splitRest.size()) + castRestriction = splitRest[1]; + } string newName = ""; vector splitName = parseBetween(s, "name(", ")"); if (splitName.size()) @@ -1364,7 +1370,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG a1 = NEW GenericTargetAbility(observer, newName,castRestriction,id, card, tc, a1); else a1 = NEW GenericActivatedAbility(observer, newName,castRestriction,id, card, a1, NULL); - MayAbility * mainAbility = NEW MayAbility(observer, id, a1, card,mayMust[i]); + MayAbility * mainAbility = NEW MayAbility(observer, id, a1, card,mayMust[i],castRestriction); if(mayCost) mainAbility->optionalCost = mayCost; return mainAbility;