From 9b86920e82feae1cfd83773cec2e9c4f2d1931a9 Mon Sep 17 00:00:00 2001 From: mhwikicn Date: Fri, 29 Aug 2025 15:24:14 +0800 Subject: [PATCH] Update get-equipment-decos.py --- scripts/get-equipment-decos.py | 90 ++++++++++++++++++++-------------- 1 file changed, 52 insertions(+), 38 deletions(-) diff --git a/scripts/get-equipment-decos.py b/scripts/get-equipment-decos.py index 6c3012b..a5a0a23 100644 --- a/scripts/get-equipment-decos.py +++ b/scripts/get-equipment-decos.py @@ -1,6 +1,5 @@ import json - def reorder_resistances(raw: list) -> list: return [ raw[0], @@ -10,7 +9,6 @@ def reorder_resistances(raw: list) -> list: raw[4], ] - def map_skills_map(raw: dict, skill_ids: dict) -> dict: skills = {} for s in raw: @@ -21,10 +19,8 @@ def map_skills_map(raw: dict, skill_ids: dict) -> dict: except: v = 0 # torso up skills[id] = v - return skills - def map_deco(raw: dict, skill_ids: dict) -> dict: return { "name": raw["name"], @@ -33,6 +29,56 @@ def map_deco(raw: dict, skill_ids: dict) -> dict: "skills": map_skills_map(raw["skills"], skill_ids), } +def process_armor_piece(piece, cat_index, skill_ids): + name = piece["name"] + if name == "None": + return [] + + # skip if unacquirable + if piece.get("acquire", 0) or piece.get("dev", 0): + return [] + + # skip if only female + if piece.get("sex", "") == "Female": + return [] + + # get type + x = piece.get("hunterClass", "") + type = 1 if x == "Blademaster" else 2 if x == "Gunner" else 0 + + # get unique slots and their first occurrence positions + slots = piece["slots"] + defe = piece["defense"] + skills = piece.get("skills", []) + + # create a dictionary to track first occurrence of each slot value + slot_variants = {} + for pos, slot_value in enumerate(slots): + if slot_value not in slot_variants: + slot_variants[slot_value] = pos + 1 # LV starts from 1 + + # generate variants for each unique slot value + variants = [] + for slot_value, lv_pos in slot_variants.items(): + variant_name = f"{name}(LV{lv_pos}+)" + variant_defense_base = defe[lv_pos - 1] # positions are 0-based in array + + modeled_piece = { + "category": cat_index, + "name": variant_name, + "rarity": piece["rarity"], + "skills": map_skills_map(skills, skill_ids), + "slots": slot_value, + "defense": { + "base": variant_defense_base, + "max": defe[-1], + }, + "type": type, + "resistance": reorder_resistances(piece["resistances"]), + } + variants.append(modeled_piece) + + return variants if __name__ == "__main__": # read input @@ -55,40 +101,8 @@ if __name__ == "__main__": 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"] - skills = piece.get("skills", []) - - # skip if unacquirable - if piece.get("acquire", 0) or piece.get("dev", 0): - continue - - # skip if only female - if piece.get("sex", "") == "Female": - continue - - # get type - x = piece.get("hunterClass", "") - type = 1 if x == "Blademaster" else 2 if x == "Gunner" else 0 - - # 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) + variants = process_armor_piece(piece, cat_index, skill_ids) + pieces_of_cat.extend(variants) pieces_per_category.append(pieces_of_cat) # save files