a fix for a strange edge case where ai was caught in a trap trying to activate inkmoth lands becomes ability. it would proceed to contenue to do so even tho it was not producing any results.
This commit is contained in:
@@ -1541,6 +1541,29 @@ int AIPlayerBaka::Act(float dt)
|
|||||||
action->Act();
|
action->Act();
|
||||||
SAFE_DELETE(action);
|
SAFE_DELETE(action);
|
||||||
clickstream.pop();
|
clickstream.pop();
|
||||||
|
if (clickstream.empty())
|
||||||
|
{
|
||||||
|
//check if we're done executing our actions
|
||||||
|
//then if we were interrupting cancel the offer
|
||||||
|
//or request next game phase.
|
||||||
|
//this help relieve the ai in edge cases where it can still trip over it's own clickstream
|
||||||
|
//as exhabited when multiple inkmoth's are in play without this condiational.
|
||||||
|
if (g->isInterrupting == this)
|
||||||
|
{
|
||||||
|
g->mLayers->stackLayer()->cancelInterruptOffer(); //endOfInterruption();
|
||||||
|
//this brings us inline with MTG rules. as we shouldnt be able to interrupt our own action.
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g->userRequestNextGamePhase();
|
||||||
|
//this does not impact the amount of cards ai will play in a phase as
|
||||||
|
//we can only go ahead with a request for next phase if nothing is happening.
|
||||||
|
//ei: nothing on stack, nothing waiting for targets ect.
|
||||||
|
//what this does is safegaurd against ai getting trapped in a loop
|
||||||
|
//where it tries to repeatedly cast an ability it cant afford
|
||||||
|
//such as inkmoth lands, "becomes" ability which it find just too tempting.
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user