mirror of
https://github.com/PaiGramTeam/genshin-wiki.git
synced 2024-11-21 22:58:02 +00:00
✨ parse avatar stories
This commit is contained in:
parent
9b2fb838d8
commit
f958a2d749
@ -1,10 +1,11 @@
|
|||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from model.enums import AvatarQuality, Element, WeaponType
|
from model.enums import Association, AvatarQuality, Element, WeaponType
|
||||||
from utils.model import BaseModel
|
from utils.model import BaseModel
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from model.item import Item
|
from model.item import Item
|
||||||
|
from model.avatar._talente import AvatarTalents
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
"Avatar",
|
"Avatar",
|
||||||
@ -12,6 +13,8 @@ __all__ = (
|
|||||||
"AvatarInfo",
|
"AvatarInfo",
|
||||||
"AvatarConstellation",
|
"AvatarConstellation",
|
||||||
"AvatarPromote",
|
"AvatarPromote",
|
||||||
|
"AvatarStories",
|
||||||
|
"Story",
|
||||||
"Seuyu",
|
"Seuyu",
|
||||||
"ItemCount",
|
"ItemCount",
|
||||||
)
|
)
|
||||||
@ -39,6 +42,45 @@ class Seuyu(BaseModel):
|
|||||||
"""韩语CV"""
|
"""韩语CV"""
|
||||||
|
|
||||||
|
|
||||||
|
class Story(BaseModel):
|
||||||
|
"""故事"""
|
||||||
|
|
||||||
|
title: str
|
||||||
|
"""标题"""
|
||||||
|
content: str
|
||||||
|
"""内容"""
|
||||||
|
tips: list[str]
|
||||||
|
"""提示"""
|
||||||
|
|
||||||
|
|
||||||
|
class AvatarStories(BaseModel):
|
||||||
|
"""角色故事"""
|
||||||
|
|
||||||
|
details: Story
|
||||||
|
"""角色详情"""
|
||||||
|
|
||||||
|
story_1: Story
|
||||||
|
"""角色故事1"""
|
||||||
|
|
||||||
|
story_2: Story
|
||||||
|
"""角色故事2"""
|
||||||
|
|
||||||
|
story_3: Story
|
||||||
|
"""角色故事3"""
|
||||||
|
|
||||||
|
story_4: Story
|
||||||
|
"""角色故事4"""
|
||||||
|
|
||||||
|
story_5: Story
|
||||||
|
"""角色故事5"""
|
||||||
|
|
||||||
|
miscellaneous: Story
|
||||||
|
"""角色杂谈"""
|
||||||
|
|
||||||
|
vision: Story
|
||||||
|
"""神之眼"""
|
||||||
|
|
||||||
|
|
||||||
class AvatarInfo(BaseModel):
|
class AvatarInfo(BaseModel):
|
||||||
title: str
|
title: str
|
||||||
"""称号"""
|
"""称号"""
|
||||||
@ -52,8 +94,12 @@ class AvatarInfo(BaseModel):
|
|||||||
"""星座"""
|
"""星座"""
|
||||||
description: str
|
description: str
|
||||||
"""描述"""
|
"""描述"""
|
||||||
|
association: Association
|
||||||
|
"""区域"""
|
||||||
seuyu: Seuyu
|
seuyu: Seuyu
|
||||||
"""声优"""
|
"""声优"""
|
||||||
|
stories: AvatarStories
|
||||||
|
"""故事"""
|
||||||
|
|
||||||
|
|
||||||
class ItemCount(BaseModel):
|
class ItemCount(BaseModel):
|
||||||
@ -105,5 +151,7 @@ class Avatar(BaseModel):
|
|||||||
"""角色信息"""
|
"""角色信息"""
|
||||||
promote: AvatarPromote
|
promote: AvatarPromote
|
||||||
"""角色突破数据"""
|
"""角色突破数据"""
|
||||||
|
talents: "AvatarTalents"
|
||||||
|
"""角色天赋信息"""
|
||||||
constellations: list[AvatarConstellation]
|
constellations: list[AvatarConstellation]
|
||||||
"""角色命座信息"""
|
"""角色命座信息"""
|
||||||
|
@ -102,6 +102,7 @@ class FoodQuality(StrEnum):
|
|||||||
"""美味的"""
|
"""美味的"""
|
||||||
|
|
||||||
|
|
||||||
|
# noinspection SpellCheckingInspection
|
||||||
class MaterialType(StrEnum):
|
class MaterialType(StrEnum):
|
||||||
Adsorbate = "ADSORBATE"
|
Adsorbate = "ADSORBATE"
|
||||||
FakeAbsorbate = "FAKE_ABSORBATE"
|
FakeAbsorbate = "FAKE_ABSORBATE"
|
||||||
@ -142,3 +143,20 @@ class MaterialType(StrEnum):
|
|||||||
Costume = "COSTUME"
|
Costume = "COSTUME"
|
||||||
FurnitureSuiteFormula = "FURNITURE_SUITE_FORMULA"
|
FurnitureSuiteFormula = "FURNITURE_SUITE_FORMULA"
|
||||||
FurnitureFormula = "FURNITURE_FORMULA"
|
FurnitureFormula = "FURNITURE_FORMULA"
|
||||||
|
|
||||||
|
|
||||||
|
class Association(StrEnum):
|
||||||
|
Inazuma = "INAZUMA"
|
||||||
|
"""稻妻"""
|
||||||
|
Mondstadt = "MONDSTADT"
|
||||||
|
"""蒙德"""
|
||||||
|
Mainactor = "MAINACTOR"
|
||||||
|
"""主角"""
|
||||||
|
Liyue = "LIYUE"
|
||||||
|
"""璃月"""
|
||||||
|
Fatui = "FATUI"
|
||||||
|
"""愚人众"""
|
||||||
|
Ranger = "RANGER"
|
||||||
|
"""游侠"""
|
||||||
|
Sumeru = "SUMERU"
|
||||||
|
"""须弥"""
|
||||||
|
@ -1,7 +1,116 @@
|
|||||||
|
from itertools import chain
|
||||||
|
|
||||||
|
from model.avatar import AvatarBirth, AvatarInfo, AvatarStories, Seuyu, Story
|
||||||
|
from model.enums import Association, AvatarQuality, Element, WeaponType
|
||||||
|
from utils.const import PROJECT_ROOT
|
||||||
|
from utils.manager import ResourceManager
|
||||||
from utils.typedefs import Lang
|
from utils.typedefs import Lang
|
||||||
|
|
||||||
from utils.manager import ResourceManager
|
OUT_DIR = PROJECT_ROOT.joinpath("out")
|
||||||
|
|
||||||
|
elements = {
|
||||||
|
3057990932: Element.Cryo,
|
||||||
|
467004516: Element.Anemo,
|
||||||
|
821712868: Element.Null,
|
||||||
|
2480172868: Element.Electro,
|
||||||
|
4022324356: Element.Hydro,
|
||||||
|
627825788: Element.Pyro,
|
||||||
|
2596397668: Element.Dendro,
|
||||||
|
967031460: Element.Geo,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# noinspection PyShadowingBuiltins,SpellCheckingInspection
|
||||||
async def parse_avatar_data(lang: Lang):
|
async def parse_avatar_data(lang: Lang):
|
||||||
...
|
out_path = OUT_DIR.joinpath(f"{lang}")
|
||||||
|
out_path.mkdir(exist_ok=True, parents=True)
|
||||||
|
|
||||||
|
manager = ResourceManager(lang=lang)
|
||||||
|
avatar_json_data = manager.fetch("AvatarExcelConfigData")
|
||||||
|
fetter_info_json_data = manager.fetch("FetterInfoExcelConfigData")
|
||||||
|
story_json_data = manager.fetch("FetterStoryExcelConfigData")
|
||||||
|
|
||||||
|
avatar_list = []
|
||||||
|
for data in avatar_json_data:
|
||||||
|
id = data["id"]
|
||||||
|
if (
|
||||||
|
info_data := next(
|
||||||
|
chain(
|
||||||
|
filter(lambda x: x["avatarId"] == id, fetter_info_json_data),
|
||||||
|
[
|
||||||
|
None,
|
||||||
|
],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
) is None:
|
||||||
|
continue
|
||||||
|
name = manager.get_text(data["nameTextMapHash"])
|
||||||
|
element = elements[info_data["avatarVisionBeforTextMapHash"]]
|
||||||
|
quality = AvatarQuality(data["qualityType"].removeprefix("QUALITY_"))
|
||||||
|
weapon_type = next(
|
||||||
|
filter(lambda x: x in data["weaponType"], WeaponType.__members__.values())
|
||||||
|
)
|
||||||
|
|
||||||
|
title = manager.get_text(info_data["avatarTitleTextMapHash"])
|
||||||
|
birth = AvatarBirth(
|
||||||
|
month=info_data["infoBirthMonth"], day=info_data["infoBirthDay"]
|
||||||
|
)
|
||||||
|
occupation = manager.get_text(info_data["avatarNativeTextMapHash"])
|
||||||
|
vision = manager.get_text(info_data["avatarVisionBeforTextMapHash"])
|
||||||
|
constellation = manager.get_text(
|
||||||
|
info_data["avatarConstellationBeforTextMapHash"]
|
||||||
|
)
|
||||||
|
description = manager.get_text(info_data["avatarDetailTextMapHash"])
|
||||||
|
association = Association(
|
||||||
|
info_data["avatarAssocType"].removeprefix("ASSOC_TYPE_")
|
||||||
|
)
|
||||||
|
seuyu = Seuyu(
|
||||||
|
cn=manager.get_text(info_data["cvChineseTextMapHash"]),
|
||||||
|
jp=manager.get_text(info_data["cvJapaneseTextMapHash"]),
|
||||||
|
en=manager.get_text(info_data["cvEnglishTextMapHash"]),
|
||||||
|
kr=manager.get_text(info_data["cvKoreanTextMapHash"]),
|
||||||
|
)
|
||||||
|
story_data = sorted(
|
||||||
|
filter(lambda x: x["avatarId"] == id, story_json_data),
|
||||||
|
key=lambda x: x["fetterId"],
|
||||||
|
)
|
||||||
|
stories = AvatarStories(
|
||||||
|
**{
|
||||||
|
i[0]: i[1]
|
||||||
|
for i in zip(
|
||||||
|
AvatarStories.__fields__.keys(),
|
||||||
|
map(
|
||||||
|
lambda x: Story(
|
||||||
|
title=manager.get_text(x["storyTitleTextMapHash"]),
|
||||||
|
content=manager.get_text(x["storyContextTextMapHash"]),
|
||||||
|
tips=list(
|
||||||
|
filter(
|
||||||
|
lambda y: y is not None,
|
||||||
|
map(
|
||||||
|
lambda z: manager.get_text(z),
|
||||||
|
x["tips"],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
sorted(
|
||||||
|
filter(lambda x: x["avatarId"] == id, story_data),
|
||||||
|
key=lambda x: x["fetterId"],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
information = AvatarInfo(
|
||||||
|
title=title,
|
||||||
|
birth=birth,
|
||||||
|
occupation=occupation,
|
||||||
|
vision=vision,
|
||||||
|
constellation=constellation,
|
||||||
|
description=description,
|
||||||
|
association=association,
|
||||||
|
seuyu=seuyu,
|
||||||
|
stories=stories,
|
||||||
|
)
|
||||||
|
|
||||||
|
breakpoint()
|
||||||
|
Loading…
Reference in New Issue
Block a user