mirror of
https://github.com/KimigaiiWuyi/GenshinUID.git
synced 2025-05-07 12:43:26 +08:00
✨ 支持版本深渊4.2
, 同步新数据源
This commit is contained in:
parent
5979715c4c
commit
5843d52b04
@ -1,5 +1,6 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import List, Literal
|
||||
from typing import Dict, List, Literal
|
||||
|
||||
import httpx
|
||||
import aiofiles
|
||||
@ -9,9 +10,12 @@ from gsuid_core.utils.api.ambr.request import get_ambr_icon
|
||||
from gsuid_core.utils.image.image_tools import get_color_bg
|
||||
|
||||
from ..version import Genshin_version
|
||||
from .abyss_new_history import history_data
|
||||
from ..utils.resource.RESOURCE_PATH import TEXT2D_PATH, MONSTER_ICON_PATH
|
||||
from ..utils.map.GS_MAP_PATH import abyss_data, monster_data, ex_monster_data
|
||||
from ..utils.map.GS_MAP_PATH import ex_monster_data, monster2entry_data
|
||||
from ..utils.resource.RESOURCE_PATH import (
|
||||
ABYSS_PATH,
|
||||
TEXT2D_PATH,
|
||||
MONSTER_ICON_PATH,
|
||||
)
|
||||
from ..utils.fonts.genshin_fonts import (
|
||||
gs_font_24,
|
||||
gs_font_26,
|
||||
@ -25,6 +29,8 @@ monster_fg = Image.open(TEXT_PATH / 'monster_fg.png')
|
||||
upper_tag = Image.open(TEXT_PATH / 'upper_tag.png')
|
||||
lower_tag = Image.open(TEXT_PATH / 'lower_tag.png')
|
||||
|
||||
schedule_path = ABYSS_PATH / 'schedule.json'
|
||||
|
||||
|
||||
async def download_Oceanid():
|
||||
path = MONSTER_ICON_PATH / 'UI_MonsterIcon_Oceanid_Underling.png'
|
||||
@ -43,7 +49,19 @@ async def get_half_img(data: List, half: Literal['Upper', 'Lower']):
|
||||
half_draw = ImageDraw.Draw(half_img)
|
||||
upper_h = 60
|
||||
temp = 0
|
||||
|
||||
ver = None
|
||||
for up in data:
|
||||
if 'Vers' not in up:
|
||||
break
|
||||
|
||||
if (ver is None) or (ver and up['Vers'][0] >= ver):
|
||||
ver = up['Vers'][0]
|
||||
continue
|
||||
|
||||
for index, wave in enumerate(data):
|
||||
if ver is not None and wave['Vers'][0] != ver:
|
||||
continue
|
||||
monsters = wave['Monsters']
|
||||
wave_monster_uh = (((len(monsters) - 1) // 3) + 1) * 125 + 40
|
||||
upper_h += wave_monster_uh
|
||||
@ -64,18 +82,41 @@ async def get_half_img(data: List, half: Literal['Upper', 'Lower']):
|
||||
half_img.paste(wave_tag, (53, 45 + temp), wave_tag)
|
||||
for m_index, monster in enumerate(monsters):
|
||||
monster_id = monster['ID']
|
||||
|
||||
real_id = str(monster_id)
|
||||
while len(real_id) < 5:
|
||||
real_id = '0' + real_id
|
||||
|
||||
real_id2 = '2' + real_id + '02'
|
||||
real_id = '2' + real_id + '01'
|
||||
monster_num = monster['Num']
|
||||
|
||||
if real_id not in monster_data:
|
||||
if wave['WaveDesc'] > 1000:
|
||||
wave_desc = str(int(real_id) - 400)
|
||||
else:
|
||||
wave_desc = str(wave['WaveDesc'])
|
||||
|
||||
if real_id in monster2entry_data:
|
||||
monster_name = monster2entry_data[real_id]['name']
|
||||
icon_name = monster2entry_data[real_id]['icon']
|
||||
elif 'Name' in monster:
|
||||
monster_name = monster['Name']['CH']
|
||||
if wave_desc in monster2entry_data:
|
||||
icon_name = monster2entry_data[wave_desc]['icon']
|
||||
else:
|
||||
icon_name = 'UI_AnimalIcon_Inu_Tanuki_01'
|
||||
elif real_id in ex_monster_data:
|
||||
monster_name = ex_monster_data[real_id]['name']
|
||||
icon_name = ex_monster_data[real_id]['icon']
|
||||
elif wave_desc in monster2entry_data:
|
||||
monster_name = monster2entry_data[wave_desc]['name']
|
||||
icon_name = monster2entry_data[wave_desc]['icon']
|
||||
elif real_id2 in monster2entry_data:
|
||||
monster_name = monster2entry_data[real_id2]['name']
|
||||
icon_name = monster2entry_data[real_id2]['icon']
|
||||
else:
|
||||
monster_name = monster_data[real_id]['name']
|
||||
icon_name = monster_data[real_id]['icon']
|
||||
monster_name = '未知怪物'
|
||||
icon_name = 'UI_AnimalIcon_Inu_Tanuki_01'
|
||||
|
||||
if 'Mark' in monster:
|
||||
if monster['Mark']:
|
||||
@ -84,7 +125,7 @@ async def get_half_img(data: List, half: Literal['Upper', 'Lower']):
|
||||
monster_icon = await get_ambr_icon(
|
||||
'monster', icon_name, MONSTER_ICON_PATH
|
||||
)
|
||||
monster_icon = monster_icon.resize((89, 89))
|
||||
monster_icon = monster_icon.resize((89, 89)).convert('RGBA')
|
||||
monster_img = Image.open(TEXT_PATH / 'monster_bg.png')
|
||||
monster_img.paste(monster_icon, (31, 19), monster_icon)
|
||||
monster_img.paste(monster_fg, (0, 0), monster_fg)
|
||||
@ -119,11 +160,45 @@ async def get_half_img(data: List, half: Literal['Upper', 'Lower']):
|
||||
return half_img
|
||||
|
||||
|
||||
async def _get_data_from_url(url: str, path: Path) -> Dict:
|
||||
if not path.exists():
|
||||
async with httpx.AsyncClient() as client:
|
||||
response = await client.get(url)
|
||||
data = response.json()
|
||||
async with aiofiles.open(path, 'w', encoding='UTF-8') as file:
|
||||
await file.write(
|
||||
json.dumps(data, indent=4, ensure_ascii=False)
|
||||
)
|
||||
else:
|
||||
async with aiofiles.open(path, 'r', encoding='UTF-8') as file:
|
||||
data = json.loads(await file.read())
|
||||
return data
|
||||
|
||||
|
||||
async def get_review_data(
|
||||
version: str = Genshin_version[:3], floor: str = '12'
|
||||
):
|
||||
floor_data = history_data[version][floor]
|
||||
data = abyss_data[floor_data]
|
||||
schedule_data = await _get_data_from_url(
|
||||
'http://www.yuhengcup.top/api/get_DatabaseSchedule', schedule_path
|
||||
)
|
||||
|
||||
schedule: List = schedule_data['SpiralAbyssSchedule']
|
||||
for i in schedule:
|
||||
if version in i['Name']:
|
||||
floors_data = i
|
||||
break
|
||||
else:
|
||||
return None
|
||||
|
||||
floor_id = floors_data['Floors'][int(floor) - 9]
|
||||
|
||||
floor_data_path = ABYSS_PATH / f'{floor_id}.json'
|
||||
floor_data = await _get_data_from_url(
|
||||
f'http://www.yuhengcup.top/api/get_Floor?_id={floor_id}',
|
||||
floor_data_path,
|
||||
)
|
||||
|
||||
data = floor_data['_data']
|
||||
floor_buff = data['Disorder']['CH'].replace('<b>', '').replace('</b>', '')
|
||||
floor_monster = data['Chambers']
|
||||
|
||||
|
@ -7,7 +7,13 @@ import httpx
|
||||
|
||||
sys.path.append(str(Path(__file__).parents[5]))
|
||||
sys.path.append(str(Path(__file__).parents[2]))
|
||||
|
||||
__package__ = 'GenshinUID.tools'
|
||||
from gsuid_core.utils.api.ambr.request import ( # noqa: E402
|
||||
get_ambr_monster_data,
|
||||
get_ambr_monster_list,
|
||||
)
|
||||
|
||||
from ..version import Genshin_version # noqa: E402
|
||||
from ..utils.ambr_to_minigg import convert_ambr_to_minigg # noqa: E402
|
||||
|
||||
@ -35,6 +41,8 @@ enName2Id_fileName = f'enName2AvatarID_mapping_{version}.json'
|
||||
avatarId2Star_fileName = f'avatarId2Star_mapping_{version}.json'
|
||||
avatarName2Weapon_fileName = f'avatarName2Weapon_mapping_{version}.json'
|
||||
|
||||
monster2entry_fileName = f'monster2entry_mapping_{version}.json'
|
||||
|
||||
artifact2attr_fileName = f'artifact2attr_mapping_{version}.json'
|
||||
icon2Name_fileName = f'icon2Name_mapping_{version}.json'
|
||||
|
||||
@ -57,6 +65,24 @@ BETA_CHAR = {
|
||||
}
|
||||
|
||||
|
||||
async def monster2map():
|
||||
monster_list = await get_ambr_monster_list()
|
||||
result = {}
|
||||
if monster_list:
|
||||
for monster_main_id in monster_list['items']:
|
||||
if not monster_main_id.startswith('28'):
|
||||
data = await get_ambr_monster_data(monster_main_id)
|
||||
if data:
|
||||
for entry_id in data['entries']:
|
||||
entry: dict = data['entries'][entry_id] # type: ignore
|
||||
entry['name'] = data['name']
|
||||
entry['route'] = data['route']
|
||||
entry['icon'] = data['icon']
|
||||
result[entry_id] = entry
|
||||
with open(MAP_PATH / monster2entry_fileName, 'w', encoding='UTF-8') as f:
|
||||
json.dump(result, f, indent=4, ensure_ascii=False)
|
||||
|
||||
|
||||
async def download_new_file():
|
||||
base_url = 'https://gitlab.com/Dimbreath/AnimeGameData/-/raw/master'
|
||||
url_list = [
|
||||
@ -293,6 +319,8 @@ async def artifact2attrJson() -> None:
|
||||
|
||||
|
||||
async def main():
|
||||
await monster2map()
|
||||
'''
|
||||
await download_new_file()
|
||||
global raw_data
|
||||
try:
|
||||
@ -307,6 +335,7 @@ async def main():
|
||||
await talentId2NameJson()
|
||||
await weaponHash2TypeJson()
|
||||
await artifact2attrJson()
|
||||
'''
|
||||
|
||||
|
||||
asyncio.run(main())
|
||||
|
@ -20,8 +20,7 @@ artifact2attr_fileName = f'artifact2attr_mapping_{version}.json'
|
||||
enName2Id_fileName = f'enName2AvatarID_mapping_{version}.json'
|
||||
icon2Name_fileName = f'icon2Name_mapping_{version}.json'
|
||||
avatarName2Weapon_fileName = f'avatarName2Weapon_mapping_{version}.json'
|
||||
monster_fileName = f'monster_{version}.json'
|
||||
SAConfig_fileName = 'SpiralAbyssFloorConfig.json'
|
||||
monster2entry_fileName = f'monster2entry_mapping_{version}.json'
|
||||
EXMonster_fileName = 'ExtraMonster.json'
|
||||
|
||||
|
||||
@ -75,11 +74,8 @@ with open(MAP / avatarId2Star_fileName, 'r', encoding='utf8') as f:
|
||||
with open(MAP / enName2Id_fileName, 'r', encoding='utf8') as f:
|
||||
enName_to_avatarId_data = msgjson.decode(f.read(), type=Dict[str, str])
|
||||
|
||||
with open(MAP / monster_fileName, 'r', encoding='utf8') as f:
|
||||
monster_data = msgjson.decode(f.read(), type=Dict[str, Dict])
|
||||
|
||||
with open(MAP / SAConfig_fileName, 'r', encoding='utf8') as f:
|
||||
abyss_data = msgjson.decode(f.read(), type=Dict[str, Dict])
|
||||
|
||||
with open(MAP / EXMonster_fileName, 'r', encoding='utf8') as f:
|
||||
ex_monster_data = msgjson.decode(f.read(), type=Dict[str, Dict])
|
||||
|
||||
with open(MAP / monster2entry_fileName, 'r', encoding='utf8') as f:
|
||||
monster2entry_data = msgjson.decode(f.read(), type=Dict[str, Dict])
|
||||
|
@ -299,5 +299,19 @@
|
||||
"type": "BEAST",
|
||||
"icon": "UI_MonsterIcon_MachinaIustitia_Nutcracker",
|
||||
"route": "Suppression Specialist Mek"
|
||||
},
|
||||
"20510201": {
|
||||
"id": 20510201,
|
||||
"name": "历经百战的浊水粉碎幻灵",
|
||||
"type": "MONSTER_ORDINARY",
|
||||
"route": "Tainted Water-Spouting Phantasm",
|
||||
"icon": "UI_MonsterIcon_Necalevia_Big"
|
||||
},
|
||||
"20511201": {
|
||||
"id": 20511201,
|
||||
"name": "历经百战的浊水喷吐幻灵",
|
||||
"type": "MONSTER_ORDINARY",
|
||||
"route": "Tainted Water-Spouting Phantasm",
|
||||
"icon": "UI_MonsterIcon_Necalevia_Big"
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
39516
GenshinUID/utils/map/data/monster2entry_mapping_4.1.0.json
Normal file
39516
GenshinUID/utils/map/data/monster2entry_mapping_4.1.0.json
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -23,6 +23,7 @@ ICON_PATH = RESOURCE_PATH / 'icon'
|
||||
TEMP_PATH = RESOURCE_PATH / 'temp'
|
||||
CARD_PATH = RESOURCE_PATH / 'card'
|
||||
MONSTER_ICON_PATH = RESOURCE_PATH / 'monster_icon'
|
||||
ABYSS_PATH = WIKI_PATH / 'abyss_review'
|
||||
GUIDE_PATH = WIKI_PATH / 'guide'
|
||||
REF_PATH = WIKI_PATH / 'ref'
|
||||
WIKI_REL_PATH = WIKI_PATH / 'artifacts'
|
||||
@ -73,6 +74,7 @@ def init_dir():
|
||||
DATA_PATH,
|
||||
CHAR_SIDE_TEMP_PATH,
|
||||
MONSTER_ICON_PATH,
|
||||
ABYSS_PATH,
|
||||
]:
|
||||
i.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user