moved the readding of types below the removel of abilities incase a becomes would be used as a newability.

2nd, found a infinate loop is created when you cast a loseabilities on a card which has loseabilities, when the 2 effect ends it readds the first one, before it is removed, making the first one remove the 2nd one and repeat forever....

this is only a half fix, it created a memleak in the place of the loop :/ so wololo please review!!!
This commit is contained in:
omegablast2002@yahoo.com
2011-05-09 19:42:30 +00:00
parent 8737aec005
commit da1ec8eed3

View File

@@ -2662,13 +2662,6 @@ int ATransformer::destroy()
_target->setColor(*it);
}
if (remove)
{
for (it = oldtypes.begin(); it != oldtypes.end(); it++)
{
_target->addType(*it);
}
}
if(newpowerfound )
{
_target->power = oldpower;
@@ -2688,7 +2681,14 @@ int ATransformer::destroy()
newAbilities.erase(_target);
}
}
//we reset the name in the case that we removed or added types to a card, so that it retains its original name when the effect is removed.
if (remove)
{
for (it = oldtypes.begin(); it != oldtypes.end(); it++)
{
_target->addType(*it);
}
}
//n the case that we removed or added types to a card, so that it retains its original name when the effect is removed.
_target->name.clear();
_target->setName(_target->model->data->name.c_str());
}
@@ -2853,12 +2853,21 @@ int ALoseAbilities::destroy()
MTGAbility * a = storedAbilities[i];
//OneShot abilities are not supposed to stay in the game for long.
// If we copied one, something wrong probably happened
if (a->oneShot)
{
DebugTrace("ALL_ABILITIES: Ability should not be one shot");
continue;
}
a->addToGame();
ALoseAbilities * la = dynamic_cast<ALoseAbilities*> (a);
if (a->oneShot||la)
{
if(la)
{
DebugTrace("Dangerous chance of infinate loop avoided!");
continue;
}
else
{
DebugTrace("ALLABILITIES: Ability should not be one shot");
continue;
}
}
a->addToGame();
}
storedAbilities.clear();
return 1;