3 changes
1st had to revise the syntax for my "type:" variable it is now type:blah:location, using the pipe line created nasty returns in some combinations of abilities as the parser confused the pipeline in type: with the one in TC. 2nd more of a correction then a bug fix, i noticed that upcost had instances where it could still trigger its effect in the draw phase becuase the condiational for the ability resolve was in the update, i left the class mostly untouched but move the resolve out of update and into a receiveEvent for upcost, which triggers only once after you declared that you are leaving the upkeep before draw step begins. 3rd reworked the construction of multiability to only produce a single multiability with all the abilities in the string instead of nested multiabilities, it is considerabily easier to debug and creates 1/3 less objects for the engine to deal with in comparison to the old method.
This commit is contained in:
@@ -2921,6 +2921,21 @@ AUpkeep::AUpkeep(int _id, MTGCardInstance * card, MTGAbility * a, ManaCost * _co
|
||||
aType = MTGAbility::UPCOST;
|
||||
}
|
||||
|
||||
int AUpkeep::receiveEvent(WEvent * event)
|
||||
{
|
||||
if (WEventPhaseChange* pe = dynamic_cast<WEventPhaseChange*>(event))
|
||||
{
|
||||
if (Constants::MTG_PHASE_DRAW == pe->to->id)
|
||||
{
|
||||
if (source->controller() == game->currentPlayer && once < 2 && paidThisTurn < 1)
|
||||
{
|
||||
ability->resolve();
|
||||
}
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
void AUpkeep::Update(float dt)
|
||||
{
|
||||
// once: 0 means always go off, 1 means go off only once, 2 means go off only once and already has.
|
||||
@@ -2944,10 +2959,6 @@ void AUpkeep::Update(float dt)
|
||||
if(currentage)
|
||||
paidThisTurn -= currentage;
|
||||
}
|
||||
else if (newPhase == phase + 1 && paidThisTurn < 1)
|
||||
{
|
||||
ability->resolve();
|
||||
}
|
||||
if (newPhase == phase + 1 && once)
|
||||
once = 2;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user