Kicker
TODO: Auto kicker and Affinity in Kicker....
This commit is contained in:
@@ -488,18 +488,44 @@ int MTGKickerRule::isReactingToClick(MTGCardInstance * card, ManaCost *)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
ManaCost * playerMana = player->getManaPool();
|
ManaCost * playerMana = player->getManaPool();
|
||||||
ManaCost * withKickerCost= NEW ManaCost(card->model->data->getManaCost());
|
ManaCost * mainCost = card->computeNewCost(card,NEW ManaCost(card->model->data->getManaCost()),card->getManaCost());
|
||||||
if(card->getIncreasedManaCost()->getConvertedCost())
|
if(mainCost->extraCosts)
|
||||||
withKickerCost->add(card->getIncreasedManaCost());
|
for(unsigned int i = 0; i < mainCost->extraCosts->costs.size();i++)
|
||||||
if(card->getReducedManaCost()->getConvertedCost())
|
{
|
||||||
withKickerCost->remove(card->getReducedManaCost());
|
mainCost->extraCosts->costs[i]->setSource(card);
|
||||||
withKickerCost->add(card->model->data->getManaCost()->getKicker());
|
}
|
||||||
if(!playerMana->canAfford(withKickerCost))
|
//compute leftover/unused reducer cost (todo affinity)
|
||||||
|
int leftoverC = ((card->getReducedManaCost()->getCost(0) + card->getReducedManaCost()->getCost(6)) - (card->getManaCost()->getCost(0) + card->getManaCost()->getCost(6) + card->getIncreasedManaCost()->getCost(0) + card->getIncreasedManaCost()->getCost(6)));
|
||||||
|
int leftoverG = (card->getReducedManaCost()->getCost(1)) - (card->getManaCost()->getCost(1) + card->getIncreasedManaCost()->getCost(1));
|
||||||
|
int leftoverU = (card->getReducedManaCost()->getCost(2)) - (card->getManaCost()->getCost(2) + card->getIncreasedManaCost()->getCost(2));
|
||||||
|
int leftoverR = (card->getReducedManaCost()->getCost(3)) - (card->getManaCost()->getCost(3) + card->getIncreasedManaCost()->getCost(3));
|
||||||
|
int leftoverB = (card->getReducedManaCost()->getCost(4)) - (card->getManaCost()->getCost(4) + card->getIncreasedManaCost()->getCost(4));
|
||||||
|
int leftoverW = (card->getReducedManaCost()->getCost(5)) - (card->getManaCost()->getCost(5) + card->getIncreasedManaCost()->getCost(5));
|
||||||
|
|
||||||
|
ManaCost * withKickerCost= NEW ManaCost(card->model->data->getManaCost()->getKicker());
|
||||||
|
|
||||||
|
if (leftoverC)
|
||||||
|
withKickerCost->remove(0,leftoverC);
|
||||||
|
if (leftoverG)
|
||||||
|
withKickerCost->remove(1,leftoverG);
|
||||||
|
if (leftoverU)
|
||||||
|
withKickerCost->remove(2,leftoverU);
|
||||||
|
if (leftoverR)
|
||||||
|
withKickerCost->remove(3,leftoverR);
|
||||||
|
if (leftoverB)
|
||||||
|
withKickerCost->remove(4,leftoverB);
|
||||||
|
if (leftoverW)
|
||||||
|
withKickerCost->remove(5,leftoverW);
|
||||||
|
|
||||||
|
mainCost->add(withKickerCost);
|
||||||
|
if(!playerMana->canAfford(mainCost))
|
||||||
{
|
{
|
||||||
delete withKickerCost;
|
delete withKickerCost;
|
||||||
|
delete mainCost;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
delete withKickerCost;
|
delete withKickerCost;
|
||||||
|
delete mainCost;
|
||||||
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@@ -511,16 +537,42 @@ int MTGKickerRule::reactToClick(MTGCardInstance * card)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
Player * player = game->currentlyActing();
|
Player * player = game->currentlyActing();
|
||||||
ManaCost * withKickerCost= NEW ManaCost(card->model->data->getManaCost());//using pointers here alters the real cost of the card.
|
ManaCost * mainCost = card->computeNewCost(card,NEW ManaCost(card->model->data->getManaCost()),card->getManaCost());
|
||||||
if(card->getIncreasedManaCost()->getConvertedCost())
|
if(mainCost->extraCosts)
|
||||||
withKickerCost->add(card->getIncreasedManaCost());
|
for(unsigned int i = 0; i < mainCost->extraCosts->costs.size();i++)
|
||||||
if(card->getReducedManaCost()->getConvertedCost())
|
{
|
||||||
withKickerCost->remove(card->getReducedManaCost());
|
mainCost->extraCosts->costs[i]->setSource(card);
|
||||||
|
}
|
||||||
|
//compute leftover/unused reducer cost (todo affinity)
|
||||||
|
int leftoverC = ((card->getReducedManaCost()->getCost(0) + card->getReducedManaCost()->getCost(6)) - (card->getManaCost()->getCost(0) + card->getManaCost()->getCost(6) + card->getIncreasedManaCost()->getCost(0) + card->getIncreasedManaCost()->getCost(6)));
|
||||||
|
int leftoverG = (card->getReducedManaCost()->getCost(1)) - (card->getManaCost()->getCost(1) + card->getIncreasedManaCost()->getCost(1));
|
||||||
|
int leftoverU = (card->getReducedManaCost()->getCost(2)) - (card->getManaCost()->getCost(2) + card->getIncreasedManaCost()->getCost(2));
|
||||||
|
int leftoverR = (card->getReducedManaCost()->getCost(3)) - (card->getManaCost()->getCost(3) + card->getIncreasedManaCost()->getCost(3));
|
||||||
|
int leftoverB = (card->getReducedManaCost()->getCost(4)) - (card->getManaCost()->getCost(4) + card->getIncreasedManaCost()->getCost(4));
|
||||||
|
int leftoverW = (card->getReducedManaCost()->getCost(5)) - (card->getManaCost()->getCost(5) + card->getIncreasedManaCost()->getCost(5));
|
||||||
|
|
||||||
|
ManaCost * withKickerCost= NEW ManaCost(card->model->data->getManaCost()->getKicker());
|
||||||
|
|
||||||
|
if (leftoverC)
|
||||||
|
withKickerCost->remove(0,leftoverC);
|
||||||
|
if (leftoverG)
|
||||||
|
withKickerCost->remove(1,leftoverG);
|
||||||
|
if (leftoverU)
|
||||||
|
withKickerCost->remove(2,leftoverU);
|
||||||
|
if (leftoverR)
|
||||||
|
withKickerCost->remove(3,leftoverR);
|
||||||
|
if (leftoverB)
|
||||||
|
withKickerCost->remove(4,leftoverB);
|
||||||
|
if (leftoverW)
|
||||||
|
withKickerCost->remove(5,leftoverW);
|
||||||
|
|
||||||
|
|
||||||
if (card->model->data->getManaCost()->getKicker()->isMulti)
|
if (card->model->data->getManaCost()->getKicker()->isMulti)
|
||||||
{
|
{
|
||||||
while(player->getManaPool()->canAfford(withKickerCost))
|
mainCost->add(withKickerCost);
|
||||||
|
while(player->getManaPool()->canAfford(mainCost))
|
||||||
{
|
{
|
||||||
withKickerCost->add(card->model->data->getManaCost()->getKicker());
|
mainCost->add(withKickerCost);
|
||||||
card->kicked += 1;
|
card->kicked += 1;
|
||||||
}
|
}
|
||||||
card->kicked -= 1;
|
card->kicked -= 1;
|
||||||
@@ -530,29 +582,32 @@ int MTGKickerRule::reactToClick(MTGCardInstance * card)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
withKickerCost->add(card->model->data->getManaCost()->getKicker());
|
mainCost->add(withKickerCost);
|
||||||
card->paymenttype = MTGAbility::PUT_INTO_PLAY_WITH_KICKER;
|
card->paymenttype = MTGAbility::PUT_INTO_PLAY_WITH_KICKER;
|
||||||
}
|
}
|
||||||
if (withKickerCost->isExtraPaymentSet())
|
if (mainCost->isExtraPaymentSet())
|
||||||
{
|
{
|
||||||
if (!game->targetListIsSet(card))
|
if (!game->targetListIsSet(card))
|
||||||
{
|
{
|
||||||
delete withKickerCost;
|
delete mainCost;
|
||||||
|
delete withKickerCost;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
withKickerCost->setExtraCostsAction(this, card);
|
mainCost->setExtraCostsAction(this, card);
|
||||||
game->mExtraPayment = withKickerCost->extraCosts;
|
game->mExtraPayment = mainCost->extraCosts;
|
||||||
|
delete mainCost;
|
||||||
delete withKickerCost;
|
delete withKickerCost;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ManaCost * previousManaPool = NEW ManaCost(player->getManaPool());
|
ManaCost * previousManaPool = NEW ManaCost(player->getManaPool());
|
||||||
player->getManaPool()->pay(withKickerCost);
|
player->getManaPool()->pay(mainCost);
|
||||||
withKickerCost->doPayExtra();
|
mainCost->doPayExtra();
|
||||||
ManaCost * spellCost = previousManaPool->Diff(player->getManaPool());
|
ManaCost * spellCost = previousManaPool->Diff(player->getManaPool());
|
||||||
|
delete mainCost;
|
||||||
delete withKickerCost;
|
delete withKickerCost;
|
||||||
delete previousManaPool;
|
delete previousManaPool;
|
||||||
if (card->isLand())
|
if (card->isLand())
|
||||||
|
|||||||
Reference in New Issue
Block a user