scorting.removeType(Scoring.LAND_DESTROY);
for (int i=0; i< list.size(); i++)
{
CardSim card = list.getCard(i);
AIEnhancedCardHints aHints = AIEnhancedCardHints.getHints(card);
if (aHints.hasHint(HintTargetTypes.TY_LAND_TO_GRAVE))
{
if (!(aHints.hasHint(HintTargetCount.CT_ALL_CARDS)))
{
result = card;
D.addLog("Found: "+result,debugLevel);
}
}
}
break;
}
case Scoring.LAND:
{
D.addLog("Taken LAND",debugLevel);
scorting.removeType(Scoring.LAND);
CardSimList l = list.getSubListByType("Land");
if (l.size()>0)
{
result = l.getCard(0);
break;
}
for (int i=0; i< list.size(); i++)
{
CardSim card = list.getCard(i);
AIEnhancedCardHints aHints = AIEnhancedCardHints.getHints(card);
if (aHints.hasHint(HintTargetTypes.TY_LIBRARY_TO_HAND))
if ((aHints.getHintValue(HintTargetRestrictions.TR_CARD_TYPE_NEED).toUpperCase().indexOf("Land") != -1)
||
(aHints.getHintValue(HintTargetRestrictions.TR_CARD_TYPE_RESTRICTION).toUpperCase().indexOf("Land") == -1))
{
result = card;
D.addLog("Found: "+result,debugLevel);
break;
}
}
if (result == null)
for (int i=0; i< list.size(); i++)
{
CardSim card = list.getCard(i);
AIEnhancedCardHints aHints = AIEnhancedCardHints.getHints(card);
if (aHints.hasHint(HintTargetTypes.TY_LIBRARY_TO_LAND))
{
result = card;
D.addLog("Found: "+result,debugLevel);
break;
}
}
break;
}
case Scoring.HEALTH:
{
D.addLog("Taken HEALTH",debugLevel);
scorting.removeType(Scoring.HEALTH);
for (int i=0; i< list.size(); i++)
{
CardSim card = list.getCard(i);
AIEnhancedCardHints aHints = AIEnhancedCardHints.getHints(card);
if (aHints.hasHint(HintTargetTypes.TY_HEAL))
{
result = card;
D.addLog("Found: "+result,debugLevel);
break;
}
}
break;
}
case Scoring.DAMAGE:
{
D.addLog("Taken DAMAGE",debugLevel);
scorting.removeType(Scoring.DAMAGE);
String[] h={"EFFECT_ONE_PLAYER_DAMAGE"};
for (int i=0; i< list.size(); i++)
{
CardSim card = list.getCard(i);
AIEnhancedCardHints aHints = AIEnhancedCardHints.getHints(card);
if ((aHints.hasHint(HintTargetTypes.TY_DAMAGE))
|| (aHints.hasHint(HintSourceTypes.SY_DAMAGE)))
{
if ((aHints.hasHint(HintTargetRestrictions.TR_CARD_OPPONENT))
|| (aHints.hasHint(HintSourceRestrictions.SR_CARD_OPPONENT)))
{
if (!(card.isCreature()))
result = card;
}
}
}
break;
}
case Scoring.CREATURE:
{
D.addLog("Taken CREATURE",debugLevel);
scorting.removeType(Scoring.CREATURE);
CardSimList l = list.getSubListByType("Creature");
boolean testMana=true;
if (initiator!=null)
{
AIEnhancedCardHints iHints = AIEnhancedCardHints.getHints(initiator);
if (iHints.hasHint(HintTargetTypes.TY_LIBRARY_TO_FIELD))
{
testMana=false;
}
if (iHints.hasHint(HintTargetTypes.TY_HAND_TO_FIELD))
{
testMana=false;
}
}
if (testMana)
l = onlyEnoughManaGeneral(l, lands);
l = l.sortListByManaCost();
if (l.size()>0)
{
result = l.getCard(l.size()-1);
}
break;
}
case Scoring.CREATURE_DAMAGE:
{
D.addLog("Taken CREATURE_DAMAGE",debugLevel);
scorting.removeType(Scoring.CREATURE_DAMAGE);
// NOT checked if one of the sorcueries does damage to the player!
// (e.g. "Rain of Daggers")
for (int i=0; i< list.size(); i++)
{
CardSim card = list.getCard(i);
AIEnhancedCardHints aHints = AIEnhancedCardHints.getHints(card);
if ( ((aHints.hasHint(HintTargetTypes.TY_FIELD_TO_GRAVE)) && (aHints.hasHint(HintTargetRestrictions.TR_CARD_OPPONENT)))
|| ((aHints.hasHint(HintSourceTypes.SY_FIELD_TO_GRAVE)) && (aHints.hasHint(HintSourceRestrictions.SR_CARD_OPPONENT)))
)
{
{
result = card;
break;
}
}
}
if (result == null)
{
for (int i=0; i< list.size(); i++)
{
CardSim card = list.getCard(i);
AIEnhancedCardHints aHints = AIEnhancedCardHints.getHints(card);
if ( ((aHints.hasHint(HintTargetTypes.TY_FIELD_TO_HAND)) && (aHints.hasHint(HintTargetRestrictions.TR_CARD_OPPONENT)))
|| ((aHints.hasHint(HintSourceTypes.SY_FIELD_TO_HAND)) && (aHints.hasHint(HintSourceRestrictions.SR_CARD_OPPONENT)))
|| ((aHints.hasHint(HintTargetTypes.TY_LIBRARY_TOP)) && (aHints.hasHint(HintTargetRestrictions.TR_CARD_OPPONENT)))
)
{
result = card;
break;
}
}
}
if (result == null)
{
for (int i=0; i< list.size(); i++)
{
CardSim card = list.getCard(i);
AIEnhancedCardHints aHints = AIEnhancedCardHints.getHints(card);
if ( ((aHints.hasHint(HintTargetTypes.TY_DAMAGE)) && (aHints.hasHint(HintTargetRestrictions.TR_CARD_OPPONENT)))
|| ((aHints.hasHint(HintSourceTypes.SY_DAMAGE)) && (aHints.hasHint(HintSourceRestrictions.SR_CARD_OPPONENT)))
)
{
result = card;
break;
}
}
}
break;
}
case Scoring.HAND:
{
D.addLog("Taken HAND",debugLevel);
scorting.removeType(Scoring.HAND);
String[] h={"EFFECT_WHEN_DRAW_CARD"};
for (int i=0; i< list.size(); i++)
{
CardSim card = list.getCard(i);
AIEnhancedCardHints aHints = AIEnhancedCardHints.getHints(card);
if ( ((aHints.hasHint(HintTargetTypes.TY_LIBRARY_TO_HAND)) && (aHints.hasHint(HintTargetRestrictions.TR_CARD_PLAYER)))
|| ((aHints.hasHint(HintSourceTypes.SY_LIBRARY_TO_HAND)) && (aHints.hasHint(HintSourceRestrictions.SR_CARD_PLAYER)))
)
{
result = card;
break;
}