-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparse_mtgjson.py
More file actions
119 lines (87 loc) · 3.5 KB
/
parse_mtgjson.py
File metadata and controls
119 lines (87 loc) · 3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import sys
import json
import pickle
from MTG import static_abilities
# SET = 'M15'
SET = 'AllSets'
NAME = 'cube'
# only_parse_list = None
only_parse_list = set(open('parser/cube_card_list.txt').read().strip().split('\n'))
def star_or_int(c):
if c == '*':
return c
else:
return int(c)
def run():
with open('parser/data/%s.json' % SET) as f:
cards = json.load(f)
card_list = []
for _set in cards.values():
card_list.extend(_set['cards'])
fout = open("data/%s_cards.py" % NAME, "w")
fout.write("from MTG import card\n"
"from MTG import gameobject\n"
"from MTG import cardtype\n"
"from MTG import static_abilities\n"
"from MTG import mana\n\n")
name_to_id = {}
for card in card_list:
if only_parse_list and card["name"] not in only_parse_list:
continue
if card["name"] in name_to_id: # already parsed card (ignore reprints)
continue
try:
supertype = []
subtype = []
_abilities = []
if "multiverseid" in card:
ID = 'c' + str(card["multiverseid"])
else:
continue
# ID = 'c' + str(card["id"])
name = card["name"]
characteristics = {'name': name}
characteristics['text'] = card["text"] if "text" in card else ''
characteristics['color'] = card["colorIdentity"] if "colorIdentity" in card else ''
characteristics['mana_cost'] = (card["manaCost"].replace('{', '').replace('}', '')
if "manaCost" in card else '')
# types
if "supertypes" in card:
supertype = ('['
+ ', '.join(['cardtype.SuperType.' + i.upper()
for i in card["supertypes"]])
+ ']')
types = '[' + ', '.join(['cardtype.CardType.' + i.upper()
for i in card["types"]]) + ']'
if 'Creature' in card["types"]:
characteristics['power'], characteristics['toughness'] = star_or_int(
card["power"]), star_or_int(card["toughness"])
if "subtypes" in card:
characteristics["subtype"] = card["subtypes"]
# static abilities
texts = characteristics['text'].replace(' ', '_')
for ability in static_abilities.StaticAbilities._member_names_:
if ability in texts or ',_' + ability.lower() in texts.lower():
_abilities.append(ability)
if len(_abilities):
_abilities = '[static_abilities.StaticAbilities.' + \
', static_abilities.StaticAbilities.'.join(_abilities) + ']'
except:
print("\n\n")
print(card)
print(sys.exc_info())
pass
fout.write(
"""class {}(card.Card):
"{}"
def __init__(self):
super({}, self).__init__(gameobject.Characteristics(**{}, supertype={}, types={}, abilities={}))
""".format(ID, name, ID, characteristics, supertype, types, _abilities))
name_to_id[name] = ID
with open("data/%s_name_to_id_dict.pkl" % NAME, "wb") as f:
pickle.dump(name_to_id, f)
fout.close()
# try:
# card.find('text').text.replace(card.find('name').text, '<self>'))
if __name__ == '__main__':
run()