mirror of
https://github.com/mhwikicn/mhdos-armor-set-searcher
synced 2025-12-06 04:59:04 +08:00
107 lines
2.9 KiB
Python
107 lines
2.9 KiB
Python
import json
|
|
|
|
|
|
def reorder_resistances(raw: list) -> list:
|
|
return [
|
|
raw[0],
|
|
raw[1],
|
|
raw[3],
|
|
raw[2],
|
|
raw[4],
|
|
]
|
|
|
|
|
|
def map_skills_map(raw: dict, skill_ids: dict) -> dict:
|
|
skills = {}
|
|
for s in raw:
|
|
n = s["k"]
|
|
id = skill_ids[n]
|
|
try:
|
|
v = int(s["q"])
|
|
except:
|
|
v = 0 # torso up
|
|
skills[id] = v
|
|
|
|
return skills
|
|
|
|
|
|
def map_deco(raw: dict, skill_ids: dict) -> dict:
|
|
return {
|
|
"name": raw["name"],
|
|
"rarity": raw["rarity"],
|
|
"requiredSlots": raw["slots"],
|
|
"skills": map_skills_map(raw["skills"], skill_ids),
|
|
}
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# read input
|
|
with open("./raw-decos.json") as f:
|
|
decos = list(json.loads(f.read()))
|
|
with open("./raw-armor.json") as f:
|
|
armor = list(json.loads(f.read()))
|
|
with open("../data/skill-names.json") as f:
|
|
skill_names = dict(json.loads(f.read()))
|
|
|
|
# reverse skill names
|
|
skill_ids = {v: int(k) for k, v in skill_names.items()}
|
|
|
|
# decorations
|
|
modeled_decos = [map_deco(x, skill_ids) for x in decos]
|
|
|
|
# iterate over armor categories
|
|
pieces_per_category = []
|
|
for (cat_index, armor_category) in enumerate(armor):
|
|
pieces_of_cat = []
|
|
# iterate over pieces of that category
|
|
for piece in armor_category["armor"]:
|
|
# get attributes
|
|
name = piece["name"]
|
|
if name == "None":
|
|
continue
|
|
defe = piece["defense"]
|
|
|
|
# skip if unacquirable
|
|
try:
|
|
piece["acquire"]
|
|
continue
|
|
except:
|
|
pass
|
|
|
|
# get type
|
|
try:
|
|
x = piece["hunterClass"]
|
|
type = 1 if x == "Blademaster" else 2
|
|
except:
|
|
type = 0
|
|
|
|
# get skills
|
|
try:
|
|
skills = piece["skills"]
|
|
except:
|
|
skills = []
|
|
|
|
# model and push piece
|
|
modeled_piece = {
|
|
"category": cat_index,
|
|
"name": name,
|
|
"rarity": piece["rarity"],
|
|
"skills": map_skills_map(skills, skill_ids),
|
|
"slots": piece["slots"][-1],
|
|
"defense": {
|
|
"base": defe[0],
|
|
"max": defe[-1],
|
|
},
|
|
"type": type,
|
|
"resistance": reorder_resistances(piece["resistances"]),
|
|
}
|
|
pieces_of_cat.append(modeled_piece)
|
|
pieces_per_category.append(pieces_of_cat)
|
|
|
|
# save files
|
|
for (i, cat_name) in enumerate(["head", "chest", "arms", "waist", "legs"]):
|
|
with open(f"../data/{cat_name}.json", "w") as f:
|
|
f.write(json.dumps(pieces_per_category[i], indent=4, sort_keys=True))
|
|
with open("../data/decorations.json", "w") as f:
|
|
f.write(json.dumps(modeled_decos, indent=4))
|