#!/usr/bin/env python3 # # -*- coding: utf-8 -*- import json import re import io from db import * from PIL import Image with open("../../extraction/raw-31-4/data.cdb.json") as f: raw = json.load(f) with open("../../clean/31-4/main.zh.mo.json") as f: trans = json.load(f) img = Image.open("../../extraction/raw-31-4/cardIcons.png") db.bind(provider="sqlite", filename="../../clean/31-4/data.sqlite3") db.generate_mapping() lines = raw["sheets"][1]["lines"] with db_session: for i in lines: if i["group"] == 5: i["name"] = trans[i["name"].strip()]["msgstr"][0] if "ambiantDesc" in i: i["ambiantDesc"] = trans[i["ambiantDesc"].strip()]["msgstr"][0] else: i["ambiantDesc"] = "" if "gameplayDesc" in i: i["gameplayDesc"] = trans[i["gameplayDesc"].strip()]["msgstr"][0] if i["props"]: def replace_props(m): prop_name = m.group(1) if prop_name == "ShockAffectDuration": prop_name = "duration" # 雷盾带电手动触发 result = i["props"][prop_name] if prop_name.startswith("prct"): result = int(result * 100) if isinstance(result, list): result = result[0] if not isinstance(result, str): result = str(result) return result i["gameplayDesc"], _ = re.subn( r"::[\+|\*]?(.*?)::", replace_props, i["gameplayDesc"] ) else: i["gameplayDesc"] = "" x = i["icon"]["x"] * 24 y = i["icon"]["y"] * 24 box = (x, y, x + 24, y + 24) region = img.crop(box) region_arr = io.BytesIO() region.save(region_arr, format="PNG") stats_map = {"Brutality": 1, "Survival": 2, "Tactic": 4} stats = 0 for t in ["tier1", "tier2"]: if t in i: stats += stats_map[i[t]] Ranged( name=i["name"], description=i["ambiantDesc"], mechanism=i["gameplayDesc"], icon=region_arr.getbuffer().tobytes(), stats=stats, )