Erwan
-fix a crash when the AI tries to use a spell with X in the manacost
This commit is contained in:
20
projects/mtg/bin/Res/test/manual/howl_from_beyond_ai.txt
Normal file
20
projects/mtg/bin/Res/test/manual/howl_from_beyond_ai.txt
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
#Bug:Does ai correctly cast Howl From Beyond on its creatures ?
|
||||||
|
[INIT]
|
||||||
|
SECONDMAIN
|
||||||
|
[PLAYER1]
|
||||||
|
inplay:grizzly bears,raging goblin,goblin king
|
||||||
|
[PLAYER2]
|
||||||
|
hand:howl from beyond
|
||||||
|
inplay:air elemental,swamp,plains,swamp,mountain,forest
|
||||||
|
[DO]
|
||||||
|
ai
|
||||||
|
ai
|
||||||
|
[ASSERT]
|
||||||
|
COMBATEND
|
||||||
|
[PLAYER1]
|
||||||
|
inplay:Wildslayer Elves,Armadillo Cloak
|
||||||
|
life:25
|
||||||
|
[PLAYER2]
|
||||||
|
graveyard:grizzly bears
|
||||||
|
life:17
|
||||||
|
[END]
|
||||||
19
projects/mtg/bin/Res/test/manual/serpent_assassin_ai.txt
Normal file
19
projects/mtg/bin/Res/test/manual/serpent_assassin_ai.txt
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
#Bug:Does ai correctly cast Serpent Assassin on opponent's creatures ?
|
||||||
|
[INIT]
|
||||||
|
SECONDMAIN
|
||||||
|
[PLAYER1]
|
||||||
|
[PLAYER2]
|
||||||
|
hand:serpent assassin
|
||||||
|
inplay:air elemental,swamp,plains,swamp,mountain,forest,raging goblin,goblin king
|
||||||
|
[DO]
|
||||||
|
ai
|
||||||
|
ai
|
||||||
|
[ASSERT]
|
||||||
|
COMBATEND
|
||||||
|
[PLAYER1]
|
||||||
|
inplay:Wildslayer Elves,Armadillo Cloak
|
||||||
|
life:25
|
||||||
|
[PLAYER2]
|
||||||
|
graveyard:grizzly bears
|
||||||
|
life:17
|
||||||
|
[END]
|
||||||
@@ -80,6 +80,7 @@ class Spell: public Interruptible {
|
|||||||
TargetChooser * tc;
|
TargetChooser * tc;
|
||||||
ManaCost * cost;
|
ManaCost * cost;
|
||||||
int payResult;
|
int payResult;
|
||||||
|
int computeX(MTGCardInstance * card);
|
||||||
Spell(MTGCardInstance* _source);
|
Spell(MTGCardInstance* _source);
|
||||||
Spell(int id, MTGCardInstance* _source, TargetChooser *_tc, ManaCost * _cost, int payResult);
|
Spell(int id, MTGCardInstance* _source, TargetChooser *_tc, ManaCost * _cost, int payResult);
|
||||||
~Spell();
|
~Spell();
|
||||||
|
|||||||
@@ -30,10 +30,8 @@ public:
|
|||||||
int intValue;
|
int intValue;
|
||||||
|
|
||||||
int computeX(Spell * spell, MTGCardInstance * card){
|
int computeX(Spell * spell, MTGCardInstance * card){
|
||||||
ManaCost * c = spell->cost->Diff(card->getManaCost());
|
if (spell) return spell->computeX(card);
|
||||||
int x = c->getCost(Constants::MTG_NB_COLORS);
|
return 1; //this should only hapen when the ai calls the ability. This is to give it an idea of the "direction" of X (positive/negative)
|
||||||
delete c;
|
|
||||||
return x;
|
|
||||||
}
|
}
|
||||||
WParsedInt(int value = 0){
|
WParsedInt(int value = 0){
|
||||||
intValue = value;
|
intValue = value;
|
||||||
|
|||||||
@@ -121,6 +121,13 @@ Spell::Spell(int id, MTGCardInstance * _source, TargetChooser * tc, ManaCost * _
|
|||||||
from = _source->getCurrentZone();
|
from = _source->getCurrentZone();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Spell::computeX(MTGCardInstance * card){
|
||||||
|
ManaCost * c = cost->Diff(card->getManaCost());
|
||||||
|
int x = c->getCost(Constants::MTG_NB_COLORS);
|
||||||
|
delete c;
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
bool Spell::kickerWasPaid(){
|
bool Spell::kickerWasPaid(){
|
||||||
return (payResult == ManaCost::MANA_PAID_WITH_KICKER);
|
return (payResult == ManaCost::MANA_PAID_WITH_KICKER);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -699,10 +699,8 @@ int AbilityFactory::abilityEfficiency(MTGAbility * a, Player * p, int mode){
|
|||||||
|
|
||||||
//Returns the "X" cost that was paid for a spell
|
//Returns the "X" cost that was paid for a spell
|
||||||
int AbilityFactory::computeX(Spell * spell, MTGCardInstance * card){
|
int AbilityFactory::computeX(Spell * spell, MTGCardInstance * card){
|
||||||
ManaCost * c = spell->cost->Diff(card->getManaCost());
|
if (spell) return spell->computeX(card);
|
||||||
int x = c->getCost(Constants::MTG_NB_COLORS);
|
return 0;
|
||||||
delete c;
|
|
||||||
return x;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Some basic functionalities that can be added automatically in the text file
|
//Some basic functionalities that can be added automatically in the text file
|
||||||
|
|||||||
Reference in New Issue
Block a user