magarena/scripts/analyze_cards.scala

103 lines
2.4 KiB
Scala
Raw Normal View History

import scala.xml.pull._
import scala.xml._
import scala.io.Source
2011-07-01 19:05:57 -07:00
Console.err.println("loading effects from " + args(0))
val effects = Source.fromFile(args(0)).getLines.toList
2011-07-01 00:39:22 -07:00
2011-07-01 19:05:57 -07:00
Console.err.println("loading cards from " + args(1))
val src = XML.load(args(1))
2011-07-01 19:05:57 -07:00
Console.err.println("begin analysis")
for (card <- src \ "card") {
2011-07-01 19:05:57 -07:00
val name = (card \ "name").text
val cost = (card \ "cost").text
val loyalty = (card \ "loyalty").text
val pow = (card \ "pow").text
val tgh = (card \ "tgh").text
val types = card \ "typelist" \ "type"
val rules = card \ "rulelist" \ "rule"
var scriptable = rules
.filter(_.text.trim() != "")
.forall(x => isScriptable(name, x.text))
2011-07-01 19:05:57 -07:00
2011-07-01 00:39:22 -07:00
if (scriptable) {
2011-07-01 19:05:57 -07:00
Console.println(">" + name);
Console.println("value=?")
Console.println("rarity=?")
val typeStr = types
.filter(x => (x \ "@type").text == "card" || (x \ "@type").text == "super")
.map(_.text)
.mkString(",")
Console.println("type=" + typeStr);
val subtypeStr = types
.filter(x => (x \ "@type").text == "sub")
.map(_.text)
.mkString(",")
Console.println("subtype=" + subtypeStr)
Console.println("color=?")
Console.println("converted=?")
Console.println("cost=" + cost)
Console.println("power=" + pow )
Console.println("toughness=" + tgh)
Console.println("timing=?")
for (rule <- rules if rule.text.trim != "") {
Console.println("ability=" + rule.text)
2011-07-01 00:39:22 -07:00
}
Console.println()
2011-07-01 00:39:22 -07:00
}
}
def isScriptable(name:String, rule:String):Boolean = {
2011-07-01 19:05:57 -07:00
//normalize the rule text
2011-07-10 20:01:39 -07:00
//replace name with @
//remove cost
val norm = rule.trim.replace(name, "@").replaceAll("^[^\\\"]*: ", "")
2011-07-01 19:05:57 -07:00
//check if this is in the engine
if (effects.exists(x => x.equalsIgnoreCase(norm))) {
2011-07-01 00:39:22 -07:00
return true
}
2011-07-01 19:05:57 -07:00
//if not, print it out
//Console.err.println(norm + "\t" + name);
2011-07-01 00:39:22 -07:00
return false
}
/*
Contains the information about the cards that is needed to play the
game.
<cardlist>
<card>
<name></name>
<cost></cost>
<loyalty></loyalty>
<typelist>
<type></type>
...
</typelist>
<pow></pow>
<tgh></tgh>
<hand></hand>
<life></life>
<rulelist>
<rule reminder=""></rule>
...
</rulelist>
<multi type="">
...
</multi>
</card>
...
</cardlist>
*/