mirror of
https://github.com/mhwikicn/mhdos-armor-set-searcher
synced 2025-12-05 20:39:04 +08:00
implement basic equipment and decos script
This commit is contained in:
parent
eb67470b6e
commit
3c141f870c
95
scripts/get-equipment-decos.py
Normal file
95
scripts/get-equipment-decos.py
Normal file
@ -0,0 +1,95 @@
|
||||
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"]
|
||||
|
||||
# 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))
|
||||
Loading…
Reference in New Issue
Block a user