Fixed bug with preventing Melira from putting +1/+1 counters on creatures you control

This commit is contained in:
Dmitry Panin
2013-10-22 14:30:59 +04:00
parent f0977ebc04
commit 461eedd626
4 changed files with 62 additions and 20 deletions

View File

@@ -49,33 +49,36 @@ REDamagePrevention::~REDamagePrevention()
SAFE_DELETE(tcTarget);
}
//counters replacement effect///////////////////
RECountersPrevention::RECountersPrevention(MTGAbility * source,MTGCardInstance * cardSource,MTGCardInstance * cardTarget,TargetChooser * tc,Counter * counter) :
source(source),cardSource(cardSource),cardTarget(cardTarget),TargetingCards(tc),counter(counter)
RECountersPrevention::RECountersPrevention(MTGAbility * source, MTGCardInstance * cardSource,
MTGCardInstance * cardTarget, TargetChooser * tc, Counter * counter) :
source(source), cardSource(cardSource), cardTarget(cardTarget), tc(tc), counter(counter)
{
}
WEvent * RECountersPrevention::replace(WEvent *event)
WEvent * RECountersPrevention::replace(WEvent *event)
{
if (!event) return event;
WEventCounters * e = dynamic_cast<WEventCounters*> (event);
if (!e) return event;
MTGCardInstance * target = e->targetCard;
if (target)
{
if (!event) return event;
WEventCounters * e = dynamic_cast<WEventCounters*> (event);
if (!e) return event;
if((MTGCardInstance*)e->targetCard)
if (target == cardSource || (tc && tc->canTarget(target)))
{
if((MTGCardInstance*)e->targetCard == cardSource && counter)
{
if(e->power == counter->power && e->toughness == counter->toughness && e->name == counter->name)
return event = NULL;
}
else if((MTGCardInstance*)e->targetCard == cardSource)
return event = NULL;
else if(TargetingCards && TargetingCards->canTarget((MTGCardInstance*)e->targetCard))
return event = NULL;
// counter == NULL means "any counter"
if (!counter)
return NULL;
if (e->power == counter->power && e->toughness == counter->toughness && e->name == counter->name)
return NULL;
}
return event;
}
return event;
}
RECountersPrevention::~RECountersPrevention()
{
SAFE_DELETE(TargetingCards);
SAFE_DELETE(tc);
}
////--draw replacement---------------------
REDrawReplacement::REDrawReplacement(MTGAbility * source, Player * Drawer, MTGAbility * replaceWith) :