diff --git a/projects/mtg/include/MTGAbility.h b/projects/mtg/include/MTGAbility.h index 4adfb06d3..11814fe8e 100644 --- a/projects/mtg/include/MTGAbility.h +++ b/projects/mtg/include/MTGAbility.h @@ -275,6 +275,7 @@ class ActivatedAbility:public MTGAbility{ virtual int isReactingToClick(MTGCardInstance * card, ManaCost * mana = NULL); virtual int reactToTargetClick(Targetable * object); virtual int resolve() = 0; + void activeSideEffect(); virtual ActivatedAbility* clone() const = 0; virtual ostream& toString(ostream& out) const; }; diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index d19681a71..b20d63ff8 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -4087,27 +4087,8 @@ int ActivatedAbility::reactToClick(MTGCardInstance * card) counters++; if(sideEffect && usesBeforeSideEffects.size()) { - WParsedInt * use = NEW WParsedInt(usesBeforeSideEffects.c_str(),NULL,source); - uses = use->getValue(); - delete use; - if(counters == uses) - { - sa = sideEffect->clone(); - sa->target = this->target; - sa->source = this->source; - if(sa->oneShot) - { - sa->fireAbility(); - } - else - { - GenericInstantAbility * wrapper = NEW GenericInstantAbility(1, source, (Damageable *) (this->target), sa); - wrapper->addToGame(); - } - } - + activeSideEffect(); } - fireAbility(); return 1; @@ -4154,25 +4135,7 @@ int ActivatedAbility::reactToTargetClick(Targetable * object) counters++; if(sideEffect && usesBeforeSideEffects.size()) { - WParsedInt * use = NEW WParsedInt(usesBeforeSideEffects.c_str(),NULL,source); - uses = use->getValue(); - delete use; - if(counters == uses) - { - sa = sideEffect->clone(); - sa->target = this->target; - sa->source = this->source; - if(sa->oneShot) - { - sa->fireAbility(); - } - else - { - GenericInstantAbility * wrapper = NEW GenericInstantAbility(1, source, (Damageable *) (this->target), sa); - wrapper->addToGame(); - } - } - + activeSideEffect(); } this->resolve(); return 1; @@ -4180,30 +4143,36 @@ int ActivatedAbility::reactToTargetClick(Targetable * object) counters++; if(sideEffect && usesBeforeSideEffects.size()) { - WParsedInt * use = NEW WParsedInt(usesBeforeSideEffects.c_str(),NULL,source); - uses = use->getValue(); - delete use; - if(counters == uses) - { - sa = sideEffect->clone(); - sa->target = this->target; - sa->source = this->source; - if(sa->oneShot) - { - sa->fireAbility(); - } - else - { - GenericInstantAbility * wrapper = NEW GenericInstantAbility(1, source, (Damageable *) (this->target), sa); - wrapper->addToGame(); - } - } + activeSideEffect(); } fireAbility(); return 1; } +void ActivatedAbility::activeSideEffect() +{ + WParsedInt * use = NEW WParsedInt(usesBeforeSideEffects.c_str(),NULL,source); + uses = use->getValue(); + delete use; + if(counters == uses) + { + sa = sideEffect->clone(); + sa->target = this->target; + sa->source = this->source; + if(sa->oneShot) + { + sa->fireAbility(); + } + else + { + GenericInstantAbility * wrapper = NEW GenericInstantAbility(1, source, (Damageable *) (this->target), sa); + wrapper->addToGame(); + } + } + return; +} + ActivatedAbility::~ActivatedAbility() { //Ok, this will probably lead to crashes, maybe with lord abilities involving "X" costs.