mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
- Improved the AI of AF ChangeZone with Hidden origin.
- Changed Exhume to make use of it.
This commit is contained in:
@@ -2,8 +2,8 @@ Name:Exhume
|
|||||||
ManaCost:1 B
|
ManaCost:1 B
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
Text:no text
|
Text:no text
|
||||||
A:SP$ ChangeZone | Cost$ 1 B | Origin$ Graveyard | Destination$ Battlefield | Defined$ Opponent | ChangeType$ Creature.YouDontCtrl | ChangeNum$ 1 | Hidden$ True | SubAbility$ SVar=DBChangeZoneYou | SpellDescription$ Each player puts a creature card from his or her graveyard onto the battlefield.
|
A:SP$ ChangeZone | Cost$ 1 B | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.YouCtrl | ChangeNum$ 1 | Hidden$ True | SubAbility$ SVar=DBChangeZoneOpp | SpellDescription$ Each player puts a creature card from his or her graveyard onto the battlefield.
|
||||||
SVar:DBChangeZoneYou:DB$ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.YouCtrl | ChangeNum$ 1 | Hidden$ True
|
SVar:DBChangeZoneOpp:DB$ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.YouDontCtrl | Defined$ Opponent | ChangeNum$ 1 | Hidden$ True
|
||||||
SVar:Rarity:Common
|
SVar:Rarity:Common
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/exhume.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/exhume.jpg
|
||||||
SetInfo:USG|Common|http://magiccards.info/scans/en/us/134.jpg
|
SetInfo:USG|Common|http://magiccards.info/scans/en/us/134.jpg
|
||||||
|
|||||||
@@ -161,10 +161,10 @@ public class AbilityFactory_ChangeZone {
|
|||||||
String origin = params.get("Origin");
|
String origin = params.get("Origin");
|
||||||
|
|
||||||
if (isHidden(origin, params.containsKey("Hidden")))
|
if (isHidden(origin, params.containsKey("Hidden")))
|
||||||
return changeHiddenTrigger(af, sa, mandatory);
|
return changeHiddenTriggerAI(af, sa, mandatory);
|
||||||
|
|
||||||
else if (isKnown(origin))
|
else if (isKnown(origin))
|
||||||
return changeKnownOriginTrigger(af, sa, mandatory);
|
return changeKnownOriginTriggerAI(af, sa, mandatory);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -207,6 +207,7 @@ public class AbilityFactory_ChangeZone {
|
|||||||
HashMap<String,String> params = af.getMapParams();
|
HashMap<String,String> params = af.getMapParams();
|
||||||
//String destination = params.get("Destination");
|
//String destination = params.get("Destination");
|
||||||
String origin = params.get("Origin");
|
String origin = params.get("Origin");
|
||||||
|
String destination = params.get("Destination");
|
||||||
|
|
||||||
if (abCost != null){
|
if (abCost != null){
|
||||||
// AI currently disabled for these costs
|
// AI currently disabled for these costs
|
||||||
@@ -244,26 +245,30 @@ public class AbilityFactory_ChangeZone {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for(Player p : pDefined){
|
for(Player p : pDefined){
|
||||||
|
CardList list = new CardList();
|
||||||
if (origin.equals("Hand")){
|
if (origin.equals("Hand")){
|
||||||
CardList hand = AllZoneUtil.getPlayerHand(p);
|
list = AllZoneUtil.getPlayerHand(p);
|
||||||
if (hand.size() == 0)
|
if (list.size() == 0)
|
||||||
return false;
|
|
||||||
|
|
||||||
if (p.isComputer()){
|
|
||||||
if (params.containsKey("ChangeType")){
|
|
||||||
hand = filterListByType(hand, params, "ChangeType", sa);
|
|
||||||
if (hand.size() == 0)
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
else if (origin.equals("Graveyard")){
|
||||||
// TODO: add some more improvements based on Destination and Type
|
list = AllZoneUtil.getPlayerGraveyard(p);
|
||||||
|
if (list.size() == 0)
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
else if (origin.equals("Library")){
|
else if (origin.equals("Library")){
|
||||||
CardList library = AllZoneUtil.getPlayerCardsInLibrary(p);
|
list = AllZoneUtil.getPlayerCardsInLibrary(p);
|
||||||
if (library.size() == 0)
|
if (list.size() == 0)
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
// TODO: add some more improvements based on Destination and Type
|
if (p.isComputer() && !list.isEmpty() &&
|
||||||
|
(destination.equals("Hand") || destination.equals("Battlefield") ||
|
||||||
|
(destination.equals("Graveyard") && origin.equals("Library")))){
|
||||||
|
if (params.containsKey("ChangeType")){
|
||||||
|
list = filterListByType(list, params, "ChangeType", sa);
|
||||||
|
if (list.size() == 0)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (origin.equals("Sideboard")){
|
else if (origin.equals("Sideboard")){
|
||||||
// todo: once sideboard is added
|
// todo: once sideboard is added
|
||||||
@@ -294,7 +299,7 @@ public class AbilityFactory_ChangeZone {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean changeHiddenTrigger(AbilityFactory af, SpellAbility sa, boolean mandatory){
|
private static boolean changeHiddenTriggerAI(AbilityFactory af, SpellAbility sa, boolean mandatory){
|
||||||
// Fetching should occur fairly often as it helps cast more spells, and have access to more mana
|
// Fetching should occur fairly often as it helps cast more spells, and have access to more mana
|
||||||
if (!ComputerUtil.canPayCost(sa))
|
if (!ComputerUtil.canPayCost(sa))
|
||||||
return false;
|
return false;
|
||||||
@@ -951,7 +956,7 @@ public class AbilityFactory_ChangeZone {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean changeKnownOriginTrigger(AbilityFactory af, SpellAbility sa, boolean mandatory){
|
private static boolean changeKnownOriginTriggerAI(AbilityFactory af, SpellAbility sa, boolean mandatory){
|
||||||
if (!ComputerUtil.canPayCost(sa))
|
if (!ComputerUtil.canPayCost(sa))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user