Skip to content

Instantly share code, notes, and snippets.

@jleclanche
Created March 11, 2017 13:43
Show Gist options
  • Save jleclanche/6d59bfe52666f3b9aebbb4ed22800980 to your computer and use it in GitHub Desktop.
Save jleclanche/6d59bfe52666f3b9aebbb4ed22800980 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
import json
import sys
from hearthstone import dbf
from hearthstone.enums import Locale
COLMAP = {
"CARD": {
"m_ID": "ID",
"m_NoteMiniGuid": "NOTE_MINI_GUID",
"m_LongGuid": "LONG_GUID",
"m_TextInHand": "TEXT_IN_HAND",
"m_CraftingEvent": "CRAFTING_EVENT",
"m_SuggestionWeight": "SUGGESTION_WEIGHT",
"m_ChangedManaCost": "CHANGED_MANA_COST",
"m_ChangedHealth": "CHANGED_HEALTH",
"m_ChangedAttack": "CHANGED_ATTACK",
"m_ChangedCardTextInHand": "CHANGED_CARD_TEXT_IN_HAND",
"m_ChangeVersion": "CHANGE_VERSION",
"m_Name": "NAME",
"m_FlavorText": "FLAVOR_TEXT",
"m_HowToGetCard": "HOW_TO_GET_CARD",
"m_HowToGetGoldCard": "HOW_TO_GET_GOLD_CARD",
"m_TargetArrowText": "TARGET_ARROW_TEXT",
"m_ArtistName": "ARTIST_NAME"
}, "CARD_TAG": {
"m_CardId": "CARD_ID",
"m_IsReferenceTag": "IS_REFERENCE_TAG",
"m_TagId": "TAG_ID",
"m_IsPowerKeywordTag": "IS_POWER_KEYWORD_TAG",
"m_TagValue": "TAG_VALUE",
"m_ID": "ID",
}
}
COLUMNS = {
"CARD": [
("ID", "Int"),
("NOTE_MINI_GUID", "String"),
("LONG_GUID", "String"),
("TEXT_IN_HAND", "LocString"),
("CRAFTING_EVENT", "String"),
("SUGGESTION_WEIGHT", "String"),
("CHANGED_MANA_COST", "Bool"),
("CHANGED_HEALTH", "Bool"),
("CHANGED_ATTACK", "Bool"),
("CHANGED_CARD_TEXT_IN_HAND", "Bool"),
("CHANGE_VERSION", "Int"),
("NAME", "LocString"),
("FLAVOR_TEXT", "LocString"),
("HOW_TO_GET_CARD", "LocString"),
("HOW_TO_GET_GOLD_CARD", "LocString"),
("TARGET_ARROW_TEXT", "LocString"),
("ARTIST_NAME", "String"),
], "CARD_TAG": [
("ID", "Int"),
("CARD_ID", "Int"),
("TAG_ID", "Int"),
("TAG_VALUE", "Int"),
("IS_REFERENCE_TAG", "Int"),
("IS_POWER_KEYWORD_TAG", "Int"),
]
}
def parse_carddbf(data, name):
ret = dbf.Dbf()
ret.name = name
for k, v in COLUMNS[name]:
ret.columns[k] = v
for record in data:
rr = {}
for newfield, colvalue in record.items():
fieldname = COLMAP[name][newfield]
coltype = ret.columns[fieldname]
if coltype == "LocString":
v = {}
if colvalue:
for loc, locstr in zip(colvalue["m_locales"], colvalue["m_locValues"]):
v[Locale(loc).name] = str(locstr)
rr[fieldname] = v
else:
rr[fieldname] = str(colvalue)
ret.records.append(rr)
return ret.to_xml()
def main():
for fn in sys.argv[1:]:
with open(fn, "r") as f:
data = json.load(f)
if data["m_Name"] in ("CARD", "CARD_TAG"):
dbf = parse_carddbf(data["Records"], data["m_Name"])
print(dbf.decode("utf-8"))
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment