Files
d2warehouse/contrib/items.py

79 lines
2.2 KiB
Python

import json
import csv
items = {}
item_patches = {
"tbk": {"class": "tome"},
"ibk": {"class": "tome"},
}
# build code -> names map
with open("item-names.json", encoding="utf-8-sig") as f:
names = json.load(f)
names = []
for entry in names:
code = entry["Key"]
if len(code) != 3 or not code.islower():
continue
name = entry["enUS"]
names[code] = {"name": name}
# Extract items
with open("armor.txt", newline="") as f:
reader = csv.DictReader(f, delimiter="\t")
for row in reader:
if row["name"] == "Expansion":
continue
code = row["code"]
assert code not in items
items[code] = {
"name": names[code] if code in names else row["name"],
"class": "armor",
"type": row["type"],
"stackable": row["stackable"] == "1",
"width": int(row["invwidth"]),
"height": int(row["invheight"]),
}
with open("weapons.txt", newline="") as f:
reader = csv.DictReader(f, delimiter="\t")
for row in reader:
if row["name"] == "Expansion":
continue
code = row["code"]
if code in items:
print("Already in", code)
assert code not in items
items[code] = {
"name": names[code] if code in names else row["name"],
"class": "weapon",
"type": row["type"],
"stackable": row["stackable"] == "1",
"width": int(row["invwidth"]),
"height": int(row["invheight"]),
}
with open("misc.txt", newline="") as f:
reader = csv.DictReader(f, delimiter="\t")
for row in reader:
if row["name"] == "Expansion":
continue
code = row["code"]
assert code not in items
items[code] = {
"name": names[code] if code in names else row["name"],
"class": "misc",
"type": row["type"],
"stackable": row["stackable"] == "1",
"width": int(row["invwidth"]),
"height": int(row["invheight"]),
}
for code, patch in item_patches.items():
items[code].update(patch)
with open("items.json", "w") as f:
json.dump(items, f, indent=4)