some bug fixes
fix where the copier is treated as the same copied card, also fixes the display ability of momir (forced), disabled reveal for AI if aicode is not found (should add alternate for ai).
This commit is contained in:
@@ -48,7 +48,6 @@ public:
|
|||||||
vector<MTGCardInstance*>parentCards;
|
vector<MTGCardInstance*>parentCards;
|
||||||
vector<MTGCardInstance*>childrenCards;
|
vector<MTGCardInstance*>childrenCards;
|
||||||
vector<MTGAbility *>cardsAbilities;
|
vector<MTGAbility *>cardsAbilities;
|
||||||
//vector<MTGAbility *>cardsAbilitiesFilter;
|
|
||||||
|
|
||||||
int setAttacker(int value);
|
int setAttacker(int value);
|
||||||
int setDefenser(MTGCardInstance * c);
|
int setDefenser(MTGCardInstance * c);
|
||||||
@@ -263,6 +262,7 @@ public:
|
|||||||
bool bypassTC;
|
bool bypassTC;
|
||||||
bool discarded;
|
bool discarded;
|
||||||
int copiedID;
|
int copiedID;
|
||||||
|
int copiedSetID;
|
||||||
bool StackIsEmptyandSorcerySpeed();
|
bool StackIsEmptyandSorcerySpeed();
|
||||||
bool isTargetted();
|
bool isTargetted();
|
||||||
int cardistargetted;
|
int cardistargetted;
|
||||||
|
|||||||
@@ -593,7 +593,12 @@ int ActionStack::addAbility(MTGAbility * ability)
|
|||||||
int result = addAction(stackAbility);
|
int result = addAction(stackAbility);
|
||||||
if (!observer->players[0]->isAI() && ability->source->controller() == observer->players[0] && 0
|
if (!observer->players[0]->isAI() && ability->source->controller() == observer->players[0] && 0
|
||||||
== options[Options::INTERRUPTMYABILITIES].number)
|
== options[Options::INTERRUPTMYABILITIES].number)
|
||||||
|
{
|
||||||
|
if(observer->gameType() == GAME_TYPE_MOMIR && ability->aType == MTGAbility::FORCED_TOKEN_CREATOR)
|
||||||
|
interruptDecision[0] = NOT_DECIDED;
|
||||||
|
else
|
||||||
interruptDecision[0] = DONT_INTERRUPT;
|
interruptDecision[0] = DONT_INTERRUPT;
|
||||||
|
}
|
||||||
if (observer->OpenedDisplay && observer->players[0]->game->reveal->cards.size())
|
if (observer->OpenedDisplay && observer->players[0]->game->reveal->cards.size())
|
||||||
{
|
{
|
||||||
interruptDecision[0] = DONT_INTERRUPT;
|
interruptDecision[0] = DONT_INTERRUPT;
|
||||||
|
|||||||
@@ -1799,6 +1799,18 @@ AACounter::AACounter(GameObserver* observer, int id, MTGCardInstance * source, M
|
|||||||
while (_target->next)
|
while (_target->next)
|
||||||
_target = _target->next;
|
_target = _target->next;
|
||||||
|
|
||||||
|
|
||||||
|
if(_target->getCurrentZone() != _target->controller()->game->battlefield ||
|
||||||
|
_target->getCurrentZone() != _target->controller()->opponent()->game->battlefield)
|
||||||
|
{
|
||||||
|
if(power||toughness)
|
||||||
|
{
|
||||||
|
if(_target->previousZone == _target->controller()->game->battlefield ||
|
||||||
|
_target->previousZone == _target->controller()->opponent()->game->battlefield)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Counter * targetCounter = NULL;
|
Counter * targetCounter = NULL;
|
||||||
int currentAmount = 0;
|
int currentAmount = 0;
|
||||||
if (_target->counters && _target->counters->hasCounter(name.c_str(), power, toughness))
|
if (_target->counters && _target->counters->hasCounter(name.c_str(), power, toughness))
|
||||||
|
|||||||
@@ -3638,7 +3638,18 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
|
|||||||
a->oneShot = 1;
|
a->oneShot = 1;
|
||||||
a->canBeInterrupted = false;
|
a->canBeInterrupted = false;
|
||||||
a->named = newName;
|
a->named = newName;
|
||||||
if(card->getAICustomCode().size() && card->controller()->isAI())
|
/***********do nothing***********/
|
||||||
|
if((card->controller()->isAI() &&
|
||||||
|
card->controller()->opponent()->isAI())||
|
||||||
|
!card->getAICustomCode().size())
|
||||||
|
{
|
||||||
|
MTGAbility * a2 = parseMagicLine("activate donothing", id, spell, card);
|
||||||
|
a2->oneShot = 1;
|
||||||
|
a2->canBeInterrupted = false;
|
||||||
|
return a2;
|
||||||
|
}
|
||||||
|
/*******************************/
|
||||||
|
else if(card->getAICustomCode().size() && card->controller()->isAI())
|
||||||
{
|
{
|
||||||
MTGAbility * a3 = parseMagicLine(card->getAICustomCode(), id, spell, card);
|
MTGAbility * a3 = parseMagicLine(card->getAICustomCode(), id, spell, card);
|
||||||
a3->oneShot = 1;
|
a3->oneShot = 1;
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ MTGCardInstance::MTGCardInstance(MTGCard * card, MTGPlayerCards * arg_belongs_to
|
|||||||
bypassTC = false;
|
bypassTC = false;
|
||||||
discarded = false;
|
discarded = false;
|
||||||
copiedID = getId();
|
copiedID = getId();
|
||||||
|
copiedSetID = 0;
|
||||||
LKIpower = power;
|
LKIpower = power;
|
||||||
LKItoughness = toughness;
|
LKItoughness = toughness;
|
||||||
cardistargetted = 0;
|
cardistargetted = 0;
|
||||||
@@ -143,6 +144,7 @@ void MTGCardInstance::copy(MTGCardInstance * card)
|
|||||||
spellTargetType = data->spellTargetType;
|
spellTargetType = data->spellTargetType;
|
||||||
alias = data->alias;
|
alias = data->alias;
|
||||||
copiedID = card->copiedID;
|
copiedID = card->copiedID;
|
||||||
|
copiedSetID = card->setId;
|
||||||
doubleFaced = data->doubleFaced;
|
doubleFaced = data->doubleFaced;
|
||||||
AICustomCode = data->AICustomCode;
|
AICustomCode = data->AICustomCode;
|
||||||
CrewAbility = data->CrewAbility;
|
CrewAbility = data->CrewAbility;
|
||||||
@@ -156,25 +158,9 @@ void MTGCardInstance::copy(MTGCardInstance * card)
|
|||||||
int castMethodBackUP = this->castMethod;
|
int castMethodBackUP = this->castMethod;
|
||||||
mtgid = source->getId();
|
mtgid = source->getId();
|
||||||
MTGCardInstance * oldStored = this->storedSourceCard;
|
MTGCardInstance * oldStored = this->storedSourceCard;
|
||||||
//test copy filtered
|
|
||||||
/*cardsAbilitiesFilter.clear();
|
|
||||||
for(unsigned int i = 0;i < card->cardsAbilities.size();i++)
|
|
||||||
{
|
|
||||||
MTGAbility * a = dynamic_cast<MTGAbility *>(card->cardsAbilities[i]);
|
|
||||||
if(a && a->source == card)
|
|
||||||
{
|
|
||||||
cardsAbilitiesFilter.push_back(a);
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
if(observer->players[1]->playMode == Player::MODE_TEST_SUITE)
|
mtgid = backupid; // found a way :)
|
||||||
mtgid = backupid; // there must be a way to get the token id...
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mtgid = card->getMTGId(); ///////////////////////////////////////////////////
|
|
||||||
setId = card->setId; // Copier/Cloner cards produces the same token...//
|
|
||||||
rarity = card->getRarity(); ///////////////////////////////////////////////////
|
|
||||||
}
|
|
||||||
castMethod = castMethodBackUP;
|
castMethod = castMethodBackUP;
|
||||||
backupTargets = this->backupTargets;
|
backupTargets = this->backupTargets;
|
||||||
storedCard = oldStored;
|
storedCard = oldStored;
|
||||||
|
|||||||
@@ -3262,6 +3262,7 @@ int MTGLegendRule::added(MTGCardInstance * card)
|
|||||||
{
|
{
|
||||||
MTGCardInstance * comparison = (*it).first;
|
MTGCardInstance * comparison = (*it).first;
|
||||||
if (comparison != card && comparison->controller() == card->controller() && !(comparison->getName().compare(card->getName())))
|
if (comparison != card && comparison->controller() == card->controller() && !(comparison->getName().compare(card->getName())))
|
||||||
|
if (!(game->getCurrentTargetChooser() || game->mLayers->actionLayer()->isWaitingForAnswer()))
|
||||||
destroy = 1;
|
destroy = 1;
|
||||||
}
|
}
|
||||||
if(destroy)
|
if(destroy)
|
||||||
@@ -3340,6 +3341,7 @@ int MTGPlaneWalkerRule::added(MTGCardInstance * card)
|
|||||||
{
|
{
|
||||||
MTGCardInstance * comparison = (*it).first;
|
MTGCardInstance * comparison = (*it).first;
|
||||||
if (comparison != card && comparison->types == card->types && comparison->controller() == card->controller())
|
if (comparison != card && comparison->types == card->types && comparison->controller() == card->controller())
|
||||||
|
if (!(game->getCurrentTargetChooser() || game->mLayers->actionLayer()->isWaitingForAnswer()))
|
||||||
destroy = 1;
|
destroy = 1;
|
||||||
}
|
}
|
||||||
if (destroy)
|
if (destroy)
|
||||||
|
|||||||
@@ -18,8 +18,16 @@ Token::Token(string _name, MTGCardInstance * source, int _power, int _toughness)
|
|||||||
rarity = Constants::RARITY_T;
|
rarity = Constants::RARITY_T;
|
||||||
name = _name;
|
name = _name;
|
||||||
if (name.size() && name[0] >= 97 && name[0] <= 122) name[0] -= 32; //Poor man's camelcase. We assume strings we get are either Camelcased or lowercase
|
if (name.size() && name[0] >= 97 && name[0] <= 122) name[0] -= 32; //Poor man's camelcase. We assume strings we get are either Camelcased or lowercase
|
||||||
|
if(source->isACopier && source->copiedSetID)
|
||||||
|
{
|
||||||
|
setMTGId(-source->copiedID);
|
||||||
|
setId = source->copiedSetID;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
setMTGId(-source->getMTGId());
|
setMTGId(-source->getMTGId());
|
||||||
setId = source->setId;
|
setId = source->setId;
|
||||||
|
}
|
||||||
model = this;
|
model = this;
|
||||||
data = this;
|
data = this;
|
||||||
owner = source->owner;
|
owner = source->owner;
|
||||||
|
|||||||
Reference in New Issue
Block a user