Formulator / get_assets.py
ango
04.08 commit
b8aecdd
raw
history blame
3.65 kB
import json
import os
from functools import cache
import requests
from tqdm import tqdm
from qt.constant import MAX_BASE_ATTR, MAX_MAGIC_ATTR, MAX_EMBED_ATTR, MAX_ENCHANT_ATTR, MAX_STONE_ATTR, \
MAX_STONE_LEVEL, ATTR_TYPE_MAP, ATTR_TYPE_TRANSLATE, STONE_ATTR
from qt.constant import EQUIPMENTS_DIR, ENCHANTS_DIR, STONES_DIR
EQUIP_ATTR_MAP = {
"Overcome": "破防",
"Critical": "会心",
"CriticalDamage": "会效",
"Haste": "加速",
"Surplus": "破招",
"Strain": "无双"
}
POSITION_MAP = {
"hat": 3,
"jacket": 2,
"belt": 6,
"wrist": 10,
"bottoms": 8,
"shoes": 9,
"necklace": 4,
"pendant": 7,
"ring": 5,
"tertiary_weapon": 1,
"primary_weapon": 0
}
SUFFIX_MAP = {
3: 'armor',
2: 'armor',
6: 'armor',
10: 'armor',
8: 'armor',
9: 'armor',
4: 'trinket',
7: 'trinket',
5: 'trinket',
1: 'weapon',
0: 'weapon'
}
SPECIAL_ENCHANT_MAP = {
"3": {
12800: "15436-11",
11500: "15436-10",
10600: "15436-9"
},
"2": {
12800: "22151-11",
11500: "22151-10",
10600: "22151-9"
},
"6": {
0: "22169"
},
"10": {
0: "22166"
},
"9": {
0: "33247"
},
}
equip_min_level = 11000
equip_params = {
"client": "std",
"pv_type": 1,
"pz": 1,
"page": 1,
"per": 300,
"min_level": 9000,
"max_level": 15000
}
enchant_params = {
"client": "std",
"subtype": 1,
"latest_enhance": 1
}
# @cache
def get_equips_list(position):
position_id = POSITION_MAP[position]
url = f"https://node.jx3box.com/equip/{SUFFIX_MAP[position_id]}"
params = equip_params.copy()
params['position'] = position_id
equips = []
res = requests.get(url, params=params).json()
equips.extend(res['list'])
while res['pages'] > params['page']:
params['page'] += 1
res = requests.get(url, params=params).json()
equips.extend(res['list'])
return equips
@cache
def get_enchants_list(position):
position_id = POSITION_MAP[position]
url = f"https://node.jx3box.com/enchant/primary"
params = enchant_params.copy()
params['position'] = position_id
res = requests.get(url, params=params)
enchants = [e for e in sorted(res.json(), key=lambda x: x['Score'], reverse=True) if
e['Attribute1ID'] in ATTR_TYPE_MAP]
return enchants
def get_stones_list():
url = "https://node.jx3box.com/enchant/stone"
result = {}
for level in tqdm(range(MAX_STONE_LEVEL)):
level = level + 1
stones = []
params = {
"client": "std",
"level": level,
"page": 1,
"per": 100
}
res = requests.get(url, params=params).json()
stones.extend(res['list'])
while res['pages'] > params['page']:
params['page'] += 1
res = requests.get(url, params=params).json()
stones.extend(res['list'])
return result
if __name__ == '__main__':
if not os.path.exists(EQUIPMENTS_DIR):
os.makedirs(EQUIPMENTS_DIR)
if not os.path.exists(ENCHANTS_DIR):
os.makedirs(ENCHANTS_DIR)
for pos in tqdm(POSITION_MAP):
json.dump(
get_equips_list(pos),
open(os.path.join(EQUIPMENTS_DIR, pos), "w", encoding="utf-8"), ensure_ascii=False
)
json.dump(
get_enchants_list(pos),
open(os.path.join(ENCHANTS_DIR, pos), "w", encoding="utf-8"), ensure_ascii=False
)
json.dump(get_stones_list(), open(STONES_DIR, "w", encoding="utf-8"), ensure_ascii=False)