🔥 支持低版本py,改用msgspec读取excel

This commit is contained in:
qwerdvd 2023-09-23 18:36:26 +08:00
parent ef3067955c
commit c0ff6960bf
64 changed files with 3872 additions and 3749 deletions

2
.gitignore vendored
View File

@ -669,7 +669,7 @@ result.txt
### ArknightsUID ### ### ArknightsUID ###
ArknightsUID/tools/ ArknightsUID/tools/
upload_file.py upload_file.py
test.py
### Debug ### ### Debug ###
testnb2/ testnb2/

View File

@ -1,3 +1,4 @@
from typing import Dict
from gsuid_core.gss import gss from gsuid_core.gss import gss
from gsuid_core.logger import logger from gsuid_core.logger import logger
@ -15,8 +16,8 @@ NOTICE = {
} }
async def get_notice_list() -> dict[str, dict[str, dict]]: async def get_notice_list() -> Dict[str, Dict[str, Dict]]:
msg_dict: dict[str, dict[str, dict]] = {} msg_dict: Dict[str, Dict[str, Dict]] = {}
for _bot_id in gss.active_bot: for _bot_id in gss.active_bot:
user_list = await ArknightsUser.get_all_push_user_list() user_list = await ArknightsUser.get_all_push_user_list()
for user in user_list: for user in user_list:
@ -40,11 +41,11 @@ async def get_notice_list() -> dict[str, dict[str, dict]]:
async def all_check( async def all_check(
bot_id: str, bot_id: str,
raw_data: ArknightsPlayerInfoModel, raw_data: ArknightsPlayerInfoModel,
push_data: dict, push_data: Dict,
msg_dict: dict[str, dict[str, dict]], msg_dict: Dict[str, Dict[str, Dict]],
user_id: str, user_id: str,
uid: str, uid: str,
) -> dict[str, dict[str, dict]]: ) -> Dict[str, Dict[str, Dict]]:
for mode in NOTICE.keys(): for mode in NOTICE.keys():
# 检查条件 # 检查条件
if push_data[f'{mode}_is_push'] is True: if push_data[f'{mode}_is_push'] is True:

View File

@ -1,3 +1,4 @@
from typing import Dict
from gsuid_core.utils.plugins_config.models import ( from gsuid_core.utils.plugins_config.models import (
GSC, GSC,
GsBoolConfig, GsBoolConfig,
@ -5,7 +6,7 @@ from gsuid_core.utils.plugins_config.models import (
GsStrConfig, GsStrConfig,
) )
CONIFG_DEFAULT: dict[str, GSC] = { CONIFG_DEFAULT: Dict[str, GSC] = {
'SignTime': GsListStrConfig('每晚签到时间设置', '每晚森空岛签到时间设置(时,分)', ['0', '38']), 'SignTime': GsListStrConfig('每晚签到时间设置', '每晚森空岛签到时间设置(时,分)', ['0', '38']),
'SignReportSimple': GsBoolConfig( 'SignReportSimple': GsBoolConfig(
'简洁签到报告', '简洁签到报告',

View File

@ -1,4 +1,5 @@
from pathlib import Path from pathlib import Path
from typing import Dict, Union
import aiofiles import aiofiles
from gsuid_core.help.draw_plugin_help import get_help from gsuid_core.help.draw_plugin_help import get_help
@ -13,15 +14,15 @@ TEXT_PATH = Path(__file__).parent / 'texture2d'
HELP_DATA = Path(__file__).parent / 'Help.json' HELP_DATA = Path(__file__).parent / 'Help.json'
async def get_help_data() -> dict[str, PluginHelp] | None: async def get_help_data() -> Union[Dict[str, PluginHelp], None]:
if HELP_DATA.exists(): if HELP_DATA.exists():
async with aiofiles.open(HELP_DATA, 'rb') as file: async with aiofiles.open(HELP_DATA, 'rb') as file:
return msgjson.decode( return msgjson.decode(
await file.read(), type=dict[str, PluginHelp], await file.read(), type=Dict[str, PluginHelp],
) )
async def get_core_help() -> bytes | str: async def get_core_help() -> Union[bytes, str]:
help_data = await get_help_data() help_data = await get_help_data()
if help_data is None: if help_data is None:
return '暂未找到帮助数据...' return '暂未找到帮助数据...'

View File

@ -2,7 +2,7 @@ import json
from functools import cache from functools import cache
from pathlib import Path from pathlib import Path
from time import time from time import time
from typing import Any, ClassVar from typing import Any, ClassVar, Dict, Union
from loguru import logger from loguru import logger
@ -10,54 +10,58 @@ from ..utils.file import read_json
class StoreData: class StoreData:
data: dict[Any, Any] data: Dict[Any, Any]
modification_time: float modification_time: float
def __init__(self, data: dict[Any, Any], modification_time: float) -> None: def __init__(self, data: Dict[Any, Any], modification_time: float) -> None:
self.data = data self.data = data
self.modification_time = modification_time self.modification_time = modification_time
class CacheData: class CacheData:
cached_data: ClassVar[dict[str, StoreData]] = {} cached_data: ClassVar[Dict[str, StoreData]] = {}
@classmethod @classmethod
@cache @cache
def get_cache(cls, local_path: Path) -> dict[Any, Any]: def get_cache(cls, local_path: Path) -> Dict[Any, Any]:
data_name = local_path.stem data_name = local_path.stem
if data_name in cls.cached_data: if data_name in cls.cached_data:
current_modification_time = local_path.stat().st_mtime current_modification_time = local_path.stat().st_mtime
if current_modification_time == cls.cached_data[data_name].modification_time: if current_modification_time == cls.cached_data[data_name].modification_time:
logger.debug(f'hit cached: {data_name}')
return cls.cached_data[data_name].data return cls.cached_data[data_name].data
return cls.set_cache(local_path, data_name) return cls.set_cache(local_path, data_name)
@classmethod @classmethod
def set_cache( def set_cache(
cls, local_path: Path | None, data_name: str, memory_data: dict | None = None cls, local_path: Union[Path, None], data_name: str, memory_data: Union[Dict, None] = None
) -> dict[Any, Any]: ) -> Dict[Any, Any]:
data = read_json(local_path) if local_path else memory_data data = read_json(local_path) if local_path else memory_data
if data is None: if data is None:
raise FileNotFoundError raise FileNotFoundError
modification_time = local_path.stat().st_mtime if local_path else time() modification_time = local_path.stat().st_mtime if local_path else time()
cls.cached_data[data_name] = StoreData(data, modification_time) cls.cached_data[data_name] = StoreData(data, modification_time)
logger.debug(f'cached: {data_name}')
return cls.cached_data[data_name].data return cls.cached_data[data_name].data
@classmethod @classmethod
def readFile(cls, local_path: Path) -> dict[Any, Any]: def readFile(cls, local_path: Path) -> Dict[Any, Any]:
try: try:
if isinstance(local_path, str): if isinstance(local_path, str):
local_path = Path(local_path) local_path = Path(local_path)
logger.debug(f'loading: {local_path.stem}')
return cls.get_cache(local_path) return cls.get_cache(local_path)
except json.decoder.JSONDecodeError as e: except json.decoder.JSONDecodeError as e:
logger.error(f'Could not load file "{local_path}".') logger.error(f'Could not load file "{local_path}".')
raise FileNotFoundError from e raise FileNotFoundError from e
@classmethod @classmethod
def readExcel(cls, table_name: str) -> dict[Any, Any]: def readExcel(cls, table_name: str) -> Dict[Any, Any]:
logger.debug(f'loading: {table_name}.json') logger.debug(f'loading: {table_name}.json')
if table_name not in cls.cached_data: if table_name not in cls.cached_data:
return {} return {}
return cls.cached_data[table_name].data return cls.cached_data[table_name].data
@classmethod
def readBytesExcel(cls, table_name: str) -> bytes:
logger.debug(f'loading: {table_name}.json')
if table_name not in cls.cached_data:
return bytes({})
return json.dumps(cls.cached_data[table_name].data).encode('utf-8')

View File

@ -1,12 +1,14 @@
import inspect import inspect
from typing import Dict, Union
from msgspec import json as msgjson
from ..utils.models.gamedata.ActivityTable import ActivityTable from ..utils.models.gamedata.ActivityTable import ActivityTable
from ..utils.models.gamedata.AudioData import AudioData from ..utils.models.gamedata.AudioData import AudioData
from ..utils.models.gamedata.BattleEquipTable import BattleEquipTable from ..utils.models.gamedata.BattleEquipTable import BattleEquipData
from ..utils.models.gamedata.BuildingData import BuildingData from ..utils.models.gamedata.BuildingData import BuildingData
from ..utils.models.gamedata.CampaignTable import CampaignTable from ..utils.models.gamedata.CampaignTable import CampaignTable
from ..utils.models.gamedata.ChapterTable import ChapterTable from ..utils.models.gamedata.ChapterTable import ChapterData
from ..utils.models.gamedata.CharacterTable import CharacterTable from ..utils.models.gamedata.CharacterTable import CharacterData
from ..utils.models.gamedata.CharMetaTable import CharMetaTable from ..utils.models.gamedata.CharMetaTable import CharMetaTable
from ..utils.models.gamedata.CharmTable import CharmTable from ..utils.models.gamedata.CharmTable import CharmTable
from ..utils.models.gamedata.CharPatchTable import CharPatchTable from ..utils.models.gamedata.CharPatchTable import CharPatchTable
@ -22,28 +24,28 @@ from ..utils.models.gamedata.GachaTable import GachaTable
from ..utils.models.gamedata.GamedataConst import GamedataConst from ..utils.models.gamedata.GamedataConst import GamedataConst
from ..utils.models.gamedata.HandbookInfoTable import HandbookInfoTable from ..utils.models.gamedata.HandbookInfoTable import HandbookInfoTable
from ..utils.models.gamedata.HandbookTable import HandbookTable from ..utils.models.gamedata.HandbookTable import HandbookTable
from ..utils.models.gamedata.HandbookTeamTable import HandbookTeamTable from ..utils.models.gamedata.HandbookTeamTable import HandbookTeam
from ..utils.models.gamedata.ItemTable import ItemTable from ..utils.models.gamedata.ItemTable import ItemTable
from ..utils.models.gamedata.MedalTable import MedalTable from ..utils.models.gamedata.MedalTable import MedalTable
from ..utils.models.gamedata.MissionTable import MissionTable from ..utils.models.gamedata.MissionTable import MissionTable
from ..utils.models.gamedata.OpenServerTable import OpenServerTable from ..utils.models.gamedata.OpenServerTable import OpenServerTable
from ..utils.models.gamedata.PlayerAvatarTable import PlayerAvatarTable from ..utils.models.gamedata.PlayerAvatarTable import PlayerAvatarTable
from ..utils.models.gamedata.RangeTable import RangeTable from ..utils.models.gamedata.RangeTable import Stage
from ..utils.models.gamedata.ReplicateTable import ReplicateTable from ..utils.models.gamedata.ReplicateTable import ReplicateList
from ..utils.models.gamedata.RetroTable import RetroTable from ..utils.models.gamedata.RetroTable import RetroTable
from ..utils.models.gamedata.RoguelikeTable import RoguelikeTable from ..utils.models.gamedata.RoguelikeTable import RoguelikeTable
from ..utils.models.gamedata.RoguelikeTopicTable import RoguelikeTopicTable from ..utils.models.gamedata.RoguelikeTopicTable import RoguelikeTopicTable
from ..utils.models.gamedata.SandboxTable import SandboxTable from ..utils.models.gamedata.SandboxTable import SandboxTable
from ..utils.models.gamedata.ShopClientTable import ShopClientTable from ..utils.models.gamedata.ShopClientTable import ShopClientTable
from ..utils.models.gamedata.SkillTable import SkillTable from ..utils.models.gamedata.SkillTable import SkillDataBundle
from ..utils.models.gamedata.SkinTable import SkinTable from ..utils.models.gamedata.SkinTable import SkinTable
from ..utils.models.gamedata.StageTable import StageTable from ..utils.models.gamedata.StageTable import StageTable
from ..utils.models.gamedata.StoryReviewMetaTable import StoryReviewMetaTable from ..utils.models.gamedata.StoryReviewMetaTable import StoryReviewMetaTable
from ..utils.models.gamedata.StoryReviewTable import StoryReviewTable from ..utils.models.gamedata.StoryReviewTable import StoryReviewGroupClientData
from ..utils.models.gamedata.StoryTable import StoryTable from ..utils.models.gamedata.StoryTable import StoryData
from ..utils.models.gamedata.TechBuffTable import TechBuffTable from ..utils.models.gamedata.TechBuffTable import TechBuffTable
from ..utils.models.gamedata.TipTable import TipTable from ..utils.models.gamedata.TipTable import TipTable
from ..utils.models.gamedata.TokenTable import TokenTable from ..utils.models.gamedata.TokenTable import TokenCharacterData
from ..utils.models.gamedata.UniequipData import UniequipData from ..utils.models.gamedata.UniequipData import UniequipData
from ..utils.models.gamedata.UniequipTable import UniEquipTable from ..utils.models.gamedata.UniequipTable import UniEquipTable
from ..utils.models.gamedata.ZoneTable import ZoneTable from ..utils.models.gamedata.ZoneTable import ZoneTable
@ -51,625 +53,438 @@ from .cachedata import CacheData
class ExcelTableManager: class ExcelTableManager:
activity_table_: ActivityTable | None = None activity_table_: Union[ActivityTable, None] = None
audio_data_: AudioData | None = None audio_data_: Union[AudioData, None] = None
battle_equip_table_: BattleEquipTable | None = None battle_equip_table_: Union[Dict[str, BattleEquipData], None] = None
building_data_: BuildingData | None = None building_data_: Union[BuildingData, None] = None
campaign_table_: CampaignTable | None = None campaign_table_: Union[CampaignTable, None] = None
chapter_table_: ChapterTable | None = None chapter_table_: Union[Dict[str, ChapterData], None] = None
character_table_: CharacterTable | None = None character_table_: Union[Dict[str, CharacterData], None] = None
char_meta_table_: CharMetaTable | None = None char_meta_table_: Union[CharMetaTable, None] = None
charm_table_: CharmTable | None = None charm_table_: Union[CharmTable, None] = None
char_patch_table_: CharPatchTable | None = None char_patch_table_: Union[CharPatchTable, None] = None
charword_table_: CharwordTable | None = None charword_table_: Union[CharwordTable, None] = None
checkin_table_: CheckinTable | None = None checkin_table_: Union[CheckinTable, None] = None
climb_tower_table_: ClimbTowerTable | None = None climb_tower_table_: Union[ClimbTowerTable, None] = None
clue_data_: ClueData | None = None clue_data_: Union[ClueData, None] = None
crisis_table_: CrisisTable | None = None crisis_table_: Union[CrisisTable, None] = None
display_meta_table_: DisplayMetaTable | None = None display_meta_table_: Union[DisplayMetaTable, None] = None
enemy_handbook_table_: EnemyHandbookTable | None = None enemy_handbook_table_: Union[EnemyHandbookTable, None] = None
favor_table_: FavorTable | None = None favor_table_: Union[FavorTable, None] = None
gacha_table_: GachaTable | None = None gacha_table_: Union[GachaTable, None] = None
gamedata_const_: GamedataConst | None = None gamedata_const_: Union[GamedataConst, None] = None
handbook_info_table_: HandbookInfoTable | None = None handbook_info_table_: Union[HandbookInfoTable, None] = None
handbook_table_: HandbookTable | None = None handbook_table_: Union[HandbookTable, None] = None
handbook_team_table_: HandbookTeamTable | None = None handbook_team_table_: Union[Dict[str, HandbookTeam], None] = None
item_table_: ItemTable | None = None item_table_: Union[ItemTable, None] = None
medal_table_: MedalTable | None = None medal_table_: Union[MedalTable, None] = None
mission_table_: MissionTable | None = None mission_table_: Union[MissionTable, None] = None
open_server_table_: OpenServerTable | None = None open_server_table_: Union[OpenServerTable, None] = None
player_avatar_table_: PlayerAvatarTable | None = None player_avatar_table_: Union[PlayerAvatarTable, None] = None
range_table_: RangeTable | None = None range_table_: Union[Dict[str, Stage], None] = None
replicate_table_: ReplicateTable | None = None replicate_table_: Union[Dict[str, ReplicateList], None] = None
retro_table_: RetroTable | None = None retro_table_: Union[RetroTable, None] = None
roguelike_table_: RoguelikeTable | None = None roguelike_table_: Union[RoguelikeTable, None] = None
roguelike_topic_table_: RoguelikeTopicTable | None = None roguelike_topic_table_: Union[RoguelikeTopicTable, None] = None
sandbox_table_: SandboxTable | None = None sandbox_table_: Union[SandboxTable, None] = None
shop_client_table_: ShopClientTable | None = None shop_client_table_: Union[ShopClientTable, None] = None
skill_table_: SkillTable | None = None skill_table_: Union[Dict[str, SkillDataBundle], None] = None
skin_table_: SkinTable | None = None skin_table_: Union[SkinTable, None] = None
stage_table_: StageTable | None = None stage_table_: Union[StageTable, None] = None
story_review_meta_table_: StoryReviewMetaTable | None = None story_review_meta_table_: Union[StoryReviewMetaTable, None] = None
story_review_table_: StoryReviewTable | None = None story_review_table_: Union[Dict[str, StoryReviewGroupClientData], None] = None
story_table_: StoryTable | None = None story_table_: Union[Dict[str, StoryData], None] = None
tech_buff_table_: TechBuffTable | None = None tech_buff_table_: Union[TechBuffTable, None] = None
tip_table_: TipTable | None = None tip_table_: Union[TipTable, None] = None
token_table_: TokenTable | None = None token_table_: Union[Dict[str, TokenCharacterData], None] = None
uniequip_data_: UniequipData | None = None uniequip_data_: Union[UniequipData, None] = None
uniequip_table_: UniEquipTable | None = None uniequip_table_: Union[UniEquipTable, None] = None
zone_table_: ZoneTable | None = None zone_table_: Union[ZoneTable, None] = None
@property @property
def ACTIVITY_TABLE(self) -> ActivityTable: def ACTIVITY_TABLE(self) -> ActivityTable:
if not self.activity_table_: if not self.activity_table_:
if hasattr(ActivityTable, 'model_validate'): self.activity_table_ = ActivityTable.convert(
self.activity_table_ = ActivityTable.model_validate( # type: ignore CacheData.readExcel('activity_table')
CacheData.readExcel('activity_table') )
)
else:
self.activity_table_ = ActivityTable.parse_obj(
CacheData.readExcel('activity_table')
)
return self.activity_table_ return self.activity_table_
@property @property
def AUDIO_DATA(self) -> AudioData: def AUDIO_DATA(self) -> AudioData:
if not self.audio_data_: if not self.audio_data_:
if hasattr(AudioData, 'model_validate'): self.audio_data_ = AudioData.convert(
self.audio_data_ = AudioData.model_validate( # type: ignore CacheData.readExcel('audio_data')
CacheData.readExcel('audio_data') )
)
else:
self.audio_data_ = AudioData.parse_obj(
CacheData.readExcel('audio_data')
)
return self.audio_data_ return self.audio_data_
@property @property
def BATTLE_EQUIP_TABLE(self) -> BattleEquipTable: def BATTLE_EQUIP_TABLE(self) -> Dict[str, BattleEquipData]:
if not self.battle_equip_table_: if not self.battle_equip_table_:
self.battle_equip_table_ = BattleEquipTable( self.battle_equip_table_ = msgjson.decode(
CacheData.readExcel('battle_equip_table') CacheData.readBytesExcel('battle_equip_table'),
type=Dict[str, BattleEquipData]
) )
return self.battle_equip_table_ return self.battle_equip_table_
@property @property
def BUILDING_DATA(self) -> BuildingData: def BUILDING_DATA(self) -> BuildingData:
if not self.building_data_: if not self.building_data_:
if hasattr(BuildingData, 'model_validate'): self.building_data_ = BuildingData.convert(
self.building_data_ = BuildingData.model_validate( # type: ignore CacheData.readExcel('building_data')
CacheData.readExcel('building_data') )
)
else:
self.building_data_ = BuildingData.parse_obj(
CacheData.readExcel('building_data')
)
return self.building_data_ return self.building_data_
@property @property
def CAMPAIGN_TABLE(self) -> CampaignTable: def CAMPAIGN_TABLE(self) -> CampaignTable:
if not self.campaign_table_: if not self.campaign_table_:
if hasattr(CampaignTable, 'model_validate'): self.campaign_table_ = CampaignTable.convert(
self.campaign_table_ = CampaignTable.model_validate( # type: ignore CacheData.readExcel('campaign_table')
CacheData.readExcel('campaign_table') )
)
else:
self.campaign_table_ = CampaignTable.parse_obj(
CacheData.readExcel('campaign_table')
)
return self.campaign_table_ return self.campaign_table_
@property @property
def CHAPTER_TABLE(self) -> ChapterTable: def CHAPTER_TABLE(self) -> Dict[str, ChapterData]:
if not self.chapter_table_: if not self.chapter_table_:
self.chapter_table_ = ChapterTable(CacheData.readExcel('chapter_table')) self.chapter_table_ = msgjson.decode(
CacheData.readBytesExcel('chapter_table'),
type=Dict[str, ChapterData]
)
return self.chapter_table_ return self.chapter_table_
@property @property
def CHARATER_TABLE(self) -> CharacterTable: def CHARATER_TABLE(self) -> Dict[str, CharacterData]:
if not self.character_table_: if not self.character_table_:
if hasattr(CharacterTable, 'model_validate'): self.character_table_ = msgjson.decode(
self.character_table_ = CharacterTable.model_validate( # type: ignore CacheData.readBytesExcel('character_table'),
CacheData.readExcel('character_table') type=Dict[str, CharacterData]
) )
else:
self.character_table_ = CharacterTable(
CacheData.readExcel('character_table')
)
return self.character_table_ return self.character_table_
@property @property
def CHAR_META_TABLE(self) -> CharMetaTable: def CHAR_META_TABLE(self) -> CharMetaTable:
if not self.char_meta_table_: if not self.char_meta_table_:
if hasattr(CharMetaTable, 'model_validate'): self.char_meta_table_ = CharMetaTable.convert(
self.char_meta_table_ = CharMetaTable.model_validate( # type: ignore CacheData.readExcel('char_meta_table')
CacheData.readExcel('char_meta_table') )
)
else:
self.char_meta_table_ = CharMetaTable.parse_obj(
CacheData.readExcel('char_meta_table')
)
return self.char_meta_table_ return self.char_meta_table_
@property @property
def CHARM_TABLE(self) -> CharmTable: def CHARM_TABLE(self) -> CharmTable:
if not self.charm_table_: if not self.charm_table_:
if hasattr(CharmTable, 'model_validate'): self.charm_table_ = CharmTable.convert(
self.charm_table_ = CharmTable.model_validate( # type: ignore CacheData.readExcel('charm_table')
CacheData.readExcel('charm_table') )
)
else:
self.charm_table_ = CharmTable.parse_obj(
CacheData.readExcel('charm_table')
)
return self.charm_table_ return self.charm_table_
@property @property
def CHAR_PATH_TABLE(self) -> CharPatchTable: def CHAR_PATH_TABLE(self) -> CharPatchTable:
if not self.char_patch_table_: if not self.char_patch_table_:
if hasattr(CharPatchTable, 'model_validate'): self.char_patch_table_ = CharPatchTable.convert(
self.char_patch_table_ = CharPatchTable.model_validate( # type: ignore CacheData.readExcel('char_patch_table')
CacheData.readExcel('char_patch_table') )
)
else:
self.char_patch_table_ = CharPatchTable.parse_obj(
CacheData.readExcel('char_patch_table')
)
return self.char_patch_table_ return self.char_patch_table_
@property @property
def CHARWORD_TABLE(self) -> CharwordTable: def CHARWORD_TABLE(self) -> CharwordTable:
if not self.charword_table_: if not self.charword_table_:
if hasattr(CharwordTable, 'model_validate'): self.charword_table_ = CharwordTable.convert(
self.charword_table_ = CharwordTable.model_validate( # type: ignore CacheData.readExcel('charword_table')
CacheData.readExcel('charword_table') )
)
else:
self.charword_table_ = CharwordTable.parse_obj(
CacheData.readExcel('charword_table')
)
return self.charword_table_ return self.charword_table_
@property @property
def CHECKIN_TABLE(self) -> CheckinTable: def CHECKIN_TABLE(self) -> CheckinTable:
if not self.checkin_table_: if not self.checkin_table_:
if hasattr(CheckinTable, 'model_validate'): self.checkin_table_ = CheckinTable.convert(
self.checkin_table_ = CheckinTable.model_validate( # type: ignore CacheData.readExcel('checkin_table')
CacheData.readExcel('checkin_table') )
)
else:
self.checkin_table_ = CheckinTable.parse_obj(
CacheData.readExcel('checkin_table')
)
return self.checkin_table_ return self.checkin_table_
@property @property
def CLIMB_TOWER_TABLE(self) -> ClimbTowerTable: def CLIMB_TOWER_TABLE(self) -> ClimbTowerTable:
if not self.climb_tower_table_: if not self.climb_tower_table_:
if hasattr(ClimbTowerTable, 'model_validate'): self.climb_tower_table_ = ClimbTowerTable.convert(
self.climb_tower_table_ = ClimbTowerTable.model_validate( # type: ignore CacheData.readExcel('climb_tower_table')
CacheData.readExcel('climb_tower_table') )
)
else:
self.climb_tower_table_ = ClimbTowerTable.parse_obj(
CacheData.readExcel('climb_tower_table')
)
return self.climb_tower_table_ return self.climb_tower_table_
@property @property
def CLUE_DATA(self) -> ClueData: def CLUE_DATA(self) -> ClueData:
if not self.clue_data_: if not self.clue_data_:
if hasattr(ClueData, 'model_validate'): self.clue_data_ = ClueData.convert(
self.clue_data_ = ClueData.model_validate( # type: ignore CacheData.readExcel('clue_data')
CacheData.readExcel('clue_data') )
)
else:
self.clue_data_ = ClueData.parse_obj(
CacheData.readExcel('clue_data')
)
return self.clue_data_ return self.clue_data_
@property @property
def CRISIS_TABLE(self) -> CrisisTable: def CRISIS_TABLE(self) -> CrisisTable:
if not self.crisis_table_: if not self.crisis_table_:
if hasattr(CrisisTable, 'model_validate'): self.crisis_table_ = CrisisTable.convert(
self.crisis_table_ = CrisisTable.model_validate( # type: ignore CacheData.readExcel('crisis_table')
CacheData.readExcel('crisis_table') )
)
else:
self.crisis_table_ = CrisisTable.parse_obj(
CacheData.readExcel('crisis_table')
)
return self.crisis_table_ return self.crisis_table_
@property @property
def DISPLAY_META_TABLE(self) -> DisplayMetaTable: def DISPLAY_META_TABLE(self) -> DisplayMetaTable:
if not self.display_meta_table_: if not self.display_meta_table_:
if hasattr(DisplayMetaTable, 'model_validate'): self.display_meta_table_ = DisplayMetaTable.convert(
self.display_meta_table_ = DisplayMetaTable.model_validate( # type: ignore CacheData.readExcel('display_meta_table')
CacheData.readExcel('display_meta_table') )
)
else:
self.display_meta_table_ = DisplayMetaTable.parse_obj(
CacheData.readExcel('display_meta_table')
)
return self.display_meta_table_ return self.display_meta_table_
@property @property
def ENEMY_HANDBOOK_TABLE(self) -> EnemyHandbookTable: def ENEMY_HANDBOOK_TABLE(self) -> EnemyHandbookTable:
if not self.enemy_handbook_table_: if not self.enemy_handbook_table_:
if hasattr(EnemyHandbookTable, 'model_validate'): self.enemy_handbook_table_ = EnemyHandbookTable.convert(
self.enemy_handbook_table_ = EnemyHandbookTable.model_validate( # type: ignore CacheData.readExcel('enemy_handbook_table')
CacheData.readExcel('enemy_handbook_table') )
)
else:
self.enemy_handbook_table_ = EnemyHandbookTable.parse_obj(
CacheData.readExcel('enemy_handbook_table')
)
return self.enemy_handbook_table_ return self.enemy_handbook_table_
@property @property
def FAVOR_TABLE(self) -> FavorTable: def FAVOR_TABLE(self) -> FavorTable:
if not self.favor_table_: if not self.favor_table_:
if hasattr(FavorTable, 'model_validate'): self.favor_table_ = FavorTable.convert(
self.favor_table_ = FavorTable.model_validate( # type: ignore CacheData.readExcel('favor_table')
CacheData.readExcel('favor_table') )
)
else:
self.favor_table_ = FavorTable.parse_obj(
CacheData.readExcel('favor_table')
)
return self.favor_table_ return self.favor_table_
@property @property
def GACHA_TABLE(self) -> GachaTable: def GACHA_TABLE(self) -> GachaTable:
if not self.gacha_table_: if not self.gacha_table_:
if hasattr(GachaTable, 'model_validate'): self.gacha_table_ = GachaTable.convert(
self.gacha_table_ = GachaTable.model_validate( # type: ignore CacheData.readExcel('gacha_table')
CacheData.readExcel('gacha_table') )
)
else:
self.gacha_table_ = GachaTable.parse_obj(
CacheData.readExcel('gacha_table')
)
return self.gacha_table_ return self.gacha_table_
@property @property
def GAMEDATA_CONST(self) -> GamedataConst: def GAMEDATA_CONST(self) -> GamedataConst:
if not self.gamedata_const_: if not self.gamedata_const_:
if hasattr(GamedataConst, 'model_validate'): self.gamedata_const_ = GamedataConst.convert(
self.gamedata_const_ = GamedataConst.model_validate( # type: ignore CacheData.readExcel('gamedata_const')
CacheData.readExcel('gamedata_const') )
)
else:
self.gamedata_const_ = GamedataConst.parse_obj(
CacheData.readExcel('gamedata_const')
)
return self.gamedata_const_ return self.gamedata_const_
@property @property
def HANDBOOK_INFO_TABLE(self) -> HandbookInfoTable: def HANDBOOK_INFO_TABLE(self) -> HandbookInfoTable:
if not self.handbook_info_table_: if not self.handbook_info_table_:
if hasattr(HandbookInfoTable, 'model_validate'): self.handbook_info_table_ = HandbookInfoTable.convert(
self.handbook_info_table_ = HandbookInfoTable.model_validate( # type: ignore CacheData.readExcel('handbook_info_table')
CacheData.readExcel('handbook_info_table') )
)
else:
self.handbook_info_table_ = HandbookInfoTable.parse_obj(
CacheData.readExcel('handbook_info_table')
)
return self.handbook_info_table_ return self.handbook_info_table_
@property @property
def HANDBOOK_TABLE(self) -> HandbookTable: def HANDBOOK_TABLE(self) -> HandbookTable:
if not self.handbook_table_: if not self.handbook_table_:
if hasattr(HandbookTable, 'model_validate'): self.handbook_table_ = HandbookTable.convert(
self.handbook_table_ = HandbookTable.model_validate( # type: ignore CacheData.readExcel('handbook_table')
CacheData.readExcel('handbook_table') )
)
else:
self.handbook_table_ = HandbookTable.parse_obj(
CacheData.readExcel('handbook_table')
)
return self.handbook_table_ return self.handbook_table_
@property @property
def HANDBOOK_TEAM_TABLE(self) -> HandbookTeamTable: def HANDBOOK_TEAM_TABLE(self) -> Dict[str, HandbookTeam]:
if not self.handbook_team_table_: if not self.handbook_team_table_:
if hasattr(HandbookTeamTable, 'model_validate'): self.handbook_team_table_ = msgjson.decode(
self.handbook_team_table_ = HandbookTeamTable.model_validate( # type: ignore CacheData.readBytesExcel('handbook_team_table'),
CacheData.readExcel('handbook_team_table') type=Dict[str, HandbookTeam]
) )
else:
self.handbook_team_table_ = HandbookTeamTable.parse_obj(
CacheData.readExcel('handbook_team_table')
)
return self.handbook_team_table_ return self.handbook_team_table_
@property @property
def ITEM_TABLE(self) -> ItemTable: def ITEM_TABLE(self) -> ItemTable:
if not self.item_table_: if not self.item_table_:
if hasattr(ItemTable, 'model_validate'): self.item_table_ = ItemTable.convert(
self.item_table_ = ItemTable.model_validate( # type: ignore CacheData.readExcel('item_table')
CacheData.readExcel('item_table') )
)
else:
self.item_table_ = ItemTable.parse_obj(
CacheData.readExcel('item_table')
)
return self.item_table_ return self.item_table_
@property @property
def MEDAL_TABLE(self) -> MedalTable: def MEDAL_TABLE(self) -> MedalTable:
if not self.medal_table_: if not self.medal_table_:
if hasattr(MedalTable, 'model_validate'): self.medal_table_ = MedalTable.convert(
self.medal_table_ = MedalTable.model_validate( # type: ignore CacheData.readExcel('medal_table')
CacheData.readExcel('medal_table') )
)
else:
self.medal_table_ = MedalTable.parse_obj(
CacheData.readExcel('medal_table')
)
return self.medal_table_ return self.medal_table_
@property @property
def MISSION_TABLE(self) -> MissionTable: def MISSION_TABLE(self) -> MissionTable:
if not self.mission_table_: if not self.mission_table_:
if hasattr(MissionTable, 'model_validate'): self.mission_table_ = MissionTable.convert(
self.mission_table_ = MissionTable.model_validate( # type: ignore CacheData.readExcel('mission_table')
CacheData.readExcel('mission_table') )
)
else:
self.mission_table_ = MissionTable.parse_obj(
CacheData.readExcel('mission_table')
)
return self.mission_table_ return self.mission_table_
@property @property
def OPEN_SERVER_TABLE(self) -> OpenServerTable: def OPEN_SERVER_TABLE(self) -> OpenServerTable:
if not self.open_server_table_: if not self.open_server_table_:
if hasattr(OpenServerTable, 'model_validate'): self.open_server_table_ = OpenServerTable.convert(
self.open_server_table_ = OpenServerTable.model_validate( # type: ignore CacheData.readExcel('open_server_table')
CacheData.readExcel('open_server_table') )
)
else:
self.open_server_table_ = OpenServerTable.parse_obj(
CacheData.readExcel('open_server_table')
)
return self.open_server_table_ return self.open_server_table_
@property @property
def PLAYER_AVATAR_TABLE(self) -> PlayerAvatarTable: def PLAYER_AVATAR_TABLE(self) -> PlayerAvatarTable:
if not self.player_avatar_table_: if not self.player_avatar_table_:
if hasattr(PlayerAvatarTable, 'model_validate'): self.player_avatar_table_ = PlayerAvatarTable.convert(
self.player_avatar_table_ = PlayerAvatarTable.model_validate( # type: ignore CacheData.readExcel('player_avatar_table')
CacheData.readExcel('player_avatar_table') )
)
else:
self.player_avatar_table_ = PlayerAvatarTable.parse_obj(
CacheData.readExcel('player_avatar_table')
)
return self.player_avatar_table_ return self.player_avatar_table_
@property @property
def RANGE_TABLE(self) -> RangeTable: def RANGE_TABLE(self) -> Dict[str, Stage]:
if not self.range_table_: if not self.range_table_:
if hasattr(RangeTable, 'model_validate'): self.range_table_ = msgjson.decode(
self.range_table_ = RangeTable.model_validate( # type: ignore CacheData.readBytesExcel('range_table'),
CacheData.readExcel('range_table') type=Dict[str, Stage]
) )
else:
self.range_table_ = RangeTable.parse_obj(
CacheData.readExcel('range_table')
)
return self.range_table_ return self.range_table_
@property @property
def REPLICATE_TABLE(self) -> ReplicateTable: def REPLICATE_TABLE(self) -> Dict[str, ReplicateList]:
if not self.replicate_table_: if not self.replicate_table_:
if hasattr(ReplicateTable, 'model_validate'): self.replicate_table_ = msgjson.decode(
self.replicate_table_ = ReplicateTable.model_validate( # type: ignore CacheData.readBytesExcel('replicate_table'),
CacheData.readExcel('replicate_table') type=Dict[str, ReplicateList]
) )
else:
self.replicate_table_ = ReplicateTable.parse_obj(
CacheData.readExcel('replicate_table')
)
return self.replicate_table_ return self.replicate_table_
@property @property
def RETRO_TABLE(self) -> RetroTable: def RETRO_TABLE(self) -> RetroTable:
if not self.retro_table_: if not self.retro_table_:
if hasattr(RetroTable, 'model_validate'): self.retro_table_ = RetroTable.convert(
self.retro_table_ = RetroTable.model_validate( # type: ignore CacheData.readExcel('retro_table')
CacheData.readExcel('retro_table') )
)
else:
self.retro_table_ = RetroTable.parse_obj(
CacheData.readExcel('retro_table')
)
return self.retro_table_ return self.retro_table_
@property @property
def ROGUELIKE_TABLE(self) -> RoguelikeTable: def ROGUELIKE_TABLE(self) -> RoguelikeTable:
if not self.roguelike_table_: if not self.roguelike_table_:
if hasattr(RoguelikeTable, 'model_validate'): self.roguelike_table_ = RoguelikeTable.convert(
self.roguelike_table_ = RoguelikeTable.model_validate( # type: ignore CacheData.readExcel('roguelike_table')
CacheData.readExcel('roguelike_table') )
)
else:
self.roguelike_table_ = RoguelikeTable.parse_obj(
CacheData.readExcel('roguelike_table')
)
return self.roguelike_table_ return self.roguelike_table_
@property @property
def ROGUELIKE_TOPIC_TABLE(self) -> RoguelikeTopicTable: def ROGUELIKE_TOPIC_TABLE(self) -> RoguelikeTopicTable:
if not self.roguelike_topic_table_: if not self.roguelike_topic_table_:
if hasattr(RoguelikeTopicTable, 'model_validate'): self.roguelike_topic_table_ = RoguelikeTopicTable.convert(
self.roguelike_topic_table_ = RoguelikeTopicTable.model_validate( # type: ignore CacheData.readExcel('roguelike_topic_table')
CacheData.readExcel('roguelike_topic_table') )
)
else:
self.roguelike_topic_table_ = RoguelikeTopicTable.parse_obj(
CacheData.readExcel('roguelike_topic_table')
)
return self.roguelike_topic_table_ return self.roguelike_topic_table_
@property @property
def SANDBOX_TABLE(self) -> SandboxTable: def SANDBOX_TABLE(self) -> SandboxTable:
if not self.sandbox_table_: if not self.sandbox_table_:
if hasattr(SandboxTable, 'model_validate'): self.sandbox_table_ = SandboxTable.convert(
self.sandbox_table_ = SandboxTable.model_validate( # type: ignore CacheData.readExcel('sandbox_table')
CacheData.readExcel('sandbox_table') )
)
else:
self.sandbox_table_ = SandboxTable.parse_obj(
CacheData.readExcel('sandbox_table')
)
return self.sandbox_table_ return self.sandbox_table_
@property @property
def SHOP_CLIENT_TABLE(self) -> ShopClientTable: def SHOP_CLIENT_TABLE(self) -> ShopClientTable:
if not self.shop_client_table_: if not self.shop_client_table_:
if hasattr(ShopClientTable, 'model_validate'): self.shop_client_table_ = ShopClientTable.convert(
self.shop_client_table_ = ShopClientTable.model_validate( # type: ignore CacheData.readExcel('shop_client_table')
CacheData.readExcel('shop_client_table') )
)
else:
self.shop_client_table_ = ShopClientTable.parse_obj(
CacheData.readExcel('shop_client_table')
)
return self.shop_client_table_ return self.shop_client_table_
@property @property
def SKILL_TABLE(self) -> SkillTable: def SKILL_TABLE(self) -> Dict[str, SkillDataBundle]:
if not self.skill_table_: if not self.skill_table_:
self.skill_table_ = SkillTable(CacheData.readExcel('skill_table')) self.skill_table_ = msgjson.decode(
CacheData.readBytesExcel('skill_table'),
type=Dict[str, SkillDataBundle]
)
return self.skill_table_ return self.skill_table_
@property @property
def SKIN_TABLE(self) -> SkinTable: def SKIN_TABLE(self) -> SkinTable:
if not self.skin_table_: if not self.skin_table_:
if hasattr(SkinTable, 'model_validate'): self.skin_table_ = SkinTable.convert(
self.skin_table_ = SkinTable.model_validate( # type: ignore CacheData.readExcel('skin_table')
CacheData.readExcel('skin_table') )
)
else:
self.skin_table_ = SkinTable.parse_obj(
CacheData.readExcel('skin_table')
)
return self.skin_table_ return self.skin_table_
@property @property
def STAGE_TABLE(self) -> StageTable: def STAGE_TABLE(self) -> StageTable:
if not self.stage_table_: if not self.stage_table_:
if hasattr(StageTable, 'model_validate'): self.stage_table_ = StageTable.convert(
self.stage_table_ = StageTable.model_validate( # type: ignore CacheData.readExcel('stage_table')
CacheData.readExcel('stage_table') )
)
else:
self.stage_table_ = StageTable.parse_obj(
CacheData.readExcel('stage_table')
)
return self.stage_table_ return self.stage_table_
@property @property
def STORY_REVIEW_META_TABLE(self) -> StoryReviewMetaTable: def STORY_REVIEW_META_TABLE(self) -> StoryReviewMetaTable:
if not self.story_review_meta_table_: if not self.story_review_meta_table_:
if hasattr(StoryReviewMetaTable, 'model_validate'): self.story_review_meta_table_ = StoryReviewMetaTable.convert(
self.story_review_meta_table_ = StoryReviewMetaTable.model_validate( # type: ignore CacheData.readExcel('story_review_meta_table')
CacheData.readExcel('story_review_meta_table') )
)
else:
self.story_review_meta_table_ = StoryReviewMetaTable.parse_obj(
CacheData.readExcel('story_review_meta_table')
)
return self.story_review_meta_table_ return self.story_review_meta_table_
@property @property
def STORY_REVIEW_TABLE(self) -> StoryReviewTable: def STORY_REVIEW_TABLE(self) -> Dict[str, StoryReviewGroupClientData]:
if not self.story_review_table_: if not self.story_review_table_:
self.story_review_table_ = StoryReviewTable( self.story_review_table_ = msgjson.decode(
CacheData.readExcel('story_review_table') CacheData.readBytesExcel('story_review_table'),
type=Dict[str, StoryReviewGroupClientData]
) )
return self.story_review_table_ return self.story_review_table_
@property @property
def STORY_TABLE(self) -> StoryTable: def STORY_TABLE(self) -> Dict[str, StoryData]:
if not self.story_table_: if not self.story_table_:
self.story_table_ = StoryTable(CacheData.readExcel('story_table')) self.story_table_ = msgjson.decode(
CacheData.readBytesExcel('story_table'),
type=Dict[str, StoryData]
)
return self.story_table_ return self.story_table_
@property @property
def TECH_BUFF_TABLE(self) -> TechBuffTable: def TECH_BUFF_TABLE(self) -> TechBuffTable:
if not self.tech_buff_table_: if not self.tech_buff_table_:
if hasattr(TechBuffTable, 'model_validate'): self.tech_buff_table_ = TechBuffTable.convert(
self.tech_buff_table_ = TechBuffTable.model_validate( # type: ignore CacheData.readExcel('tech_buff_table')
CacheData.readExcel('tech_buff_table') )
)
else:
self.tech_buff_table_ = TechBuffTable.parse_obj(
CacheData.readExcel('tech_buff_table')
)
return self.tech_buff_table_ return self.tech_buff_table_
@property @property
def TIP_TABLE(self) -> TipTable: def TIP_TABLE(self) -> TipTable:
if not self.tip_table_: if not self.tip_table_:
if hasattr(TipTable, 'model_validate'): self.tip_table_ = TipTable.convert(
self.tip_table_ = TipTable.model_validate( # type: ignore CacheData.readExcel('tip_table')
CacheData.readExcel('tip_table') )
)
else:
self.tip_table_ = TipTable.parse_obj(
CacheData.readExcel('tip_table')
)
return self.tip_table_ return self.tip_table_
@property @property
def TOKEN_TABLE(self) -> TokenTable: def TOKEN_TABLE(self) -> Dict[str, TokenCharacterData]:
if not self.token_table_: if not self.token_table_:
self.token_table_ = TokenTable(CacheData.readExcel('token_table')) self.token_table_ = msgjson.decode(
CacheData.readBytesExcel('token_table'),
type=Dict[str, TokenCharacterData]
)
return self.token_table_ return self.token_table_
@property @property
def UNIEQUIP_DATA(self) -> UniequipData: def UNIEQUIP_DATA(self) -> UniequipData:
if not self.uniequip_data_: if not self.uniequip_data_:
if hasattr(UniequipData, 'model_validate'): self.uniequip_data_ = UniequipData.convert(
self.uniequip_data_ = UniequipData.model_validate( # type: ignore CacheData.readExcel('uniequip_data')
CacheData.readExcel('uniequip_data') )
)
else:
self.uniequip_data_ = UniequipData.parse_obj(
CacheData.readExcel('uniequip_data')
)
return self.uniequip_data_ return self.uniequip_data_
@property @property
def UNIEQUIP_TABLE(self) -> UniEquipTable: def UNIEQUIP_TABLE(self) -> UniEquipTable:
if not self.uniequip_table_: if not self.uniequip_table_:
if hasattr(UniEquipTable, 'model_validate'): self.uniequip_table_ = UniEquipTable.convert(
self.uniequip_table_ = UniEquipTable.model_validate( # type: ignore CacheData.readExcel('uniequip_table')
CacheData.readExcel('uniequip_table') )
)
else:
self.uniequip_table_ = UniEquipTable.parse_obj(
CacheData.readExcel('uniequip_table')
)
return self.uniequip_table_ return self.uniequip_table_
@property @property
def ZONE_TABLE(self) -> ZoneTable: def ZONE_TABLE(self) -> ZoneTable:
if not self.zone_table_: if not self.zone_table_:
if hasattr(ZoneTable, 'model_validate'): self.zone_table_ = ZoneTable.convert(
self.zone_table_ = ZoneTable.model_validate( # type: ignore CacheData.readExcel('zone_table')
CacheData.readExcel('zone_table') )
)
else:
self.zone_table_ = ZoneTable.parse_obj(
CacheData.readExcel('zone_table')
)
return self.zone_table_ return self.zone_table_
def preload_table(self) -> None: def preload_table(self) -> None:

View File

@ -1,3 +1,4 @@
from typing import List
from gsuid_core.bot import Bot from gsuid_core.bot import Bot
from gsuid_core.models import Event from gsuid_core.models import Event
from gsuid_core.sv import SV from gsuid_core.sv import SV
@ -50,7 +51,7 @@ async def send_link_uid_msg(bot: Bot, ev: Event):
) )
elif '切换' in ev.command: elif '切换' in ev.command:
data = await ArknightsBind.switch_uid_by_game(qid, ev.bot_id, ark_uid) data = await ArknightsBind.switch_uid_by_game(qid, ev.bot_id, ark_uid)
if isinstance(data, list): if isinstance(data, List):
return await bot.send(f'切换ARK_UID{ark_uid}成功!') return await bot.send(f'切换ARK_UID{ark_uid}成功!')
else: else:
return await bot.send(f'尚未绑定该ARK_UID{ark_uid}') return await bot.send(f'尚未绑定该ARK_UID{ark_uid}')

View File

@ -3,7 +3,7 @@ import hashlib
import json import json
import time import time
import hmac import hmac
from typing import Any, ClassVar, Literal, cast from typing import Any, ClassVar, Dict, Literal, Tuple, Union, cast
from urllib.parse import urlparse from urllib.parse import urlparse
import msgspec import msgspec
@ -24,7 +24,7 @@ proxy_url = core_plugins_config.get_config('proxy').data
ssl_verify = core_plugins_config.get_config('MhySSLVerify').data ssl_verify = core_plugins_config.get_config('MhySSLVerify').data
_HEADER: dict[str, str] = { _HEADER: Dict[str, str] = {
'Host': 'zonai.skland.com', 'Host': 'zonai.skland.com',
'platform': '1', 'platform': '1',
'Origin': 'https://www.skland.com', 'Origin': 'https://www.skland.com',
@ -49,9 +49,9 @@ class TokenRefreshFailed(Exception):
class BaseArkApi: class BaseArkApi:
proxy_url: str | None = proxy_url if proxy_url else None proxy_url: Union[str, None] = proxy_url if proxy_url else None
async def _pass(self, gt: str, ch: str) -> tuple[str | None, str | None]: async def _pass(self, gt: str, ch: str) -> Tuple[Union[str, None], Union[str, None]]:
_pass_api = core_plugins_config.get_config('_pass_API').data _pass_api = core_plugins_config.get_config('_pass_API').data
if _pass_api: if _pass_api:
data = await self._ark_request( data = await self._ark_request(
@ -68,8 +68,8 @@ class BaseArkApi:
return validate, ch return validate, ch
async def get_game_player_info(self, uid: str) -> int | ArknightsPlayerInfoModel: async def get_game_player_info(self, uid: str) -> Union[int, ArknightsPlayerInfoModel]:
cred: str | None = await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred') cred: Union[str, None] = await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred')
if cred is None: if cred is None:
return -60 return -60
is_vaild = await self.check_cred_valid(cred) is_vaild = await self.check_cred_valid(cred)
@ -92,8 +92,8 @@ class BaseArkApi:
else: else:
return msgspec.convert(unpack_data, type=ArknightsPlayerInfoModel) return msgspec.convert(unpack_data, type=ArknightsPlayerInfoModel)
async def skd_sign(self, uid: str) -> int | ArknightsAttendanceModel: async def skd_sign(self, uid: str) -> Union[int, ArknightsAttendanceModel]:
cred: str | None = await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred') cred: Union[str, None] = await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred')
if cred is None: if cred is None:
return -60 return -60
is_vaild = await self.check_cred_valid(cred) is_vaild = await self.check_cred_valid(cred)
@ -127,8 +127,8 @@ class BaseArkApi:
else: else:
return msgspec.convert(unpack_data, ArknightsAttendanceModel) return msgspec.convert(unpack_data, ArknightsAttendanceModel)
async def get_sign_info(self, uid: str) -> int | ArknightsAttendanceCalendarModel: async def get_sign_info(self, uid: str) -> Union[int, ArknightsAttendanceCalendarModel]:
cred: str | None = await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred') cred: Union[str, None] = await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred')
if cred is None: if cred is None:
return -60 return -60
is_vaild = await self.check_cred_valid(cred) is_vaild = await self.check_cred_valid(cred)
@ -163,8 +163,8 @@ class BaseArkApi:
return msgspec.convert(unpack_data, ArknightsAttendanceCalendarModel) return msgspec.convert(unpack_data, ArknightsAttendanceCalendarModel)
async def check_cred_valid( async def check_cred_valid(
self, cred: str | None = None, token: str | None = None, uid: str | None = None self, cred: Union[str, None] = None, token: Union[str, None] = None, uid: Union[str, None] = None
) -> bool | ArknightsUserMeModel: ) -> Union[bool, ArknightsUserMeModel]:
if uid is not None: if uid is not None:
cred = cred if cred else await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred') cred = cred if cred else await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred')
header = deepcopy(_HEADER) header = deepcopy(_HEADER)
@ -181,14 +181,14 @@ class BaseArkApi:
unpack_data = self.unpack(raw_data) unpack_data = self.unpack(raw_data)
return msgspec.convert(unpack_data, type=ArknightsUserMeModel) return msgspec.convert(unpack_data, type=ArknightsUserMeModel)
def unpack(self, raw_data: dict) -> dict: def unpack(self, raw_data: Dict) -> Dict:
try: try:
data = raw_data['data'] data = raw_data['data']
return data return data
except KeyError: except KeyError:
return raw_data return raw_data
async def refresh_token(self, cred: str, uid: str | None = None) -> str: async def refresh_token(self, cred: str, uid: Union[str, None] = None) -> str:
header = deepcopy(_HEADER) header = deepcopy(_HEADER)
header['cred'] = cred header['cred'] = cred
header['sign_enable'] = 'false' header['sign_enable'] = 'false'
@ -205,11 +205,11 @@ class BaseArkApi:
async def set_sign( async def set_sign(
self, self,
url: str, url: str,
header: dict[str, Any], header: Dict[str, Any],
data: dict[str, Any] | None = None, data: Union[Dict[str, Any], None ]= None,
params: dict[str, Any] | None = None, params: Union[Dict[str, Any], None] = None,
token: str | None = None, token: Union[str, None] = None,
) -> dict: ) -> Dict:
parsed_url = urlparse(url) parsed_url = urlparse(url)
path = parsed_url.path path = parsed_url.path
timestamp = str(int(time.time()) - 2) timestamp = str(int(time.time()) - 2)
@ -249,11 +249,11 @@ class BaseArkApi:
self, self,
url: str, url: str,
method: Literal['GET', 'POST'] = 'GET', method: Literal['GET', 'POST'] = 'GET',
header: dict[str, Any] = _HEADER, header: Dict[str, Any] = _HEADER,
params: dict[str, Any] | None = None, params: Union[Dict[str, Any], None] = None,
data: dict[str, Any] | None = None, data: Union[Dict[str, Any], None] = None,
use_proxy: bool | None = False, use_proxy: Union[bool, None] = False,
) -> dict | int: ) -> Union[Dict, int]:
logger.debug(f'{url} {method} {header} {params} {data} {use_proxy}') logger.debug(f'{url} {method} {header} {params} {data} {use_proxy}')
try: try:
raw_data = await self._ark_request( raw_data = await self._ark_request(
@ -281,11 +281,11 @@ class BaseArkApi:
self, self,
url: str, url: str,
method: Literal['GET', 'POST'] = 'GET', method: Literal['GET', 'POST'] = 'GET',
header: dict[str, Any] = _HEADER, header: Dict[str, Any] = _HEADER,
params: dict[str, Any] | None = None, params: Union[Dict[str, Any], None ]= None,
data: dict[str, Any] | None = None, data: Union[Dict[str, Any], None] = None,
use_proxy: bool | None = False, use_proxy: Union[bool, None] = False,
) -> dict | int: ) -> Union[Dict, int]:
async with ClientSession( async with ClientSession(
connector=TCPConnector(verify_ssl=ssl_verify) connector=TCPConnector(verify_ssl=ssl_verify)
) as client: ) as client:

View File

@ -1,4 +1,4 @@
from typing import Literal from typing import Dict, Literal, Union
from gsuid_core.utils.database.base_models import Bind, Push, T_BaseIDModel, T_User, User, with_session, BaseModel from gsuid_core.utils.database.base_models import Bind, Push, T_BaseIDModel, T_User, User, with_session, BaseModel
from gsuid_core.webconsole.mount_app import GsAdminModel, PageSchema, site from gsuid_core.webconsole.mount_app import GsAdminModel, PageSchema, site
@ -8,14 +8,14 @@ from sqlalchemy.ext.asyncio import AsyncSession
class ArknightsBind(Bind, table=True): class ArknightsBind(Bind, table=True):
uid: str | None = Field(default=None, title='明日方舟UID') uid: Union[str, None] = Field(default=None, title='明日方舟UID')
class ArknightsUser(User, table=True): class ArknightsUser(User, table=True):
uid: str | None = Field(default=None, title='明日方舟UID') uid: Union[str, None] = Field(default=None, title='明日方舟UID')
skd_uid: str | None = Field(default=None, title='SKD用户ID') skd_uid: Union[str, None] = Field(default=None, title='SKD用户ID')
cred: str | None = Field(default=None, title='SKD凭证') cred: Union[str, None] = Field(default=None, title='SKD凭证')
token: str | None = Field(default=None, title='SKD Token') token: Union[str, None] = Field(default=None, title='SKD Token')
@classmethod @classmethod
@with_session @with_session
@ -23,19 +23,19 @@ class ArknightsUser(User, table=True):
cls, cls,
session: AsyncSession, session: AsyncSession,
cred: str cred: str
) -> BaseModel | None: ) -> Union[BaseModel, None]:
sql= select(cls).where(cls.cred == cred) sql= select(cls).where(cls.cred == cred)
result = await session.execute(sql) result = await session.execute(sql)
data = result.scalars().all() data = result.scalars().all()
return data[0] if data else None return data[0] if data else None
@classmethod @classmethod
async def get_token_by_cred(cls, cred: str) -> str | None: async def get_token_by_cred(cls, cred: str) -> Union[str, None]:
result = await cls.select_data_by_cred(cred) result = await cls.select_data_by_cred(cred)
return getattr(result, 'token') if result else None return getattr(result, 'token') if result else None
@classmethod @classmethod
async def get_uid_by_cred(cls, cred: str) -> str | None: async def get_uid_by_cred(cls, cred: str) -> Union[str, None]:
result = await cls.select_data_by_cred(cred) result = await cls.select_data_by_cred(cred)
return getattr(result, 'uid') if result else None return getattr(result, 'uid') if result else None
@ -55,14 +55,14 @@ class ArknightsUser(User, table=True):
class ArknightsPush(Push, table=True): class ArknightsPush(Push, table=True):
uid: str | None = Field(default=None, title='明日方舟UID') uid: Union[str, None] = Field(default=None, title='明日方舟UID')
skd_uid: str | None = Field(default=None, title='森空岛用户ID') skd_uid: Union[str, None] = Field(default=None, title='森空岛用户ID')
ap_push: bool | None = Field(default=False, title='理智推送') ap_push: Union[bool, None] = Field(default=False, title='理智推送')
ap_value: int | None = Field(default=110, title='理智推送阈值') ap_value: Union[int, None] = Field(default=110, title='理智推送阈值')
ap_is_push: bool | None = Field(default=False, title='理智是否已经推送') ap_is_push: Union[bool, None] = Field(default=False, title='理智是否已经推送')
training_push: bool | None = Field(default=False, title='训练室推送') training_push: Union[bool, None] = Field(default=False, title='训练室推送')
training_value: int | None = Field(default=30, title='训练室推送阈值') training_value: Union[int, None] = Field(default=30, title='训练室推送阈值')
training_is_push: bool | None = Field(default=False, title='训练室是否已经推送') training_is_push: Union[bool, None] = Field(default=False, title='训练室是否已经推送')
@classmethod @classmethod
async def insert_push_data(cls, uid: str, skd_uid: str): async def insert_push_data(cls, uid: str, skd_uid: str):
@ -79,7 +79,7 @@ class ArknightsPush(Push, table=True):
) )
@classmethod @classmethod
async def update_push_data(cls, uid: str, data: dict) -> bool: async def update_push_data(cls, uid: str, data: Dict) -> bool:
retcode = -1 retcode = -1
if await cls.data_exist(uid=uid): if await cls.data_exist(uid=uid):
retcode = await cls.update_data_by_uid( retcode = await cls.update_data_by_uid(
@ -99,7 +99,7 @@ class ArknightsPush(Push, table=True):
@classmethod @classmethod
async def select_push_data( async def select_push_data(
cls: type[T_BaseIDModel], uid: str cls: type[T_BaseIDModel], uid: str
) -> T_BaseIDModel | None: ) -> Union[T_BaseIDModel, None]:
return await cls.base_select_data(uid=uid) return await cls.base_select_data(uid=uid)
@classmethod @classmethod

View File

@ -1,6 +1,9 @@
from typing import Union
UID_HINT = '添加失败, 请先绑定明日方舟UID' UID_HINT = '添加失败, 请先绑定明日方舟UID'
def get_error(retcode: int | str) -> str: def get_error(retcode: Union[int, str]) -> str:
if retcode == 10000: if retcode == 10000:
return '请求异常, 请检查具体实现代码...' return '请求异常, 请检查具体实现代码...'
if retcode == 10001: if retcode == 10001:

View File

@ -1,10 +1,11 @@
import json import json
from pathlib import Path from pathlib import Path
from typing import Dict
from loguru import logger from loguru import logger
def read_json(file_path: Path, **kwargs) -> dict: def read_json(file_path: Path, **kwargs) -> Dict:
""" """
Read a JSON file and return its contents as a dictionary. Read a JSON file and return its contents as a dictionary.
""" """
@ -16,7 +17,7 @@ def read_json(file_path: Path, **kwargs) -> dict:
return {} return {}
def write_json(data: dict, file_path: Path) -> None: def write_json(data: Dict, file_path: Path) -> None:
""" """
Write a dictionary to a JSON file. Write a dictionary to a JSON file.
""" """

View File

@ -1,4 +1,5 @@
from pathlib import Path from pathlib import Path
from typing import Union
from gsuid_core.utils.image.image_tools import CustomizeImage from gsuid_core.utils.image.image_tools import CustomizeImage
from PIL import Image from PIL import Image
@ -9,7 +10,7 @@ SP_BG_PATH = BG_PATH / 'sp_bg'
async def get_simple_bg( async def get_simple_bg(
based_w: int, based_h: int, image: str | None | Image.Image = None based_w: int, based_h: int, image: Union[str, Union[None, Image.Image]] = None
) -> Image.Image: ) -> Image.Image:
CIL = CustomizeImage(NM_BG_PATH) CIL = CustomizeImage(NM_BG_PATH)
return CIL.get_image(image, based_w, based_h) return CIL.get_image(image, based_w, based_h)

View File

@ -1,9 +1,9 @@
from typing import Any from typing import Any, Dict, Union
from gsuid_core.bot import Bot from gsuid_core.bot import Bot
async def send_diff_msg(bot: Bot, code: Any, data: dict | None = None): async def send_diff_msg(bot: Bot, code: Any, data: Union[Dict, None] = None):
if data is None: if data is None:
data = { data = {
0: '绑定UID成功!', 0: '绑定UID成功!',

View File

@ -0,0 +1,126 @@
import base64
import json
from collections.abc import Callable, Iterable, Iterator
from copy import copy, deepcopy
from typing import Any, Dict, List, Tuple, TypeVar, Union
from msgspec import Meta, Struct, UnsetType, convert, field
from msgspec import json as mscjson
from typing_extensions import dataclass_transform
Model = TypeVar('Model', bound='BaseStruct')
T = TypeVar("T")
def transUnset(v: Union[T, UnsetType], d: Any = None) -> Union[T, Any]:
return v if not isinstance(v, UnsetType) else d
@dataclass_transform(field_specifiers=(field,))
class BaseStruct(Struct, forbid_unknown_fields=True, omit_defaults=True, gc=False):
class Config:
encoder = mscjson.Encoder()
@classmethod
def json_schema(cls) -> str:
return (
f"```json\n{json.dumps(mscjson.schema(cls), ensure_ascii=False, indent=2)}"
)
@classmethod
def convert(
cls: type[Model],
obj: Any,
*,
strict: bool = True,
from_attributes: bool = False,
dec_hook: Union[Callable[[type, Any], Any], None] = None,
builtin_types: Union[Iterable[type], None] = None,
str_keys: bool = False,
) -> Model:
return convert(
obj=obj,
type=cls,
strict=strict,
from_attributes=from_attributes,
dec_hook=dec_hook,
builtin_types=builtin_types,
str_keys=str_keys
)
def __post_init__(
self,
validate_whitespace: Union[List[str], None] = None,
validate_num_with_range: Union[List[Tuple[str, Meta]], None] = None,
validate_optional: Union[List[Tuple[str, Meta]], None] = None,
validate_int: Union[List[str], None] = None,
validate_base64: Union[List[str], None] = None,
) -> None:
if validate_base64 is None:
validate_base64 = []
if validate_int is None:
validate_int = []
if validate_optional is None:
validate_optional = []
if validate_num_with_range is None:
validate_num_with_range = []
if validate_whitespace is None:
validate_whitespace = []
for field_name in validate_whitespace:
if (field_value := getattr(self, field_name)) is not None:
if isinstance(field_value, str) and not field_value.strip():
raise ValueError(
f'child "{field_name}" fails because ["{field_name}" is not allowed to be empty]'
)
for field_group in validate_num_with_range:
if (field_value := getattr(self, field_group[0])) is not None:
if field_value > (le := field_group[1].le or field_value):
raise ValueError(f'"{field_group[0]}" must be less than {le}')
if field_value < (ge := field_group[1].ge or field_value):
raise ValueError(f'"{field_group[0]}" must be greater than {ge}')
for field_group in validate_optional:
if (field_value := getattr(self, field_group[0])) is not None:
if field_value not in field_group[1].examples:
raise ValueError(
f'"{field_group[0]}" must be one of {field_group[1]}'
)
for field_name in validate_int:
if (field_value := getattr(self, field_name)) is not None:
if not field_value.isdigit():
raise ValueError(
f'child "{field_name}" fails because ["{field_name}" must be a number]'
)
for field_name in validate_base64:
try:
base64.b64decode(getattr(self, field_name))
except Exception as e:
raise ValueError(
f'child "{field_name}" fails because ["{field_name}" must be a valid base64 string]'
) from e
def __iter__(self) -> Iterator[Tuple[str, Any]]:
for field_name in self.__struct_fields__:
yield field_name, getattr(self, field_name)
def __getattribute__(self, __name: str) -> Union[Any, None]:
value = super().__getattribute__(__name)
if isinstance(value, UnsetType):
return None
return value
def keys(self) -> Iterator[str]:
yield from self.__struct_fields__
def values(self) -> Iterator[Any]:
for field_name in self.__struct_fields__:
yield getattr(self, field_name)
def model_dump(self) -> Dict[str, Any]:
return mscjson.decode(mscjson.encode(self))
def model_copy(self: Model, *, deep: bool = False) -> Model:
return deepcopy(self) if deep else copy(self)

File diff suppressed because it is too large Load Diff

View File

@ -1,19 +1,18 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class Bank(BaseModel): class BGMBank(BaseStruct):
name: str name: str
intro: Union[str, None]
loop: Union[str, None]
class BGMBank(Bank):
intro: str | None
loop: str | None
volume: float volume: float
crossfade: float crossfade: float
delay: float delay: float
class SoundFXBankSoundFX(BaseModel): class SoundFXBankSoundFX(BaseStruct):
asset: str asset: str
weight: float weight: float
important: bool important: bool
@ -26,30 +25,32 @@ class SoundFXBankSoundFX(BaseModel):
ignoreTimeScale: bool ignoreTimeScale: bool
class SoundFXBank(Bank): class SoundFXBank(BaseStruct):
sounds: list[SoundFXBankSoundFX] | None name: str
sounds: Union[List[SoundFXBankSoundFX], None]
maxSoundAllowed: int maxSoundAllowed: int
popOldest: bool popOldest: bool
customMixerGroup: str | None customMixerGroup: Union[str, None]
loop: bool loop: bool
class SoundFXCtrlBank(Bank): class SoundFXCtrlBank(BaseStruct):
name: str
targetBank: str targetBank: str
ctrlStop: bool ctrlStop: bool
ctrlStopFadetime: float ctrlStopFadetime: float
class SnapshotBank(BaseStruct):
name: str name: str
class SnapshotBank(Bank):
targetSnapshot: str targetSnapshot: str
hookSoundFxBank: str hookSoundFxBank: str
delay: float delay: float
duration: float duration: float
targetFxBank: Bank | None = None targetFxBank: Union[str, None] = None
class BattleVoiceOption(BaseModel): class BattleVoiceOption(BaseStruct):
voiceType: int voiceType: int
priority: int priority: int
overlapIfSamePriority: bool overlapIfSamePriority: bool
@ -57,30 +58,27 @@ class BattleVoiceOption(BaseModel):
delay: float delay: float
class MusicData(BaseModel): class MusicData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
name: str name: str
bank: str bank: str
class BattleVoiceData(BaseModel): class BattleVoiceData(BaseStruct):
crossfade: float crossfade: float
minTimeDeltaForEnemyEncounter: float minTimeDeltaForEnemyEncounter: float
minSpCostForImportantPassiveSkill: int minSpCostForImportantPassiveSkill: int
voiceTypeOptions: list[BattleVoiceOption] voiceTypeOptions: List[BattleVoiceOption]
class AudioData(BaseModel): class AudioData(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
bgmBanks: list[BGMBank] bgmBanks: List[BGMBank]
soundFXBanks: list[SoundFXBank] soundFXBanks: List[SoundFXBank]
soundFXCtrlBanks: list[SoundFXCtrlBank] soundFXCtrlBanks: List[SoundFXCtrlBank]
snapshotBanks: list[SnapshotBank] snapshotBanks: List[SnapshotBank]
battleVoice: BattleVoiceData battleVoice: BattleVoiceData
musics: list[MusicData] musics: List[MusicData]
soundFxVoiceLang: dict[str, dict[str, dict[str, str]]] soundFxVoiceLang: Dict[str, Dict[str, Dict[str, str]]]
bankAlias: dict[str, str] bankAlias: Dict[str, str]
class Config:
extra = 'allow'

View File

@ -1,80 +1,82 @@
from pydantic import BaseModel from typing import Dict, List, Union
from ..common import BaseStruct
class CharacterDataUnlockCondition(BaseModel): class CharacterDataUnlockCondition(BaseStruct):
phase: int phase: int
level: int level: int
class Blackboard(BaseModel): class Blackboard(BaseStruct):
key: str key: str
value: float | None = None value: Union[float, None] = None
valueStr: str | None = None valueStr: Union[str, None] = None
class TalentData(BaseModel): class TalentData(BaseStruct):
unlockCondition: CharacterDataUnlockCondition unlockCondition: CharacterDataUnlockCondition
requiredPotentialRank: int requiredPotentialRank: int
prefabKey: str | None prefabKey: Union[str, None]
name: str | None name: Union[str, None]
description: str | None description: Union[str, None]
rangeId: str | None rangeId: Union[str, None]
blackboard: list[Blackboard] blackboard: List[Blackboard]
class EquipTalentData(TalentData): class EquipTalentData(TalentData):
displayRangeId: bool displayRangeId: bool
upgradeDescription: str upgradeDescription: str
talentIndex: int talentIndex: int
tokenKey: Union[str, None] = None
class CharacterDataEquipTalentDataBundle(BaseModel): class CharacterDataEquipTalentDataBundle(BaseStruct):
candidates: list[EquipTalentData] | None candidates: Union[List[EquipTalentData], None]
class CharacterDataTraitData(BaseModel): class CharacterDataTraitData(BaseStruct):
unlockCondition: CharacterDataUnlockCondition unlockCondition: CharacterDataUnlockCondition
requiredPotentialRank: int requiredPotentialRank: int
blackboard: list[Blackboard] blackboard: List[Blackboard]
overrideDescripton: str | None overrideDescripton: Union[str, None]
prefabKey: str | None prefabKey: Union[str, None]
rangeId: str | None rangeId: Union[str, None]
class CharacterDataEquipTraitData(BaseModel): class CharacterDataEquipTraitData(BaseStruct):
additionalDescription: str | None additionalDescription: Union[str, None]
unlockCondition: CharacterDataUnlockCondition
requiredPotentialRank: int
blackboard: List[Blackboard]
overrideDescripton: Union[str, None]
prefabKey: Union[str, None]
rangeId: Union[str, None]
class CharacterDataEquipTraitDataBundle(BaseModel): class CharacterDataEquipTraitDataBundle(BaseStruct):
candidates: list[CharacterDataEquipTraitData] | None candidates: Union[List[CharacterDataEquipTraitData], None]
class BattleUniEquipData(BaseModel): class BattleUniEquipData(BaseStruct):
resKey: str | None resKey: Union[str, None]
target: str target: str
isToken: bool isToken: bool
addOrOverrideTalentDataBundle: CharacterDataEquipTalentDataBundle addOrOverrideTalentDataBundle: CharacterDataEquipTalentDataBundle
overrideTraitDataBundle: CharacterDataEquipTraitDataBundle overrideTraitDataBundle: CharacterDataEquipTraitDataBundle
class BattleEquipPerLevelPack(BaseModel): class BattleEquipPerLevelPack(BaseStruct):
equipLevel: int equipLevel: int
parts: list[BattleUniEquipData] parts: List[BattleUniEquipData]
attributeBlackboard: list[Blackboard] attributeBlackboard: List[Blackboard]
tokenAttributeBlackboard: dict[str, list[Blackboard]] tokenAttributeBlackboard: Dict[str, List[Blackboard]]
class BattleEquipData(BaseModel): class BattleEquipData(BaseStruct):
phases: list[BattleEquipPerLevelPack] phases: List[BattleEquipPerLevelPack]
class BattleEquipTable(BaseModel): class BattleEquipTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
equips: dict[str, BattleEquipData] equips: Dict[str, BattleEquipData]
class Config:
extra = 'allow'
def __init__(self, data: dict) -> None:
super().__init__(equips=data)

View File

@ -1,37 +1,39 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class BuildingDataRoomUnlockCondCondItem(BaseModel): class BuildingDataRoomUnlockCondCondItem(BaseStruct):
type_: str = Field(alias='type') type_: str = field(name='type')
level: int level: int
count: int count: int
class BuildingDataRoomUnlockCond(BaseModel): class BuildingDataRoomUnlockCond(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
number: dict[str, BuildingDataRoomUnlockCondCondItem] number: Dict[str, BuildingDataRoomUnlockCondCondItem]
class GridPosition(BaseModel): class GridPosition(BaseStruct):
row: int row: int
col: int col: int
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class BuildingDataRoomDataBuildCost(BaseModel): class BuildingDataRoomDataBuildCost(BaseStruct):
items: list[ItemBundle] items: List[ItemBundle]
time: int time: int
labor: int labor: int
class BuildingDataRoomDataPhaseData(BaseModel): class BuildingDataRoomDataPhaseData(BaseStruct):
overrideName: str | None overrideName: Union[str, None]
overridePrefabId: str | None overridePrefabId: Union[str, None]
unlockCondId: str unlockCondId: str
buildCost: BuildingDataRoomDataBuildCost buildCost: BuildingDataRoomDataBuildCost
electricity: int electricity: int
@ -39,20 +41,20 @@ class BuildingDataRoomDataPhaseData(BaseModel):
manpowerCost: int manpowerCost: int
class BuildingDataRoomData(BaseModel): class BuildingDataRoomData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
name: str name: str
description: str | None description: Union[str, None]
defaultPrefabId: str defaultPrefabId: str
canLevelDown: bool canLevelDown: bool
maxCount: int maxCount: int
category: str category: str
size: GridPosition size: GridPosition
phases: list[BuildingDataRoomDataPhaseData] phases: List[BuildingDataRoomDataPhaseData]
class BuildingDataLayoutDataRoomSlot(BaseModel): class BuildingDataLayoutDataRoomSlot(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
cleanCostId: str cleanCostId: str
costLabor: int costLabor: int
provideLabor: int provideLabor: int
@ -62,133 +64,149 @@ class BuildingDataLayoutDataRoomSlot(BaseModel):
storeyId: str storeyId: str
class BuildingDataLayoutDataSlotCleanCostCountCost(BaseModel): class BuildingDataLayoutDataSlotCleanCostCountCost(BaseStruct):
items: list[ItemBundle] items: List[ItemBundle]
class BuildingDataLayoutDataSlotCleanCost(BaseModel): class BuildingDataLayoutDataSlotCleanCost(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
number: dict[str, BuildingDataLayoutDataSlotCleanCostCountCost] number: Dict[str, BuildingDataLayoutDataSlotCleanCostCountCost]
class BuildingDataLayoutDataStoreyData(BaseModel): class BuildingDataLayoutDataStoreyData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
yOffset: int yOffset: int
unlockControlLevel: int unlockControlLevel: int
type_: str = Field(alias='type') type_: str = field(name='type')
class BuildingDataLayoutData(BaseModel): class BuildingDataLayoutData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
slots: dict[str, BuildingDataLayoutDataRoomSlot] slots: Dict[str, BuildingDataLayoutDataRoomSlot]
cleanCosts: dict[str, BuildingDataLayoutDataSlotCleanCost] cleanCosts: Dict[str, BuildingDataLayoutDataSlotCleanCost]
storeys: dict[str, BuildingDataLayoutDataStoreyData] storeys: Dict[str, BuildingDataLayoutDataStoreyData]
class BuildingDataPrefabInfo(BaseModel): class BuildingDataPrefabInfo(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
blueprintRoomOverrideId: str | None blueprintRoomOverrideId: Union[str, None]
size: GridPosition size: GridPosition
floorGridSize: GridPosition floorGridSize: GridPosition
backWallGridSize: GridPosition backWallGridSize: GridPosition
obstacleId: str | None obstacleId: Union[str, None]
class BuildingDataManufactPhase(BaseModel): class BuildingDataManufactPhase(BaseStruct, tag='BuildingDataManufactPhase'):
speed: float | int speed: Union[float, int]
outputCapacity: int outputCapacity: int
class BuildingDataShopPhase(BaseModel): class BuildingDataShopPhase(BaseStruct, tag='BuildingDataShopPhase'):
counterNum: int counterNum: int
speed: float | int speed: Union[float, int]
moneyCapacity: int moneyCapacity: int
class BuildingDataHirePhase(BaseModel): class BuildingDataHirePhase(BaseStruct, tag='BuildingDataHirePhase'):
economizeRate: float economizeRate: float
resSpeed: int resSpeed: int
refreshTimes: int refreshTimes: int
class BuildingDataDormPhase(BaseModel): class BuildingDataDormPhase(BaseStruct, tag='BuildingDataDormPhase'):
manpowerRecover: int manpowerRecover: int
decorationLimit: int decorationLimit: int
class BuildingDataMeetingPhase(BaseModel): class BuildingDataMeetingPhase(BaseStruct, tag='BuildingDataMeetingPhase'):
friendSlotInc: int friendSlotInc: int
maxVisitorNum: int maxVisitorNum: int
gatheringSpeed: int gatheringSpeed: int
class BuildingDataTradingPhase(BaseModel): class BuildingDataTradingPhase(BaseStruct, tag='BuildingDataTradingPhase'):
orderSpeed: float | int orderSpeed: Union[float, int]
orderLimit: int orderLimit: int
orderRarity: int orderRarity: int
class BuildingDataWorkshopPhase(BaseModel): class BuildingDataWorkshopPhase(BaseStruct, tag='BuildingDataWorkshopPhase'):
manpowerFactor: float | int manpowerFactor: Union[float, int]
class BuildingDataTrainingPhase(BaseModel): class BuildingDataTrainingPhase(BaseStruct, tag='BuildingDataTrainingPhase'):
specSkillLvlLimit: int specSkillLvlLimit: int
class BuildingDataRoomBean(BaseModel): class BuildingDataShopRoomBean(BaseStruct):
phases: list[BuildingDataManufactPhase | BuildingDataShopPhase | BuildingDataHirePhase | BuildingDataDormPhase | BuildingDataMeetingPhase | BuildingDataTradingPhase | BuildingDataWorkshopPhase | BuildingDataTrainingPhase] | None # noqa: E501 phases: None = None
# phases: Union[List[Union[Union[Union[Union[Union[Union[Union[BuildingDataManufactPhase, BuildingDataShopPhase], BuildingDataHirePhase], BuildingDataDormPhase], BuildingDataMeetingPhase], BuildingDataTradingPhase], BuildingDataWorkshopPhase], BuildingDataTrainingPhase]], None] # noqa: E501
class BuildingDataControlRoomBean(BuildingDataRoomBean): class BuildingDataControlRoomBean(BaseStruct):
basicCostBuff: int basicCostBuff: int
phases: None = None
class BuildingDataManufactRoomBean(BuildingDataRoomBean): class BuildingDataManufactRoomBean(BaseStruct):
basicSpeedBuff: float basicSpeedBuff: float
phases: List[BuildingDataManufactPhase]
class BuildingDataHireRoomBean(BuildingDataRoomBean): class BuildingDataHireRoomBean(BaseStruct):
basicSpeedBuff: float basicSpeedBuff: float
phases: List[BuildingDataHirePhase]
class BuildingDataMeetingRoomBean(BuildingDataRoomBean): class BuildingDataDormRoomBean(BaseStruct):
phases: List[BuildingDataDormPhase]
class BuildingDataMeetingRoomBean(BaseStruct):
basicSpeedBuff: float basicSpeedBuff: float
phases: List[BuildingDataMeetingPhase]
class BuildingDataTradingRoomBean(BuildingDataRoomBean): class BuildingDataTradingRoomBean(BaseStruct):
basicSpeedBuff: float basicSpeedBuff: float
phases: List[BuildingDataTradingPhase]
class BuildingDataTrainingBean(BuildingDataRoomBean): class BuildingDataWorkShopRoomBean(BaseStruct):
phases: List[BuildingDataWorkshopPhase]
class BuildingDataTrainingBean(BaseStruct):
basicSpeedBuff: float basicSpeedBuff: float
phases: List[BuildingDataTrainingPhase]
class BuildingDataPowerRoomBean(BuildingDataRoomBean): class BuildingDataPowerRoomBean(BaseStruct):
basicSpeedBuff: float basicSpeedBuff: float
phases: None = None
class CharacterDataUnlockCondition(BaseModel): class CharacterDataUnlockCondition(BaseStruct):
phase: int phase: int
level: int level: int
class BuildingDataBuildingBuffCharSlotSlotItem(BaseModel): class BuildingDataBuildingBuffCharSlotSlotItem(BaseStruct):
buffId: str buffId: str
cond: CharacterDataUnlockCondition cond: CharacterDataUnlockCondition
class BuildingDataBuildingBuffCharSlot(BaseModel): class BuildingDataBuildingBuffCharSlot(BaseStruct):
buffData: list[BuildingDataBuildingBuffCharSlotSlotItem] buffData: List[BuildingDataBuildingBuffCharSlotSlotItem]
class BuildingDataBuildingCharacter(BaseModel): class BuildingDataBuildingCharacter(BaseStruct):
charId: str charId: str
maxManpower: int maxManpower: int
buffChar: list[BuildingDataBuildingBuffCharSlot] buffChar: List[BuildingDataBuildingBuffCharSlot]
class BuildingDataBuildingBuff(BaseModel): class BuildingDataBuildingBuff(BaseStruct):
buffId: str buffId: str
buffName: str buffName: str
buffIcon: str buffIcon: str
@ -201,13 +219,12 @@ class BuildingDataBuildingBuff(BaseModel):
description: str description: str
class BuildingDataCustomDataFurnitureData(BaseModel): class BuildingDataCustomDataFurnitureData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
sortId: int sortId: int
name: str name: str
iconId: str iconId: str
interactType: str | None = None type_: str = field(name='type')
type_: str = Field(alias='type')
subType: str subType: str
location: str location: str
category: str category: str
@ -226,101 +243,102 @@ class BuildingDataCustomDataFurnitureData(BaseModel):
processedProductId: str processedProductId: str
processedProductCount: int processedProductCount: int
processedByProductPercentage: int processedByProductPercentage: int
processedByProductGroup: list processedByProductGroup: List
canBeDestroy: bool canBeDestroy: bool
isOnly: int isOnly: int
quantity: int quantity: int
interactType: Union[str, None] = None
class BuildingDataCustomDataThemeQuickSetupItem(BaseModel): class BuildingDataCustomDataThemeQuickSetupItem(BaseStruct):
furnitureId: str furnitureId: str
pos0: int pos0: int
pos1: int pos1: int
dir_: int = Field(alias='dir') dir_: int = field(name='dir')
class BuildingDataCustomDataThemeData(BaseModel): class BuildingDataCustomDataThemeData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
sortId: int sortId: int
name: str name: str
themeType: str themeType: str
desc: str desc: str
quickSetup: list[BuildingDataCustomDataThemeQuickSetupItem] quickSetup: List[BuildingDataCustomDataThemeQuickSetupItem]
groups: list[str] groups: List[str]
furnitures: list[str] furnitures: List[str]
class BuildingDataCustomDataGroupData(BaseModel): class BuildingDataCustomDataGroupData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
sortId: int sortId: int
name: str name: str
themeId: str themeId: str
comfort: int comfort: int
count: int count: int
furniture: list[str] furniture: List[str]
class BuildingDataCustomDataFurnitureTypeData(BaseModel): class BuildingDataCustomDataFurnitureTypeData(BaseStruct):
type_: str = Field(alias='type') type_: str = field(name='type')
name: str name: str
class BuildingDataCustomDataFurnitureSubTypeData(BaseModel): class BuildingDataCustomDataFurnitureSubTypeData(BaseStruct):
subType: str subType: str
name: str name: str
type_: str = Field(alias='type') type_: str = field(name='type')
sortId: int sortId: int
class BuildingDataCustomDataDormitoryDefaultFurnitureItem(BaseModel): class BuildingDataCustomDataDormitoryDefaultFurnitureItem(BaseStruct):
furnitureId: str furnitureId: str
xOffset: int xOffset: int
yOffset: int yOffset: int
defaultPrefabId: str defaultPrefabId: str
class BuildingDataCustomDataInteractItem(BaseModel): class BuildingDataCustomDataInteractItem(BaseStruct):
skinId: str skinId: str
class BuildingDataCustomDataDiyUISortTemplateListDataDiyUISortTemplateData(BaseModel): class BuildingDataCustomDataDiyUISortTemplateListDataDiyUISortTemplateData(BaseStruct):
name: str name: str
sequences: list[str] sequences: List[str]
stableSequence: str stableSequence: str
stableSequenceOrder: str stableSequenceOrder: str
class BuildingDataCustomDataDiyUISortTemplateListData(BaseModel): class BuildingDataCustomDataDiyUISortTemplateListData(BaseStruct):
diyUIType: str diyUIType: str
expandState: str expandState: str
defaultTemplateIndex: int defaultTemplateIndex: int
defaultTemplateOrder: str defaultTemplateOrder: str
templates: list[BuildingDataCustomDataDiyUISortTemplateListDataDiyUISortTemplateData] templates: List[BuildingDataCustomDataDiyUISortTemplateListDataDiyUISortTemplateData]
class BuildingDataCustomData(BaseModel): class BuildingDataCustomData(BaseStruct):
furnitures: dict[str, BuildingDataCustomDataFurnitureData] furnitures: Dict[str, BuildingDataCustomDataFurnitureData]
themes: dict[str, BuildingDataCustomDataThemeData] themes: Dict[str, BuildingDataCustomDataThemeData]
groups: dict[str, BuildingDataCustomDataGroupData] groups: Dict[str, BuildingDataCustomDataGroupData]
types: dict[str, BuildingDataCustomDataFurnitureTypeData] types: Dict[str, BuildingDataCustomDataFurnitureTypeData]
subTypes: dict[str, BuildingDataCustomDataFurnitureSubTypeData] subTypes: Dict[str, BuildingDataCustomDataFurnitureSubTypeData]
defaultFurnitures: dict[str, list[BuildingDataCustomDataDormitoryDefaultFurnitureItem]] defaultFurnitures: Dict[str, List[BuildingDataCustomDataDormitoryDefaultFurnitureItem]]
interactGroups: dict[str, list[BuildingDataCustomDataInteractItem]] interactGroups: Dict[str, List[BuildingDataCustomDataInteractItem]]
diyUISortTemplates: dict[str, dict[str, BuildingDataCustomDataDiyUISortTemplateListData]] diyUISortTemplates: Dict[str, Dict[str, BuildingDataCustomDataDiyUISortTemplateListData]]
class BuildingDataManufactFormulaUnlockRoom(BaseModel): class BuildingDataManufactFormulaUnlockRoom(BaseStruct):
roomId: str roomId: str
roomLevel: int roomLevel: int
roomCount: int roomCount: int
class BuildingDataManufactFormulaUnlockStage(BaseModel): class BuildingDataManufactFormulaUnlockStage(BaseStruct):
stageId: str stageId: str
rank: int rank: int
class BuildingDataManufactFormula(BaseModel): class BuildingDataManufactFormula(BaseStruct):
formulaId: str formulaId: str
itemId: str itemId: str
count: int count: int
@ -328,43 +346,43 @@ class BuildingDataManufactFormula(BaseModel):
costPoint: int costPoint: int
formulaType: str formulaType: str
buffType: str buffType: str
costs: list[ItemBundle] costs: List[ItemBundle]
requireRooms: list[BuildingDataManufactFormulaUnlockRoom] requireRooms: List[BuildingDataManufactFormulaUnlockRoom]
requireStages: list[BuildingDataManufactFormulaUnlockStage] requireStages: List[BuildingDataManufactFormulaUnlockStage]
class BuildingDataShopFormulaUnlockRoom(BaseModel): class BuildingDataShopFormulaUnlockRoom(BaseStruct):
roomId: str roomId: str
roomLevel: int roomLevel: int
class BuildingDataShopFormula(BaseModel): class BuildingDataShopFormula(BaseStruct):
formulaId: str formulaId: str
itemId: str itemId: str
formulaType: str formulaType: str
costPoint: int costPoint: int
gainItem: ItemBundle gainItem: ItemBundle
requireRooms: list[BuildingDataShopFormulaUnlockRoom] requireRooms: List[BuildingDataShopFormulaUnlockRoom]
class BuildingDataWorkshopExtraWeightItem(BaseModel): class BuildingDataWorkshopExtraWeightItem(BaseStruct):
weight: int weight: int
itemId: str itemId: str
itemCount: int itemCount: int
class BuildingDataWorkshopFormulaUnlockRoom(BaseModel): class BuildingDataWorkshopFormulaUnlockRoom(BaseStruct):
roomId: str roomId: str
roomLevel: int roomLevel: int
roomCount: int roomCount: int
class BuildingDataWorkshopFormulaUnlockStage(BaseModel): class BuildingDataWorkshopFormulaUnlockStage(BaseStruct):
stageId: str stageId: str
rank: int rank: int
class BuildingDataWorkshopFormula(BaseModel): class BuildingDataWorkshopFormula(BaseStruct):
sortId: int sortId: int
formulaId: str formulaId: str
rarity: int rarity: int
@ -375,23 +393,25 @@ class BuildingDataWorkshopFormula(BaseModel):
formulaType: str formulaType: str
buffType: str buffType: str
extraOutcomeRate: float extraOutcomeRate: float
extraOutcomeGroup: list[BuildingDataWorkshopExtraWeightItem] extraOutcomeGroup: List[BuildingDataWorkshopExtraWeightItem]
costs: list[ItemBundle] costs: List[ItemBundle]
requireRooms: list[BuildingDataWorkshopFormulaUnlockRoom] requireRooms: List[BuildingDataWorkshopFormulaUnlockRoom]
requireStages: list[BuildingDataWorkshopFormulaUnlockStage] requireStages: List[BuildingDataWorkshopFormulaUnlockStage]
class BuildingDataCreditFormulaValueModel(BaseModel): class BuildingDataCreditFormulaValueModel(BaseStruct):
basic: int basic: int
addition: int addition: int
class BuildingDataCreditFormula(BaseModel): class BuildingDataCreditFormula(BaseStruct):
initiative: BuildingDataCreditFormulaValueModel | dict initiative: Dict
passive: BuildingDataCreditFormulaValueModel | dict passive: Dict
# initiative: Union[BuildingDataCreditFormulaValueModel, Dict]
# passive: Union[BuildingDataCreditFormulaValueModel, Dict]
class BuildingData(BaseModel): class BuildingData(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
controlSlotId: str controlSlotId: str
@ -411,8 +431,8 @@ class BuildingData(BaseModel):
manufactStationBuff: float manufactStationBuff: float
comfortManpowerRecoverFactor: int comfortManpowerRecoverFactor: int
manpowerDisplayFactor: int manpowerDisplayFactor: int
shopOutputRatio: dict[str, int] | None shopOutputRatio: Union[Dict[str, int], None]
shopStackRatio: dict[str, int] | None shopStackRatio: Union[Dict[str, int], None]
basicFavorPerDay: int basicFavorPerDay: int
humanResourceLimit: int humanResourceLimit: int
tiredApThreshold: int tiredApThreshold: int
@ -429,32 +449,29 @@ class BuildingData(BaseModel):
socialSlotNum: int socialSlotNum: int
furniDuplicationLimit: int furniDuplicationLimit: int
assistFavorReport: int assistFavorReport: int
manufactManpowerCostByNum: list[int] manufactManpowerCostByNum: List[int]
tradingManpowerCostByNum: list[int] tradingManpowerCostByNum: List[int]
roomUnlockConds: dict[str, BuildingDataRoomUnlockCond] roomUnlockConds: Dict[str, BuildingDataRoomUnlockCond]
rooms: dict[str, BuildingDataRoomData] rooms: Dict[str, BuildingDataRoomData]
layouts: dict[str, BuildingDataLayoutData] layouts: Dict[str, BuildingDataLayoutData]
prefabs: dict[str, BuildingDataPrefabInfo] prefabs: Dict[str, BuildingDataPrefabInfo]
controlData: BuildingDataControlRoomBean controlData: BuildingDataControlRoomBean
manufactData: BuildingDataManufactRoomBean manufactData: BuildingDataManufactRoomBean
shopData: BuildingDataRoomBean shopData: BuildingDataShopRoomBean
hireData: BuildingDataHireRoomBean hireData: BuildingDataHireRoomBean
dormData: BuildingDataRoomBean dormData: BuildingDataDormRoomBean
meetingData: BuildingDataMeetingRoomBean meetingData: BuildingDataMeetingRoomBean
tradingData: BuildingDataTradingRoomBean tradingData: BuildingDataTradingRoomBean
workshopData: BuildingDataRoomBean workshopData: BuildingDataWorkShopRoomBean
trainingData: BuildingDataTrainingBean trainingData: BuildingDataTrainingBean
powerData: BuildingDataPowerRoomBean powerData: BuildingDataPowerRoomBean
chars: dict[str, BuildingDataBuildingCharacter] chars: Dict[str, BuildingDataBuildingCharacter]
buffs: dict[str, BuildingDataBuildingBuff] buffs: Dict[str, BuildingDataBuildingBuff]
workshopBonus: dict[str, list[str]] workshopBonus: Dict[str, List[str]]
customData: BuildingDataCustomData customData: BuildingDataCustomData
manufactFormulas: dict[str, BuildingDataManufactFormula] manufactFormulas: Dict[str, BuildingDataManufactFormula]
shopFormulas: dict[str, BuildingDataShopFormula] shopFormulas: Dict[str, BuildingDataShopFormula]
workshopFormulas: dict[str, BuildingDataWorkshopFormula] workshopFormulas: Dict[str, BuildingDataWorkshopFormula]
creditFormula: BuildingDataCreditFormula creditFormula: BuildingDataCreditFormula
goldItems: dict[str, int] goldItems: Dict[str, int]
assistantUnlock: list[int] assistantUnlock: List[int]
class Config:
extra = 'allow'

View File

@ -1,29 +1,31 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class CampaignDataBreakRewardLadder(BaseModel): class CampaignDataBreakRewardLadder(BaseStruct):
killCnt: int killCnt: int
breakFeeAdd: int breakFeeAdd: int
rewards: list[ItemBundle] rewards: List[ItemBundle]
class WeightItemBundle(BaseModel): class WeightItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
type_: str = Field(alias='type') type_: str = field(name='type')
dropType: str dropType: str
count: int count: int
weight: int weight: int
class StageDataDisplayRewards_(BaseModel): class StageDataDisplayRewards_(BaseStruct):
type_: str = Field(alias='type') type_: str = field(name='type')
id_: str = Field(alias='id') id_: str = field(name='id')
dropType: int dropType: int
@ -33,18 +35,18 @@ class StageDataDisplayDetailRewards_(StageDataDisplayRewards_):
CannotGetPercent: float CannotGetPercent: float
class CampaignDataCampaignDropInfo(BaseModel): class CampaignDataCampaignDropInfo(BaseStruct):
firstPassRewards: list[ItemBundle] | None firstPassRewards: Union[List[ItemBundle], None]
passRewards: list[list[WeightItemBundle]] | None passRewards: Union[List[List[WeightItemBundle]], None]
displayDetailRewards: list[StageDataDisplayDetailRewards_] | None displayDetailRewards: Union[List[StageDataDisplayDetailRewards_], None]
class CampaignDataDropLadder(BaseModel): class CampaignDataDropLadder(BaseStruct):
killCnt: int killCnt: int
dropInfo: CampaignDataCampaignDropInfo dropInfo: CampaignDataCampaignDropInfo
class CampaignDataGainLadder(BaseModel): class CampaignDataGainLadder(BaseStruct):
killCnt: int killCnt: int
apFailReturn: int apFailReturn: int
favor: int favor: int
@ -53,62 +55,62 @@ class CampaignDataGainLadder(BaseModel):
displayDiamondShdNum: int displayDiamondShdNum: int
class StageDataDisplayRewards(BaseModel): class StageDataDisplayRewards(BaseStruct):
type_: str = Field(alias='type') type_: str = field(name='type')
id_: str = Field(alias='id') id_: str = field(name='id')
dropType: int dropType: int
class StageDataDisplayDetailRewards(BaseModel): class StageDataDisplayDetailRewards(BaseStruct):
occPercent: int occPercent: int
type_: str = Field(alias='type') type_: str = field(name='type')
id_: str = Field(alias='id') id_: str = field(name='id')
dropType: int dropType: int
class CampaignDataDropGainInfo(BaseModel): class CampaignDataDropGainInfo(BaseStruct):
dropLadders: list[CampaignDataDropLadder] dropLadders: List[CampaignDataDropLadder]
gainLadders: list[CampaignDataGainLadder] gainLadders: List[CampaignDataGainLadder]
displayRewards: list[StageDataDisplayRewards] displayRewards: List[StageDataDisplayRewards]
displayDetailRewards: list[StageDataDisplayDetailRewards] displayDetailRewards: List[StageDataDisplayDetailRewards]
class CampaignData(BaseModel): class CampaignData(BaseStruct):
stageId: str stageId: str
isSmallScale: int isSmallScale: int
breakLadders: list[CampaignDataBreakRewardLadder] breakLadders: List[CampaignDataBreakRewardLadder]
isCustomized: bool isCustomized: bool
dropGains: dict[str, CampaignDataDropGainInfo] dropGains: Dict[str, CampaignDataDropGainInfo]
class CampaignGroupData(BaseModel): class CampaignGroupData(BaseStruct):
groupId: str groupId: str
activeCamps: list[str] activeCamps: List[str]
startTs: int startTs: int
endTs: int endTs: int
class CampaignRegionData(BaseModel): class CampaignRegionData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
isUnknwon: int isUnknwon: int
class CampaignZoneData(BaseModel): class CampaignZoneData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
name: str name: str
regionId: str regionId: str
templateId: str templateId: str
class CampaignMissionData(BaseModel): class CampaignMissionData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
sortId: int sortId: int
param: list[str] param: List[str]
description: str description: str
breakFeeAdd: int breakFeeAdd: int
class CampaignConstTable(BaseModel): class CampaignConstTable(BaseStruct):
systemPreposedStage: str systemPreposedStage: str
rotateStartTime: int rotateStartTime: int
rotatePreposedStage: str rotatePreposedStage: str
@ -117,42 +119,39 @@ class CampaignConstTable(BaseModel):
sweepStartTime: int sweepStartTime: int
class CampaignRotateOpenTimeData(BaseModel): class CampaignRotateOpenTimeData(BaseStruct):
groupId: str groupId: str
stageId: str stageId: str
mapId: str mapId: str
unknownRegions: list[str] unknownRegions: List[str]
duration: int duration: int
startTs: int startTs: int
endTs: int endTs: int
class CampaignTrainingOpenTimeData(BaseModel): class CampaignTrainingOpenTimeData(BaseStruct):
groupId: str groupId: str
stages: list[str] stages: List[str]
startTs: int startTs: int
endTs: int endTs: int
class CampaignTrainingAllOpenTimeData(BaseModel): class CampaignTrainingAllOpenTimeData(BaseStruct):
groupId: str groupId: str
startTs: int startTs: int
endTs: int endTs: int
class CampaignTable(BaseModel): class CampaignTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
campaigns: dict[str, CampaignData] campaigns: Dict[str, CampaignData]
campaignGroups: dict[str, CampaignGroupData] campaignGroups: Dict[str, CampaignGroupData]
campaignRegions: dict[str, CampaignRegionData] campaignRegions: Dict[str, CampaignRegionData]
campaignZones: dict[str, CampaignZoneData] campaignZones: Dict[str, CampaignZoneData]
campaignMissions: dict[str, CampaignMissionData] campaignMissions: Dict[str, CampaignMissionData]
stageIndexInZoneMap: dict[str, int] stageIndexInZoneMap: Dict[str, int]
campaignConstTable: CampaignConstTable campaignConstTable: CampaignConstTable
campaignRotateStageOpenTimes: list[CampaignRotateOpenTimeData] campaignRotateStageOpenTimes: List[CampaignRotateOpenTimeData]
campaignTrainingStageOpenTimes: list[CampaignTrainingOpenTimeData] campaignTrainingStageOpenTimes: List[CampaignTrainingOpenTimeData]
campaignTrainingAllOpenTimes: list[CampaignTrainingAllOpenTimeData] campaignTrainingAllOpenTimes: List[CampaignTrainingAllOpenTimeData]
class Config:
extra = 'allow'

View File

@ -1,24 +1,19 @@
from pydantic import BaseModel from typing import Dict, Union
from ..common import BaseStruct
class ChapterData(BaseModel): class ChapterData(BaseStruct):
chapterId: str chapterId: str
chapterName: str chapterName: str
chapterName2: str chapterName2: str
chapterIndex: int chapterIndex: int
preposedChapterId: str | None preposedChapterId: Union[str, None]
startZoneId: str startZoneId: str
endZoneId: str endZoneId: str
chapterEndStageId: str chapterEndStageId: str
class ChapterTable(BaseModel): class ChapterTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
chapters: dict[str, ChapterData] chapters: Dict[str, ChapterData]
class Config:
extra = 'allow'
def __init__(self, data: dict) -> None:
super().__init__(chapters=data)

View File

@ -1,27 +1,26 @@
from pydantic import BaseModel, Field from typing import Dict, List
from ..common import BaseStruct
from msgspec import field
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class SpCharMissionData(BaseModel): class SpCharMissionData(BaseStruct):
charId: str charId: str
missionId: str missionId: str
sortId: int sortId: int
condType: str condType: str
param: list[str] param: List[str]
rewards: list[ItemBundle] rewards: List[ItemBundle]
class CharMetaTable(BaseModel): class CharMetaTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
class Config: spCharGroups: Dict[str, List[str]]
extra = 'allow' spCharMissions: Dict[str, Dict[str, SpCharMissionData]]
spCharVoucherSkinTime: Dict[str, int]
spCharGroups: dict[str, list[str]]
spCharMissions: dict[str, dict[str, SpCharMissionData]]
spCharVoucherSkinTime: dict[str, int]

View File

@ -1,39 +1,41 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class CharPatchDataPatchInfo(BaseModel): class CharPatchDataPatchInfo(BaseStruct):
tmplIds: list[str] tmplIds: List[str]
default: str default: str
class CharacterDataUnlockCondition(BaseModel): class CharacterDataUnlockCondition(BaseStruct):
phase: int phase: int
level: int level: int
class Blackboard(BaseModel): class Blackboard(BaseStruct):
key: str key: str
value: float | None = None value: Union[float, None] = None
valueStr: str | None = None valueStr: Union[str, None] = None
class CharacterDataTraitData(BaseModel): class CharacterDataTraitData(BaseStruct):
unlockCondition: CharacterDataUnlockCondition unlockCondition: CharacterDataUnlockCondition
requiredPotentialRank: int requiredPotentialRank: int
blackboard: list[Blackboard] blackboard: List[Blackboard]
overrideDescripton: str | None overrideDescripton: Union[str, None]
prefabKey: str | None prefabKey: Union[str, None]
rangeId: str | None rangeId: Union[str, None]
class CharacterDataTraitDataBundle(BaseModel): class CharacterDataTraitDataBundle(BaseStruct):
candidates: list[CharacterDataTraitData] candidates: List[CharacterDataTraitData]
class AttributesData(BaseModel): class AttributesData(BaseStruct):
maxHp: int maxHp: int
atk: int atk: int
def_: int = Field(alias='def') def_: int = field(name='def')
magicResistance: float magicResistance: float
cost: int cost: int
blockCnt: int blockCnt: int
@ -55,54 +57,55 @@ class AttributesData(BaseModel):
levitateImmune: bool levitateImmune: bool
class CharacterDataAttributesKeyFrame(BaseModel): class CharacterDataAttributesKeyFrame(BaseStruct):
level: int level: int
data: AttributesData data: AttributesData
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class CharacterDataPhaseData(BaseModel): class CharacterDataPhaseData(BaseStruct):
characterPrefabKey: str characterPrefabKey: str
rangeId: str | None rangeId: Union[str, None]
maxLevel: int maxLevel: int
attributesKeyFrames: list[CharacterDataAttributesKeyFrame] attributesKeyFrames: List[CharacterDataAttributesKeyFrame]
evolveCost: list[ItemBundle] | None evolveCost: Union[List[ItemBundle], None]
class CharacterDataMainSkillSpecializeLevelData(BaseModel): class CharacterDataMainSkillSpecializeLevelData(BaseStruct):
unlockCond: CharacterDataUnlockCondition unlockCond: CharacterDataUnlockCondition
lvlUpTime: int lvlUpTime: int
levelUpCost: list[ItemBundle] | None levelUpCost: Union[List[ItemBundle], None]
class CharacterDataMainSkill(BaseModel): class CharacterDataMainSkill(BaseStruct):
skillId: str | None skillId: Union[str, None]
overridePrefabKey: str | None overridePrefabKey: Union[str, None]
overrideTokenKey: str | None overrideTokenKey: Union[str, None]
levelUpCostCond: list[CharacterDataMainSkillSpecializeLevelData] levelUpCostCond: List[CharacterDataMainSkillSpecializeLevelData]
unlockCond: CharacterDataUnlockCondition unlockCond: CharacterDataUnlockCondition
class TalentData(BaseModel): class TalentData(BaseStruct):
unlockCondition: CharacterDataUnlockCondition unlockCondition: CharacterDataUnlockCondition
requiredPotentialRank: int requiredPotentialRank: int
prefabKey: str prefabKey: str
name: str | None name: Union[str, None]
description: str | None description: Union[str, None]
rangeId: str | None rangeId: Union[str, None]
blackboard: list[Blackboard] blackboard: List[Blackboard]
displayRange: bool
class CharacterDataTalentDataBundle(BaseModel): class CharacterDataTalentDataBundle(BaseStruct):
candidates: list[TalentData] | None candidates: Union[List[TalentData], None]
class AttributeModifierDataAttributeModifier(BaseModel): class AttributeModifierDataAttributeModifier(BaseStruct):
attributeType: int attributeType: int
formulaItem: int formulaItem: int
value: float value: float
@ -110,86 +113,85 @@ class AttributeModifierDataAttributeModifier(BaseModel):
fetchBaseValueFromSourceEntity: bool fetchBaseValueFromSourceEntity: bool
class AttributeModifierData(BaseModel): class AttributeModifierData(BaseStruct):
abnormalFlags: list[str] | None abnormalFlags: Union[List[str], None]
abnormalImmunes: list[str] | None abnormalImmunes: Union[List[str], None]
abnormalAntis: list[str] | None abnormalAntis: Union[List[str], None]
abnormalCombos: list[str] | None abnormalCombos: Union[List[str], None]
abnormalComboImmunes: list[str] | None abnormalComboImmunes: Union[List[str], None]
attributeModifiers: list[AttributeModifierDataAttributeModifier] attributeModifiers: List[AttributeModifierDataAttributeModifier]
class ExternalBuff(BaseModel): class ExternalBuff(BaseStruct):
attributes: AttributeModifierData attributes: AttributeModifierData
class CharacterDataPotentialRank(BaseModel): class CharacterDataPotentialRank(BaseStruct):
type_: int = Field(alias='type') type_: int = field(name='type')
description: str description: str
buff: ExternalBuff | None buff: Union[ExternalBuff, None]
equivalentCost: ItemBundle | None equivalentCost: Union[ItemBundle, None]
class CharacterDataSkillLevelCost(BaseModel): class CharacterDataSkillLevelCost(BaseStruct):
unlockCond: CharacterDataUnlockCondition unlockCond: CharacterDataUnlockCondition
lvlUpCost: list[ItemBundle] | None lvlUpCost: Union[List[ItemBundle], None]
class CharacterData(BaseModel): class CharacterData(BaseStruct):
name: str name: str
description: str | None description: Union[str, None]
canUseGeneralPotentialItem: bool canUseGeneralPotentialItem: bool
canUseActivityPotentialItem: bool canUseActivityPotentialItem: bool
potentialItemId: str | None potentialItemId: Union[str, None]
activityPotentialItemId: str | None activityPotentialItemId: Union[str, None]
nationId: str | None nationId: Union[str, None]
groupId: str | None groupId: Union[str, None]
teamId: str | None teamId: Union[str, None]
displayNumber: str | None displayNumber: Union[str, None]
tokenKey: str | None = None
appellation: str appellation: str
position: str position: str
tagList: list[str] | None tagList: Union[List[str], None]
itemUsage: str | None itemUsage: Union[str, None]
itemDesc: str | None itemDesc: Union[str, None]
itemObtainApproach: str | None itemObtainApproach: Union[str, None]
isNotObtainable: bool isNotObtainable: bool
isSpChar: bool isSpChar: bool
maxPotentialLevel: int maxPotentialLevel: int
rarity: int rarity: int
profession: str profession: str
subProfessionId: str subProfessionId: str
trait: CharacterDataTraitDataBundle | None trait: Union[CharacterDataTraitDataBundle, None]
phases: list[CharacterDataPhaseData] phases: List[CharacterDataPhaseData]
skills: list[CharacterDataMainSkill] skills: List[CharacterDataMainSkill]
talents: list[CharacterDataTalentDataBundle] | None talents: Union[List[CharacterDataTalentDataBundle], None]
potentialRanks: list[CharacterDataPotentialRank] potentialRanks: List[CharacterDataPotentialRank]
favorKeyFrames: list[CharacterDataAttributesKeyFrame] | None favorKeyFrames: Union[List[CharacterDataAttributesKeyFrame], None]
allSkillLvlup: list[CharacterDataSkillLevelCost] allSkillLvlup: List[CharacterDataSkillLevelCost]
minPowerId: str
maxPowerId: str
tokenKey: Union[str, None] = None
class CharPatchDataUnlockCondItem(BaseModel): class CharPatchDataUnlockCondItem(BaseStruct):
stageId: str stageId: str
completeState: int completeState: int
class CharPatchDataUnlockCond(BaseModel): class CharPatchDataUnlockCond(BaseStruct):
conds: list[CharPatchDataUnlockCondItem] conds: List[CharPatchDataUnlockCondItem]
class CharPatchDataPatchDetailInfo(BaseModel): class CharPatchDataPatchDetailInfo(BaseStruct):
patchId: str patchId: str
sortId: int sortId: int
infoParam: str infoParam: str
class CharPatchTable(BaseModel): class CharPatchTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
infos: dict[str, CharPatchDataPatchInfo] infos: Dict[str, CharPatchDataPatchInfo]
patchChars: dict[str, CharacterData] patchChars: Dict[str, CharacterData]
unlockConds: dict[str, CharPatchDataUnlockCond] unlockConds: Dict[str, CharPatchDataUnlockCond]
patchDetailInfoList: dict[str, CharPatchDataPatchDetailInfo] patchDetailInfoList: Dict[str, CharPatchDataPatchDetailInfo]
class Config:
extra = 'allow'

View File

@ -1,34 +1,37 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class CharacterDataUnlockCondition(BaseModel): class CharacterDataUnlockCondition(BaseStruct):
phase: int phase: int
level: int level: int
class Blackboard(BaseModel): class Blackboard(BaseStruct):
key: str key: str
value: float | None = None value: Union[float, None] = None
valueStr: str | None = None valueStr: Union[str, None] = None
class CharacterDataTraitData(BaseModel): class CharacterDataTraitData(BaseStruct):
unlockCondition: CharacterDataUnlockCondition unlockCondition: CharacterDataUnlockCondition
requiredPotentialRank: int requiredPotentialRank: int
blackboard: list[Blackboard] blackboard: List[Blackboard]
overrideDescripton: str | None overrideDescripton: Union[str, None]
prefabKey: str | None prefabKey: Union[str, None]
rangeId: str | None rangeId: Union[str, None]
additionalDesc: str
class CharacterDataTraitDataBundle(BaseModel): class CharacterDataTraitDataBundle(BaseStruct):
candidates: list[CharacterDataTraitData] candidates: List[CharacterDataTraitData]
class AttributesData(BaseModel): class AttributesData(BaseStruct):
maxHp: int maxHp: int
atk: int atk: int
def_: int = Field(alias='def') def_: int = field(name='def')
magicResistance: float magicResistance: float
cost: int cost: int
blockCnt: int blockCnt: int
@ -50,54 +53,56 @@ class AttributesData(BaseModel):
levitateImmune: bool levitateImmune: bool
class CharacterDataAttributesKeyFrame(BaseModel): class CharacterDataAttributesKeyFrame(BaseStruct):
level: int level: int
data: AttributesData data: AttributesData
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class CharacterDataPhaseData(BaseModel): class CharacterDataPhaseData(BaseStruct):
characterPrefabKey: str characterPrefabKey: str
rangeId: str | None rangeId: Union[str, None]
maxLevel: int maxLevel: int
attributesKeyFrames: list[CharacterDataAttributesKeyFrame] attributesKeyFrames: List[CharacterDataAttributesKeyFrame]
evolveCost: list[ItemBundle] | None evolveCost: Union[List[ItemBundle], None]
class CharacterDataMainSkillSpecializeLevelData(BaseModel): class CharacterDataMainSkillSpecializeLevelData(BaseStruct):
unlockCond: CharacterDataUnlockCondition unlockCond: CharacterDataUnlockCondition
lvlUpTime: int lvlUpTime: int
levelUpCost: list[ItemBundle] | None levelUpCost: Union[List[ItemBundle], None]
class CharacterDataMainSkill(BaseModel): class CharacterDataMainSkill(BaseStruct):
skillId: str | None skillId: Union[str, None]
overridePrefabKey: str | None overridePrefabKey: Union[str, None]
overrideTokenKey: str | None overrideTokenKey: Union[str, None]
levelUpCostCond: list[CharacterDataMainSkillSpecializeLevelData] levelUpCostCond: List[CharacterDataMainSkillSpecializeLevelData]
unlockCond: CharacterDataUnlockCondition unlockCond: CharacterDataUnlockCondition
class TalentData(BaseModel): class TalentData(BaseStruct):
unlockCondition: CharacterDataUnlockCondition unlockCondition: CharacterDataUnlockCondition
requiredPotentialRank: int requiredPotentialRank: int
prefabKey: str prefabKey: str
name: str | None name: Union[str, None]
description: str | None description: Union[str, None]
rangeId: str | None rangeId: Union[str, None]
blackboard: list[Blackboard] blackboard: List[Blackboard]
displayRange: bool
tokenKey: Union[str, None] = None
class CharacterDataTalentDataBundle(BaseModel): class CharacterDataTalentDataBundle(BaseStruct):
candidates: list[TalentData] | None candidates: Union[List[TalentData], None]
class AttributeModifierDataAttributeModifier(BaseModel): class AttributeModifierDataAttributeModifier(BaseStruct):
attributeType: int attributeType: int
formulaItem: int formulaItem: int
value: float value: float
@ -105,74 +110,72 @@ class AttributeModifierDataAttributeModifier(BaseModel):
fetchBaseValueFromSourceEntity: bool fetchBaseValueFromSourceEntity: bool
class AttributeModifierData(BaseModel): class AttributeModifierData(BaseStruct):
abnormalFlags: list[str] | None abnormalFlags: Union[List[str], None]
abnormalImmunes: list[str] | None abnormalImmunes: Union[List[str], None]
abnormalAntis: list[str] | None abnormalAntis: Union[List[str], None]
abnormalCombos: list[str] | None abnormalCombos: Union[List[str], None]
abnormalComboImmunes: list[str] | None abnormalComboImmunes: Union[List[str], None]
attributeModifiers: list[AttributeModifierDataAttributeModifier] attributeModifiers: List[AttributeModifierDataAttributeModifier]
class ExternalBuff(BaseModel): class ExternalBuff(BaseStruct):
attributes: AttributeModifierData attributes: AttributeModifierData
class CharacterDataPotentialRank(BaseModel): class CharacterDataPotentialRank(BaseStruct):
type_: int = Field(alias='type') type_: int = field(name='type')
description: str description: str
buff: ExternalBuff | None buff: Union[ExternalBuff, None]
equivalentCost: ItemBundle | None equivalentCost: Union[ItemBundle, None]
class CharacterDataSkillLevelCost(BaseModel): class CharacterDataSkillLevelCost(BaseStruct):
unlockCond: CharacterDataUnlockCondition unlockCond: CharacterDataUnlockCondition
lvlUpCost: list[ItemBundle] | None lvlUpCost: Union[List[ItemBundle], None]
class CharacterData(BaseModel): class CharacterData(BaseStruct):
name: str name: str
description: str | None description: Union[str, None]
canUseGeneralPotentialItem: bool canUseGeneralPotentialItem: bool
canUseActivityPotentialItem: bool canUseActivityPotentialItem: bool
potentialItemId: str | None potentialItemId: Union[str, None]
activityPotentialItemId: str | None activityPotentialItemId: Union[str, None]
nationId: str | None nationId: Union[str, None]
groupId: str | None groupId: Union[str, None]
teamId: str | None teamId: Union[str, None]
displayNumber: str | None displayNumber: Union[str, None]
tokenKey: str | None = None
appellation: str appellation: str
position: str position: str
tagList: list[str] | None tagList: Union[List[str], None]
itemUsage: str | None itemUsage: Union[str, None]
itemDesc: str | None itemDesc: Union[str, None]
itemObtainApproach: str | None itemObtainApproach: Union[str, None]
isNotObtainable: bool isNotObtainable: bool
isSpChar: bool isSpChar: bool
maxPotentialLevel: int maxPotentialLevel: int
rarity: int rarity: int
profession: str profession: str
subProfessionId: str subProfessionId: str
trait: CharacterDataTraitDataBundle | None trait: Union[CharacterDataTraitDataBundle, None]
phases: list[CharacterDataPhaseData] phases: List[CharacterDataPhaseData]
skills: list[CharacterDataMainSkill] skills: List[CharacterDataMainSkill]
talents: list[CharacterDataTalentDataBundle] | None talents: Union[List[CharacterDataTalentDataBundle], None]
potentialRanks: list[CharacterDataPotentialRank] potentialRanks: List[CharacterDataPotentialRank]
favorKeyFrames: list[CharacterDataAttributesKeyFrame] | None favorKeyFrames: Union[List[CharacterDataAttributesKeyFrame], None]
allSkillLvlup: list[CharacterDataSkillLevelCost] allSkillLvlup: List[CharacterDataSkillLevelCost]
minPowerId: str
maxPowerId: str
displayTokenDict: Union[Dict[str, bool], None] = None
classicPotentialItemId: Union[str, None] = None
tokenKey: Union[str, None] = None
class CharacterTable(BaseModel): class CharacterTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
chars: dict[str, CharacterData] chars: Dict[str, CharacterData]
class Config:
extra = 'allow'
def __init__(self, data: dict) -> None:
super().__init__(chars=data)
def __getitem__(self, key: str) -> CharacterData: def __getitem__(self, key: str) -> CharacterData:
return self.chars[key] return self.chars[key]

View File

@ -1,40 +1,43 @@
from pydantic import BaseModel, Field from typing import List, Union
from ..common import BaseStruct
from msgspec import field
class RuneDataSelector(BaseModel): class RuneDataSelector(BaseStruct):
professionMask: int | str professionMask: Union[int, str]
buildableMask: int buildableMask: int
charIdFilter: list[str] | None charIdFilter: Union[List[str], None]
enemyIdFilter: list[str] | None enemyIdFilter: Union[List[str], None]
enemyIdExcludeFilter: list[str] | None enemyIdExcludeFilter: Union[List[str], None]
skillIdFilter: list[str] | None skillIdFilter: Union[List[str], None]
tileKeyFilter: list[str] | None tileKeyFilter: Union[List[str], None]
groupTagFilter: list[str] | None groupTagFilter: Union[List[str], None]
filterTagFilter: list[str] | None filterTagFilter: Union[List[str], None]
subProfessionExcludeFilter: Union[List[str], None]
class Blackboard(BaseModel): class Blackboard(BaseStruct):
key: str key: str
value: float | None = None value: Union[float, None] = None
valueStr: str | None = None valueStr: Union[str, None] = None
class RuneData(BaseModel): class RuneData(BaseStruct):
key: str key: str
selector: RuneDataSelector selector: RuneDataSelector
blackboard: list[Blackboard] blackboard: List[Blackboard]
class RuneTablePackedRuneData(BaseModel): class RuneTablePackedRuneData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
points: float points: float
mutexGroupKey: str | None mutexGroupKey: Union[str, None]
description: str description: str
runes: list[RuneData] runes: List[RuneData]
class CharmItemData(BaseModel): class CharmItemData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
sort: int sort: int
name: str name: str
icon: str icon: str
@ -44,18 +47,15 @@ class CharmItemData(BaseModel):
rarity: int rarity: int
desc: str desc: str
price: int price: int
specialObtainApproach: str | None specialObtainApproach: Union[str, None]
charmType: str charmType: str
obtainInRandom: bool obtainInRandom: bool
dropStages: list[str] dropStages: List[str]
runeData: RuneTablePackedRuneData runeData: RuneTablePackedRuneData
charmEffect: str charmEffect: str
class CharmTable(BaseModel): class CharmTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
class Config: charmList: List[CharmItemData]
extra = 'allow'
charmList: list[CharmItemData]

View File

@ -1,12 +1,14 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class CharWordUnlockParam(BaseModel): class CharWordUnlockParam(BaseStruct):
valueStr: str | None valueStr: Union[str, None]
valueInt: int valueInt: int
class CharWordData(BaseModel): class CharWordData(BaseStruct):
charWordId: str charWordId: str
wordKey: str wordKey: str
charId: str charId: str
@ -16,53 +18,51 @@ class CharWordData(BaseModel):
voiceIndex: int voiceIndex: int
voiceType: str voiceType: str
unlockType: str unlockType: str
unlockParam: list[CharWordUnlockParam] unlockParam: List[CharWordUnlockParam]
lockDescription: str | None lockDescription: Union[str, None]
placeType: str placeType: str
voiceAsset: str voiceAsset: str
class VoiceLangInfoData(BaseModel): class VoiceLangInfoData(BaseStruct):
wordkey: str wordkey: str
voiceLangType: str voiceLangType: str
cvName: list[str] cvName: List[str]
voicePath: Union[str, None] = None
class VoiceLangData(BaseModel): class VoiceLangData(BaseStruct):
wordkeys: list[str] wordkeys: List[str]
charId: str charId: str
dict_: dict[str, VoiceLangInfoData] = Field(alias='dict') dict_: Dict[str, VoiceLangInfoData] = field(name='dict')
class VoiceLangTypeData(BaseModel): class VoiceLangTypeData(BaseStruct):
name: str name: str
groupType: str groupType: str
class VoiceLangGroupData(BaseModel): class VoiceLangGroupData(BaseStruct):
name: str name: str
members: list[str] members: List[str]
class NewVoiceTimeData(BaseModel): class NewVoiceTimeData(BaseStruct):
timestamp: int timestamp: int
charSet: list[str] charSet: List[str]
class CharwordTable(BaseModel): class CharwordTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
charWords: dict[str, CharWordData] charWords: Dict[str, CharWordData]
voiceLangDict: dict[str, VoiceLangData] voiceLangDict: Dict[str, VoiceLangData]
defaultLangType: str defaultLangType: str
newTagList: list[str] newTagList: List[str]
voiceLangTypeDict: dict[str, VoiceLangTypeData] voiceLangTypeDict: Dict[str, VoiceLangTypeData]
voiceLangGroupTypeDict: dict[str, VoiceLangGroupData] voiceLangGroupTypeDict: Dict[str, VoiceLangGroupData]
charDefaultTypeDict: dict[str, str] charDefaultTypeDict: Dict[str, str]
startTimeWithTypeDict: dict[str, list[NewVoiceTimeData]] startTimeWithTypeDict: Dict[str, List[NewVoiceTimeData]]
displayGroupTypeList: list[str] displayGroupTypeList: List[str]
displayTypeList: list[str] displayTypeList: List[str]
playVoiceRange: str playVoiceRange: str
class Config:
extra = 'allow'

View File

@ -1,42 +1,41 @@
from pydantic import BaseModel, Field from typing import Dict, List
from ..common import BaseStruct
from msgspec import field
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class MonthlySignInData(BaseModel): class MonthlySignInData(BaseStruct):
itemId: str itemId: str
itemType: str itemType: str
count: int count: int
class MonthlySignInGroupData(BaseModel): class MonthlySignInGroupData(BaseStruct):
groupId: str groupId: str
title: str title: str
description: str description: str
signStartTime: int signStartTime: int
signEndTime: int signEndTime: int
items: list[MonthlySignInData] items: List[MonthlySignInData]
class MonthlyDailyBonusGroup(BaseModel): class MonthlyDailyBonusGroup(BaseStruct):
groupId: str groupId: str
startTime: int startTime: int
endTime: int endTime: int
items: list[ItemBundle] items: List[ItemBundle]
imgId: str imgId: str
backId: str backId: str
class CheckinTable(BaseModel): class CheckinTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
groups: dict[str, MonthlySignInGroupData] groups: Dict[str, MonthlySignInGroupData]
monthlySubItem: dict[str, list[MonthlyDailyBonusGroup]] monthlySubItem: Dict[str, List[MonthlyDailyBonusGroup]]
currentMonthlySubId: str currentMonthlySubId: str
class Config:
extra = 'allow'

View File

@ -1,76 +1,78 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class ClimbTowerSingleTowerDataClimbTowerTaskRewardData(BaseModel): class ClimbTowerSingleTowerDataClimbTowerTaskRewardData(BaseStruct):
levelNum: int levelNum: int
rewards: list[ItemBundle] rewards: List[ItemBundle]
class ClimbTowerSingleTowerData(BaseModel): class ClimbTowerSingleTowerData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
sortId: int sortId: int
stageNum: int stageNum: int
name: str name: str
subName: str subName: str
desc: str desc: str
towerType: str towerType: str
levels: list[str] levels: List[str]
hardLevels: list[str] | None hardLevels: Union[List[str], None]
taskInfo: list[ClimbTowerSingleTowerDataClimbTowerTaskRewardData] | None taskInfo: Union[List[ClimbTowerSingleTowerDataClimbTowerTaskRewardData], None]
preTowerId: str | None preTowerId: Union[str, None]
medalId: str | None medalId: Union[str, None]
hiddenMedalId: str | None hiddenMedalId: Union[str, None]
hardModeMedalId: str | None hardModeMedalId: Union[str, None]
bossId: str | None bossId: Union[str, None]
cardId: str | None cardId: Union[str, None]
curseCardIds: list[str] curseCardIds: List[str]
dangerDesc: str dangerDesc: str
hardModeDesc: str | None hardModeDesc: Union[str, None]
class WeightItemBundle(BaseModel): class WeightItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
type_: str = Field(alias='type') type_: str = field(name='type')
dropType: str dropType: str
count: int count: int
weight: int weight: int
class StageDataDisplayRewards(BaseModel): class StageDataDisplayRewards(BaseStruct):
type_: str = Field(alias='type') type_: str = field(name='type')
id_: str = Field(alias='id') id_: str = field(name='id')
dropType: int dropType: int
class StageDataDisplayDetailRewards(BaseModel): class StageDataDisplayDetailRewards(BaseStruct):
occPercent: int occPercent: int
type_: str = Field(alias='type') type_: str = field(name='type')
id_: str = Field(alias='id') id_: str = field(name='id')
dropType: int dropType: int
class ClimbTowerDropDisplayInfo(BaseModel): class ClimbTowerDropDisplayInfo(BaseStruct):
itemId: str itemId: str
type_: int = Field(alias='type') type_: int = field(name='type')
maxCount: int maxCount: int
minCount: int minCount: int
class ClimbTowerLevelDropInfo(BaseModel): class ClimbTowerLevelDropInfo(BaseStruct):
passRewards: list[list[WeightItemBundle]] | None = None displayRewards: Union[List[StageDataDisplayRewards], None]
displayRewards: list[StageDataDisplayRewards] | None displayDetailRewards: Union[List[StageDataDisplayDetailRewards], None]
displayDetailRewards: list[StageDataDisplayDetailRewards] | None passRewards: Union[List[List[WeightItemBundle]], None] = None
displayDropInfo: dict[str, ClimbTowerDropDisplayInfo] | None = None displayDropInfo: Union[Dict[str, ClimbTowerDropDisplayInfo], None] = None
class ClimbTowerSingleLevelData(BaseModel): class ClimbTowerSingleLevelData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
levelId: str levelId: str
towerId: str towerId: str
layerNum: int layerNum: int
@ -82,8 +84,8 @@ class ClimbTowerSingleLevelData(BaseModel):
dropInfo: ClimbTowerLevelDropInfo dropInfo: ClimbTowerLevelDropInfo
class ClimbTowerTacticalBuffData(BaseModel): class ClimbTowerTacticalBuffData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
desc: str desc: str
profession: str profession: str
isDefaultActive: bool isDefaultActive: bool
@ -91,79 +93,80 @@ class ClimbTowerTacticalBuffData(BaseModel):
buffType: str buffType: str
class RuneDataSelector(BaseModel): class RuneDataSelector(BaseStruct):
professionMask: int | str professionMask: Union[int, str]
buildableMask: int buildableMask: int
charIdFilter: list[str] | None charIdFilter: Union[List[str], None]
enemyIdFilter: list[str] | None enemyIdFilter: Union[List[str], None]
enemyIdExcludeFilter: list[str] | None enemyIdExcludeFilter: Union[List[str], None]
skillIdFilter: list[str] | None skillIdFilter: Union[List[str], None]
tileKeyFilter: list[str] | None tileKeyFilter: Union[List[str], None]
groupTagFilter: list[str] | None groupTagFilter: Union[List[str], None]
filterTagFilter: list[str] | None filterTagFilter: Union[List[str], None]
subProfessionExcludeFilter: Union[List[str], None]
class Blackboard(BaseModel): class Blackboard(BaseStruct):
key: str key: str
value: float | None = None value: Union[float, None] = None
valueStr: str | None = None valueStr: Union[str, None] = None
class RuneData(BaseModel): class RuneData(BaseStruct):
key: str key: str
selector: RuneDataSelector selector: RuneDataSelector
blackboard: list[Blackboard] blackboard: List[Blackboard]
class RuneTablePackedRuneData(BaseModel): class RuneTablePackedRuneData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
points: float points: float
mutexGroupKey: str | None mutexGroupKey: Union[str, None]
description: str description: str
runes: list[RuneData] runes: List[RuneData]
class ClimbTowerMainCardData(BaseModel): class ClimbTowerMainCardData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
type_: str = Field(alias='type') type_: str = field(name='type')
linkedTowerId: str | None linkedTowerId: Union[str, None]
sortId: int sortId: int
name: str name: str
desc: str desc: str
subCardIds: list[str] subCardIds: List[str]
runeData: RuneTablePackedRuneData runeData: RuneTablePackedRuneData
trapIds: list[str] trapIds: List[str]
class ClimbTowerSubCardData(BaseModel): class ClimbTowerSubCardData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
mainCardId: str mainCardId: str
sortId: int sortId: int
name: str name: str
desc: str desc: str
runeData: RuneTablePackedRuneData runeData: RuneTablePackedRuneData
trapIds: list[str] trapIds: List[str]
class ClimbTowerCurseCardData(BaseModel): class ClimbTowerCurseCardData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
towerIdList: list[str] towerIdList: List[str]
name: str name: str
desc: str desc: str
trapId: str trapId: str
class ClimbTowerSeasonInfoData(BaseModel): class ClimbTowerSeasonInfoData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
name: str name: str
startTs: int startTs: int
endTs: int endTs: int
towers: list[str] towers: List[str]
seasonCards: list[str] seasonCards: List[str]
seasonColor: str seasonColor: str
class ClimbTowerDetailConst(BaseModel): class ClimbTowerDetailConst(BaseStruct):
unlockLevelId: str unlockLevelId: str
unlockModuleNumRequirement: int unlockModuleNumRequirement: int
lowerItemId: str lowerItemId: str
@ -171,7 +174,6 @@ class ClimbTowerDetailConst(BaseModel):
higherItemId: str higherItemId: str
higherItemLimit: int higherItemLimit: int
initCharCount: int initCharCount: int
recruitStageSort: list[int] | None = None
charRecruitTimes: int charRecruitTimes: int
charRecruitChoiceCount: int charRecruitChoiceCount: int
subcardStageSort: int subcardStageSort: int
@ -179,72 +181,70 @@ class ClimbTowerDetailConst(BaseModel):
firstClearTaskDesc: str firstClearTaskDesc: str
subCardObtainDesc: str subCardObtainDesc: str
subGodCardUnlockDesc: str subGodCardUnlockDesc: str
recruitStageSort: Union[List[int], None] = None
class ClimbTowerRewardInfo(BaseModel): class ClimbTowerRewardInfo(BaseStruct):
stageSort: int stageSort: int
lowerItemCount: int lowerItemCount: int
higherItemCount: int higherItemCount: int
class MissionDisplayRewards(BaseModel): class MissionDisplayRewards(BaseStruct):
type_: str = Field(alias='type') type_: str = field(name='type')
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
class MissionData(BaseModel): class MissionData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
sortId: int sortId: int
description: str description: str
type_: str = Field(alias='type') type_: str = field(name='type')
itemBgType: str itemBgType: str
preMissionIds: list[str] | None preMissionIds: Union[List[str], None]
template: str template: str
templateType: str templateType: str
param: list[str] param: List[str]
unlockCondition: str | None unlockCondition: Union[str, None]
unlockParam: list[str] | None unlockParam: Union[List[str], None]
missionGroup: str missionGroup: str
toPage: str | None toPage: Union[str, None]
periodicalPoint: int periodicalPoint: int
rewards: list[MissionDisplayRewards] | None rewards: Union[List[MissionDisplayRewards], None]
backImagePath: str | None backImagePath: Union[str, None]
foldId: str | None foldId: Union[str, None]
haveSubMissionToUnlock: bool haveSubMissionToUnlock: bool
class ClimbTowerMissionData(MissionData): class ClimbTowerMissionData(MissionData):
bindGodCardId: str | None bindGodCardId: Union[str, None]
missionBkg: str missionBkg: str
class MissionGroup(BaseModel): class MissionGroup(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
title: str | None title: Union[str, None]
type_: str = Field(alias='type') type_: str = field(name='type')
preMissionGroup: str | None preMissionGroup: Union[str, None]
period: list[int] | None period: Union[List[int], None]
rewards: list[MissionDisplayRewards] rewards: List[MissionDisplayRewards]
missionIds: list[str] missionIds: List[str]
startTs: int startTs: int
endTs: int endTs: int
class ClimbTowerTable(BaseModel): class ClimbTowerTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
towers: dict[str, ClimbTowerSingleTowerData] towers: Dict[str, ClimbTowerSingleTowerData]
levels: dict[str, ClimbTowerSingleLevelData] levels: Dict[str, ClimbTowerSingleLevelData]
tacticalBuffs: dict[str, ClimbTowerTacticalBuffData] tacticalBuffs: Dict[str, ClimbTowerTacticalBuffData]
mainCards: dict[str, ClimbTowerMainCardData] mainCards: Dict[str, ClimbTowerMainCardData]
subCards: dict[str, ClimbTowerSubCardData] subCards: Dict[str, ClimbTowerSubCardData]
curseCards: dict[str, ClimbTowerCurseCardData] curseCards: Dict[str, ClimbTowerCurseCardData]
seasonInfos: dict[str, ClimbTowerSeasonInfoData] seasonInfos: Dict[str, ClimbTowerSeasonInfoData]
detailConst: ClimbTowerDetailConst detailConst: ClimbTowerDetailConst
rewardInfoList: list[ClimbTowerRewardInfo] rewardInfoList: List[ClimbTowerRewardInfo]
missionData: dict[str, ClimbTowerMissionData] missionData: Dict[str, ClimbTowerMissionData]
missionGroup: dict[str, MissionGroup] missionGroup: Dict[str, MissionGroup]
class Config:
extra = 'allow'

View File

@ -1,29 +1,30 @@
from pydantic import BaseModel from typing import List
from ..common import BaseStruct
class MeetingClueDataClueData(BaseModel): class MeetingClueDataClueData(BaseStruct):
clueId: str clueId: str
clueName: str clueName: str
clueType: str clueType: str
number: int number: int
class MeetingClueDataClueTypeData(BaseModel): class MeetingClueDataClueTypeData(BaseStruct):
clueType: str clueType: str
clueNumber: int clueNumber: int
class MeetingClueDataReceiveTimeBonus(BaseModel): class MeetingClueDataReceiveTimeBonus(BaseStruct):
receiveTimes: int receiveTimes: int
receiveBonus: int receiveBonus: int
class ClueData(BaseModel): class ClueData(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
clues: list[MeetingClueDataClueData] clues: List[MeetingClueDataClueData]
clueTypes: list[MeetingClueDataClueTypeData] clueTypes: List[MeetingClueDataClueTypeData]
receiveTimeBonus: list[MeetingClueDataReceiveTimeBonus] receiveTimeBonus: List[MeetingClueDataReceiveTimeBonus]
inventoryLimit: int inventoryLimit: int
outputBasicBonus: int outputBasicBonus: int
outputOperatorsBonus: int outputOperatorsBonus: int
@ -35,6 +36,3 @@ class ClueData(BaseModel):
communicationDuration: int communicationDuration: int
initiatorBonus: int initiatorBonus: int
participantsBonus: int participantsBonus: int
class Config:
extra = 'allow'

View File

@ -1,41 +1,43 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class StringKeyFrames(BaseModel): class StringKeyFrames(BaseStruct):
level: int level: int
data: str data: str
class CrisisClientDataSeasonInfo(BaseModel): class CrisisClientDataSeasonInfo(BaseStruct):
seasonId: str seasonId: str
startTs: int startTs: int
endTs: int endTs: int
name: str name: str
crisisRuneCoinUnlockItem: ItemBundle crisisRuneCoinUnlockItem: ItemBundle
permBgm: str permBgm: str
medalGroupId: str | None medalGroupId: Union[str, None]
bgmHardPoint: int bgmHardPoint: int
permBgmHard: str | None permBgmHard: Union[str, None]
class CrisisMapRankInfo(BaseModel): class CrisisMapRankInfo(BaseStruct):
rewards: list[ItemBundle] rewards: List[ItemBundle]
unlockPoint: int unlockPoint: int
class CrisisTable(BaseModel): class CrisisTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
seasonInfo: list[CrisisClientDataSeasonInfo] seasonInfo: List[CrisisClientDataSeasonInfo]
tempAppraise: list[StringKeyFrames] tempAppraise: List[StringKeyFrames]
permAppraise: list[StringKeyFrames] permAppraise: List[StringKeyFrames]
mapRankInfo: dict[str, CrisisMapRankInfo] mapRankInfo: Dict[str, CrisisMapRankInfo]
meta: str meta: str
unlockCoinLv3: int unlockCoinLv3: int
hardPointPerm: int hardPointPerm: int
@ -43,6 +45,3 @@ class CrisisTable(BaseModel):
voiceGrade: int voiceGrade: int
crisisRuneCoinUnlockItemTitle: str crisisRuneCoinUnlockItemTitle: str
crisisRuneCoinUnlockItemDesc: str crisisRuneCoinUnlockItemDesc: str
class Config:
extra = 'allow'

View File

@ -1,7 +1,9 @@
from pydantic import BaseModel from typing import Dict, List
from ..common import BaseStruct
from msgspec import field
class PlayerAvatarPerData(BaseModel): class PlayerAvatarPerData(BaseStruct):
avatarId: str avatarId: str
avatarType: str avatarType: str
avatarIdSort: int avatarIdSort: int
@ -12,19 +14,19 @@ class PlayerAvatarPerData(BaseModel):
obtainApproach: str obtainApproach: str
class PlayerAvatarGroupData(BaseModel): class PlayerAvatarGroupData(BaseStruct):
avatarType: str avatarType: str
typeName: str typeName: str
avatarIdList: list[str] avatarIdList: List[str]
class PlayerAvatarData(BaseModel): class PlayerAvatarData(BaseStruct):
defaultAvatarId: str defaultAvatarId: str
avatarList: list[PlayerAvatarPerData] avatarList: List[PlayerAvatarPerData]
avatarTypeData: dict[str, PlayerAvatarGroupData] avatarTypeData: Dict[str, PlayerAvatarGroupData]
class HomeBackgroundSingleData(BaseModel): class HomeBackgroundSingleData(BaseStruct):
bgId: str bgId: str
bgType: str bgType: str
bgSortId: int bgSortId: int
@ -34,20 +36,32 @@ class HomeBackgroundSingleData(BaseModel):
bgDes: str bgDes: str
bgUsage: str bgUsage: str
obtainApproach: str obtainApproach: str
unlockDesList: list[str] unlockDesList: List[str]
class HomeBackgroundData(BaseModel): class HomeBackgroundThemeData(BaseStruct):
id_: str = field(name='id')
type_: str = field(name='type')
sortId: int
startTime: int
tmName: str
tmDes: str
tmUsage: str
obtainApproach: str
unlockDesList: List[str]
class HomeBackgroundData(BaseStruct):
defaultBackgroundId: str defaultBackgroundId: str
homeBgDataList: list[HomeBackgroundSingleData] defaultThemeId: str
homeBgDataList: List[HomeBackgroundSingleData]
themeList: List[HomeBackgroundThemeData]
defaultBgMusicId: str defaultBgMusicId: str
themeStartTime: int
class DisplayMetaTable(BaseModel): class DisplayMetaTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
playerAvatarData: PlayerAvatarData playerAvatarData: PlayerAvatarData
homeBackgroundData: HomeBackgroundData homeBackgroundData: HomeBackgroundData
class Config:
extra = 'allow'

View File

@ -1,57 +1,59 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class EnemyHandBookDataAbilty(BaseModel): class EnemyHandBookDataAbilty(BaseStruct):
text: str text: str
textFormat: str textFormat: str
class EnemyHandBookData(BaseModel): class EnemyHandBookData(BaseStruct):
enemyId: str enemyId: str
enemyIndex: str enemyIndex: str
enemyTags: list[str] | None enemyTags: Union[List[str], None]
sortId: int sortId: int
name: str name: str
enemyLevel: str enemyLevel: str
description: str description: str
attackType: str | None attackType: Union[str, None]
ability: str | None ability: Union[str, None]
isInvalidKilled: bool isInvalidKilled: bool
overrideKillCntInfos: dict[str, int] overrideKillCntInfos: Dict[str, int]
hideInHandbook: bool hideInHandbook: bool
abilityList: list[EnemyHandBookDataAbilty] | None abilityList: Union[List[EnemyHandBookDataAbilty], None]
linkEnemies: list[str] | None linkEnemies: Union[List[str], None]
damageType: list[str] | None damageType: Union[List[str], None]
invisibleDetail: bool invisibleDetail: bool
hideInStage: Union[bool, None] = None
class EnemyHandbookLevelInfoDataRangePair(BaseModel): class EnemyHandbookLevelInfoDataRangePair(BaseStruct):
min_: float = Field(alias='min') min_: float = field(name='min')
max_: float = Field(alias='max') max_: float = field(name='max')
class EnemyHandbookLevelInfoData(BaseModel): class EnemyHandbookLevelInfoData(BaseStruct):
classLevel: str classLevel: str
attack: EnemyHandbookLevelInfoDataRangePair attack: EnemyHandbookLevelInfoDataRangePair
def_: EnemyHandbookLevelInfoDataRangePair = Field(alias='def') def_: EnemyHandbookLevelInfoDataRangePair = field(name='def')
magicRes: EnemyHandbookLevelInfoDataRangePair magicRes: EnemyHandbookLevelInfoDataRangePair
maxHP: EnemyHandbookLevelInfoDataRangePair maxHP: EnemyHandbookLevelInfoDataRangePair
moveSpeed: EnemyHandbookLevelInfoDataRangePair moveSpeed: EnemyHandbookLevelInfoDataRangePair
attackSpeed: EnemyHandbookLevelInfoDataRangePair attackSpeed: EnemyHandbookLevelInfoDataRangePair
enemyDamageRes: EnemyHandbookLevelInfoDataRangePair
enemyRes: EnemyHandbookLevelInfoDataRangePair
class EnemyHandbookRaceData(BaseModel): class EnemyHandbookRaceData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
raceName: str raceName: str
sortId: int sortId: int
class EnemyHandbookTable(BaseModel): class EnemyHandbookTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
levelInfoList: list[EnemyHandbookLevelInfoData] levelInfoList: List[EnemyHandbookLevelInfoData]
enemyData: dict[str, EnemyHandBookData] enemyData: Dict[str, EnemyHandBookData]
raceData: dict[str, EnemyHandbookRaceData] raceData: Dict[str, EnemyHandbookRaceData]
class Config:
extra = 'allow'

View File

@ -1,19 +1,20 @@
from pydantic import BaseModel from typing import List
from ..common import BaseStruct
class FavorData(BaseModel): class FavorData(BaseStruct):
favorPoint: int favorPoint: int
percent: int percent: int
battlePhase: int battlePhase: int
class FavorDataFrames(BaseModel): class FavorDataFrames(BaseStruct):
level: int level: int
data: FavorData data: FavorData
class FavorTable(BaseModel): class FavorTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
maxFavor: int maxFavor: int
favorFrames: list[FavorDataFrames] favorFrames: List[FavorDataFrames]

View File

@ -1,25 +1,27 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class GachaDataLinkageTenGachaTkt(BaseModel): class GachaDataLinkageTenGachaTkt(BaseStruct):
itemId: str itemId: str
endTime: int endTime: int
gachaPoolId: str gachaPoolId: str
class GachaDataLimitTenGachaTkt(BaseModel): class GachaDataLimitTenGachaTkt(BaseStruct):
itemId: str itemId: str
endTime: int endTime: int
class GachaDataFreeLimitGachaData(BaseModel): class GachaDataFreeLimitGachaData(BaseStruct):
poolId: str poolId: str
openTime: int openTime: int
endTime: int endTime: int
freeCount: int freeCount: int
class GachaDataCarouselData(BaseModel): class GachaDataCarouselData(BaseStruct):
poolId: str poolId: str
index: int index: int
startTime: int startTime: int
@ -27,127 +29,124 @@ class GachaDataCarouselData(BaseModel):
spriteId: str spriteId: str
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class GachaDataRecruitRange(BaseModel): class GachaDataRecruitRange(BaseStruct):
rarityStart: int rarityStart: int
rarityEnd: int rarityEnd: int
class PotentialMaterialConverterConfig(BaseModel): class PotentialMaterialConverterConfig(BaseStruct):
items: dict[str, ItemBundle] items: Dict[str, ItemBundle]
class RecruitPoolRecruitTime(BaseModel): class RecruitPoolRecruitTime(BaseStruct):
timeLength: int timeLength: int
recruitPrice: int recruitPrice: int
accumRate: float | None = None accumRate: Union[float, None] = None
class RecruitConstantsData(BaseModel): class RecruitConstantsData(BaseStruct):
rarityWeights: None = None tagPriceList: Dict[str, int]
tagPriceList: dict[str, int]
recruitTimeFactorList: None = None
maxRecruitTime: int maxRecruitTime: int
rarityWeights: None = None
recruitTimeFactorList: None = None
class RecruitPool(BaseModel): class RecruitPool(BaseStruct):
recruitTimeTable: list[RecruitPoolRecruitTime] recruitTimeTable: List[RecruitPoolRecruitTime]
recruitCharacterList: None = None
recruitConstants: RecruitConstantsData recruitConstants: RecruitConstantsData
recruitCharacterList: None = None
maskTypeWeightTable: None = None maskTypeWeightTable: None = None
class NewbeeGachaPoolClientData(BaseModel): class NewbeeGachaPoolClientData(BaseStruct):
gachaPoolId: str gachaPoolId: str
gachaIndex: int gachaIndex: int
gachaPoolName: str gachaPoolName: str
gachaPoolDetail: str gachaPoolDetail: str
gachaPrice: int gachaPrice: int
gachaTimes: int gachaTimes: int
gachaOffset: str | None = None gachaOffset: Union[str, None] = None
firstOpenDay: int | None = None firstOpenDay: Union[int, None] = None
reOpenDay: int | None = None reOpenDay: Union[int, None] = None
gachaPoolItems: None = None gachaPoolItems: None = None
signUpEarliestTime: int | None = None signUpEarliestTime: Union[int, None] = None
class GachaPoolClientData(BaseModel): class GachaPoolClientData(BaseStruct):
CDPrimColor: str | None CDPrimColor: Union[str, None]
CDSecColor: str | None CDSecColor: Union[str, None]
dynMeta: dict[str, object] | None = None
endTime: int endTime: int
gachaIndex: int gachaIndex: int
gachaPoolDetail: str | None gachaPoolDetail: Union[str, None]
gachaPoolId: str gachaPoolId: str
gachaPoolName: str gachaPoolName: str
gachaPoolSummary: str gachaPoolSummary: str
gachaRuleType: str gachaRuleType: str
guarantee5Avail: int guarantee5Avail: int
guarantee5Count: int guarantee5Count: int
linkageParam: dict[str, object] | None = None LMTGSID: Union[str, None]
linkageRuleId: str | None = None
LMTGSID: str | None
openTime: int openTime: int
dynMeta: Union[Dict[str, object], None, None] = None
linkageParam: Union[Dict[str, object], None, None] = None
linkageRuleId: Union[str, None] = None
class GachaTag(BaseModel): class GachaTag(BaseStruct):
tagId: int tagId: int
tagName: str tagName: str
tagGroup: int tagGroup: int
class SpecialRecruitPoolSpecialRecruitCostData(BaseModel): class SpecialRecruitPoolSpecialRecruitCostData(BaseStruct):
itemCosts: ItemBundle itemCosts: ItemBundle
recruitPrice: int recruitPrice: int
timeLength: int timeLength: int
class SpecialRecruitPool(BaseModel): class SpecialRecruitPool(BaseStruct):
endDateTime: int endDateTime: int
order: int order: int
recruitId: str recruitId: str
recruitTimeTable: list[SpecialRecruitPoolSpecialRecruitCostData] recruitTimeTable: List[SpecialRecruitPoolSpecialRecruitCostData]
startDateTime: int startDateTime: int
tagId: int tagId: int
tagName: str tagName: str
CDPrimColor: str | None CDPrimColor: Union[str, None]
CDSecColor: str | None CDSecColor: Union[str, None]
LMTGSID: str | None LMTGSID: Union[str, None]
gachaRuleType: str gachaRuleType: str
class GachaDataFesGachaPoolRelateItem(BaseModel): class GachaDataFesGachaPoolRelateItem(BaseStruct):
rarityRank5ItemId: str rarityRank5ItemId: str
rarityRank6ItemId: str rarityRank6ItemId: str
class GachaTable(BaseModel): class GachaTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
gachaTags: list[GachaTag] gachaTags: List[GachaTag]
carousel: list[GachaDataCarouselData] carousel: List[GachaDataCarouselData]
classicPotentialMaterialConverter: PotentialMaterialConverterConfig classicPotentialMaterialConverter: PotentialMaterialConverterConfig
dicRecruit6StarHint: dict[str, str] | None dicRecruit6StarHint: Union[Dict[str, str], None]
fesGachaPoolRelateItem: dict[str, GachaDataFesGachaPoolRelateItem] | None fesGachaPoolRelateItem: Union[Dict[str, GachaDataFesGachaPoolRelateItem], None]
freeGacha: list[GachaDataFreeLimitGachaData] freeGacha: List[GachaDataFreeLimitGachaData]
gachaPoolClient: list[GachaPoolClientData] gachaPoolClient: List[GachaPoolClientData]
gachaTagMaxValid: int | None = None limitTenGachaItem: List[GachaDataLimitTenGachaTkt]
limitTenGachaItem: list[GachaDataLimitTenGachaTkt] linkageTenGachaItem: List[GachaDataLinkageTenGachaTkt]
linkageTenGachaItem: list[GachaDataLinkageTenGachaTkt] newbeeGachaPoolClient: List[NewbeeGachaPoolClientData]
newbeeGachaPoolClient: list[NewbeeGachaPoolClientData]
potentialMaterialConverter: PotentialMaterialConverterConfig potentialMaterialConverter: PotentialMaterialConverterConfig
recruitDetail: str recruitDetail: str
recruitPool: RecruitPool recruitPool: RecruitPool
recruitRarityTable: dict[str, GachaDataRecruitRange] recruitRarityTable: Dict[str, GachaDataRecruitRange]
specialRecruitPool: list[SpecialRecruitPool] specialRecruitPool: List[SpecialRecruitPool]
specialTagRarityTable: dict[str, list[int]] specialTagRarityTable: Dict[str, List[int]]
potentialMats: dict | None = None gachaTagMaxValid: Union[int, None] = None
classicPotentialMats: dict | None = None potentialMats: Union[Dict, None] = None
classicPotentialMats: Union[Dict, None] = None
class Config:
extra = 'allow'

View File

@ -1,24 +1,27 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
from msgspec import json as msgjson
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class GameDataConstsCharAssistRefreshTimeState(BaseModel): class GameDataConstsCharAssistRefreshTimeState(BaseStruct):
Hour: int Hour: int
Minute: int Minute: int
class TermDescriptionData(BaseModel): class TermDescriptionData(BaseStruct):
termId: str termId: str
termName: str termName: str
description: str description: str
class GamedataConst(BaseModel): class GamedataConst(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
addedRewardDisplayZone: str addedRewardDisplayZone: str
@ -26,13 +29,13 @@ class GamedataConst(BaseModel):
announceWebBusType: str announceWebBusType: str
apBuyCost: int apBuyCost: int
apBuyThreshold: int apBuyThreshold: int
assistBeUsedSocialPt: dict[str, int] assistBeUsedSocialPt: Dict[str, int]
attackMax: float attackMax: float
baseMaxFriendNum: int baseMaxFriendNum: int
buyApTimeNoLimitFlag: bool buyApTimeNoLimitFlag: bool
characterExpMap: list[list[int]] characterExpMap: List[List[int]]
characterUpgradeCostMap: list[list[int]] characterUpgradeCostMap: List[List[int]]
charAssistRefreshTime: list[GameDataConstsCharAssistRefreshTimeState] charAssistRefreshTime: List[GameDataConstsCharAssistRefreshTimeState]
charmEquipCount: int charmEquipCount: int
commonPotentialLvlUpCount: int commonPotentialLvlUpCount: int
completeCrystalBonus: int completeCrystalBonus: int
@ -46,15 +49,15 @@ class GamedataConst(BaseModel):
diamondMaterialToShardExchangeRatio: int diamondMaterialToShardExchangeRatio: int
diamondToShdRate: int diamondToShdRate: int
easyCrystalBonus: int easyCrystalBonus: int
evolveGoldCost: list[list[int]] evolveGoldCost: List[List[int]]
friendAssistRarityLimit: list[int] friendAssistRarityLimit: List[int]
hardDiamondDrop: int hardDiamondDrop: int
hpMax: float hpMax: float
initCampaignTotalFee: int initCampaignTotalFee: int
initCharIdList: list[str] initCharIdList: List[str]
initPlayerDiamondShard: int initPlayerDiamondShard: int
initPlayerGold: int initPlayerGold: int
initRecruitTagList: list[int] initRecruitTagList: List[int]
instFinDmdShdCost: int instFinDmdShdCost: int
isClassicGachaPoolFuncEnabled: bool isClassicGachaPoolFuncEnabled: bool
isClassicPotentialItemFuncEnabled: bool isClassicPotentialItemFuncEnabled: bool
@ -64,33 +67,31 @@ class GamedataConst(BaseModel):
isLMGTSEnabled: bool isLMGTSEnabled: bool
isRoguelikeAvgAchieveFuncEnabled: bool isRoguelikeAvgAchieveFuncEnabled: bool
isRoguelikeTopicFuncEnabled: bool isRoguelikeTopicFuncEnabled: bool
isVoucherClassicItemDistinguishable: bool | None = None legacyItemList: List[ItemBundle]
legacyItemList: list[ItemBundle]
legacyTime: int legacyTime: int
lMTGSDescConstOne: str lMTGSDescConstOne: str
lMTGSDescConstTwo: str lMTGSDescConstTwo: str
LMTGSToEPGSRatio: int LMTGSToEPGSRatio: int
mailBannerType: list[str] mailBannerType: List[str]
mainlineCompatibleDesc: str mainlineCompatibleDesc: str
mainlineEasyDesc: str mainlineEasyDesc: str
mainlineNormalDesc: str mainlineNormalDesc: str
mainlineToughDesc: str mainlineToughDesc: str
maxLevel: list[list[int]] maxLevel: List[List[int]]
maxPlayerLevel: int maxPlayerLevel: int
maxPracticeTicket: int maxPracticeTicket: int
monthlySubRemainTimeLimitDays: int monthlySubRemainTimeLimitDays: int
monthlySubWarningTime: int monthlySubWarningTime: int
multiInComeByRank: list[str] multiInComeByRank: List[str]
newBeeGiftEPGS: int newBeeGiftEPGS: int
normalGachaUnlockPrice: list[int] normalGachaUnlockPrice: List[int]
normalRecruitLockedString: list[str] normalRecruitLockedString: List[str]
operatorRecordsStartTime: int | None = None playerApMap: List[int]
playerApMap: list[int]
playerApRegenSpeed: int playerApRegenSpeed: int
playerExpMap: list[int] playerExpMap: List[int]
pullForces: list[float] pullForces: List[float]
pullForceZeroIndex: int pullForceZeroIndex: int
pushForces: list[float] pushForces: List[float]
pushForceZeroIndex: int pushForceZeroIndex: int
recruitPoolVersion: int recruitPoolVersion: int
rejectSpCharMission: int rejectSpCharMission: int
@ -98,10 +99,9 @@ class GamedataConst(BaseModel):
replicateShopStartTime: int replicateShopStartTime: int
requestSameFriendCD: int requestSameFriendCD: int
resPrefVersion: str resPrefVersion: str
richTextStyles: dict[str, str] richTextStyles: Dict[str, str]
storyReviewUnlockItemLackTip: str storyReviewUnlockItemLackTip: str
subProfessionDamageTypePairs: dict[str, int] | None = None termDescriptionDict: Dict[str, TermDescriptionData]
termDescriptionDict: dict[str, TermDescriptionData]
UnlimitSkinOutOfTime: int UnlimitSkinOutOfTime: int
useAssistSocialPt: int useAssistSocialPt: int
useAssistSocialPtMaxCount: int useAssistSocialPtMaxCount: int
@ -113,6 +113,6 @@ class GamedataConst(BaseModel):
voucherSkinRedeem: int voucherSkinRedeem: int
weeklyOverrideDesc: str weeklyOverrideDesc: str
TSO: int TSO: int
isVoucherClassicItemDistinguishable: Union[bool, None] = None
class Config: operatorRecordsStartTime: Union[int, None] = None
extra = 'allow' subProfessionDamageTypePairs: Union[Dict[str, int], None] = None

View File

@ -1,25 +1,27 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class HandbookUnlockParam(BaseModel): class HandbookUnlockParam(BaseStruct):
unlockType: int unlockType: int
unlockParam1: str unlockParam1: str
unlockParam2: str | None unlockParam2: Union[str, None]
unlockParam3: str | None unlockParam3: Union[str, None]
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class HandbookStageTimeData(BaseModel): class HandbookStageTimeData(BaseStruct):
timestamp: int timestamp: int
charSet: list[str] charSet: List[str]
class HandbookStoryStageData(BaseModel): class HandbookStoryStageData(BaseStruct):
charId: str charId: str
code: str code: str
description: str description: str
@ -27,23 +29,23 @@ class HandbookStoryStageData(BaseModel):
loadingPicId: str loadingPicId: str
name: str name: str
picId: str picId: str
rewardItem: list[ItemBundle] rewardItem: List[ItemBundle]
stageGetTime: int stageGetTime: int
stageId: str stageId: str
stageNameForShow: str stageNameForShow: str
unlockParam: list[HandbookUnlockParam] unlockParam: List[HandbookUnlockParam]
zoneId: str zoneId: str
zoneNameForShow: str zoneNameForShow: str
class HandbookDisplayCondition(BaseModel): class HandbookDisplayCondition(BaseStruct):
charId: str charId: str
conditionCharId: str conditionCharId: str
type_: str = Field(alias='type') type_: str = field(name='type')
class HandbookTeamMission(BaseModel): class HandbookTeamMission(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
sort: int sort: int
powerId: str powerId: str
powerName: str powerName: str
@ -51,19 +53,19 @@ class HandbookTeamMission(BaseModel):
favorPoint: int favorPoint: int
class NPCUnlock(BaseModel): class NPCUnlock(BaseStruct):
unLockType: int unLockType: int
unLockParam: str unLockParam: str
unLockString: str | None = None unLockString: Union[str, None] = None
class NPCData(BaseModel): class NPCData(BaseStruct):
appellation: str appellation: str
cv: str cv: str
designerList: list[str] | None designerList: Union[List[str], None]
displayNumber: str displayNumber: str
groupId: str | None groupId: Union[str, None]
illustList: list[str] illustList: List[str]
name: str name: str
nationId: str nationId: str
npcId: str npcId: str
@ -71,11 +73,11 @@ class NPCData(BaseModel):
profession: str profession: str
resType: str resType: str
teamId: None teamId: None
unlockDict: dict[str, NPCUnlock] unlockDict: Dict[str, NPCUnlock]
minPowerId: str minPowerId: str
class HandbookAvgData(BaseModel): class HandbookAvgData(BaseStruct):
storyId: str storyId: str
storySetId: str storySetId: str
storySort: int storySort: int
@ -85,47 +87,44 @@ class HandbookAvgData(BaseModel):
storyTxt: str storyTxt: str
class HandbookAvgGroupData(BaseModel): class HandbookAvgGroupData(BaseStruct):
storySetId: str storySetId: str
storySetName: str storySetName: str
sortId: int sortId: int
storyGetTime: int storyGetTime: int
rewardItem: list[ItemBundle] rewardItem: List[ItemBundle]
unlockParam: list[HandbookUnlockParam] unlockParam: List[HandbookUnlockParam]
avgList: list[HandbookAvgData] avgList: List[HandbookAvgData]
charId: str charId: str
class HandbookStoryData(BaseModel): class HandbookStoryData(BaseStruct):
storyText: str storyText: str
unLockType: int unLockType: int
unLockParam: str unLockParam: str
unLockString: str unLockString: str
class HandBookStoryViewData(BaseModel): class HandBookStoryViewData(BaseStruct):
stories: list[HandbookStoryData] stories: List[HandbookStoryData]
storyTitle: str storyTitle: str
unLockorNot: bool unLockorNot: bool
class HandbookInfoData(BaseModel): class HandbookInfoData(BaseStruct):
charID: str charID: str
infoName: str infoName: str
storyTextAudio: list[HandBookStoryViewData] storyTextAudio: List[HandBookStoryViewData]
handbookAvgList: list[HandbookAvgGroupData] handbookAvgList: List[HandbookAvgGroupData]
isLimited: bool | None = None isLimited: Union[bool, None] = None
class HandbookInfoTable(BaseModel): class HandbookInfoTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
handbookDict: dict[str, HandbookInfoData] handbookDict: Dict[str, HandbookInfoData]
npcDict: dict[str, NPCData] npcDict: Dict[str, NPCData]
teamMissionList: dict[str, HandbookTeamMission] teamMissionList: Dict[str, HandbookTeamMission]
handbookDisplayConditionList: dict[str, HandbookDisplayCondition] handbookDisplayConditionList: Dict[str, HandbookDisplayCondition]
handbookStageData: dict[str, HandbookStoryStageData] handbookStageData: Dict[str, HandbookStoryStageData]
handbookStageTime: list[HandbookStageTimeData] handbookStageTime: List[HandbookStageTimeData]
class Config:
extra = 'allow'

View File

@ -1,26 +1,27 @@
from pydantic import BaseModel from typing import List, Union
from ..common import BaseStruct
class HandBookInfoTextViewDataInfoTextAudio(BaseModel): class HandBookInfoTextViewDataInfoTextAudio(BaseStruct):
infoText: str infoText: str
audioName: str audioName: str
class StoryTextAudioInfoListItem(BaseModel): class StoryTextAudioInfoListItem(BaseStruct):
storyText: str | None storyText: Union[str, None]
storyTitle: str | None storyTitle: Union[str, None]
class StoryTextAudioItem(BaseModel): class StoryTextAudioItem(BaseStruct):
stories: list[StoryTextAudioInfoListItem] stories: List[StoryTextAudioInfoListItem]
unLockorNot: bool unLockorNot: bool
unLockType: int unLockType: int
unLockParam: str unLockParam: str
unLockString: str unLockString: str
class HandBookInfoTextViewData(BaseModel): class HandBookInfoTextViewData(BaseStruct):
infoList: list[HandBookInfoTextViewDataInfoTextAudio] infoList: List[HandBookInfoTextViewDataInfoTextAudio]
unLockorNot: bool unLockorNot: bool
unLockType: int unLockType: int
unLockParam: str unLockParam: str
@ -29,15 +30,15 @@ class HandBookInfoTextViewData(BaseModel):
unLockString: str unLockString: str
class CharHandbook(BaseModel): class CharHandbook(BaseStruct):
charID: str charID: str
drawName: str drawName: str
infoName: str infoName: str
infoTextAudio: list[HandBookInfoTextViewData] infoTextAudio: List[HandBookInfoTextViewData]
storyTextAudio: list[StoryTextAudioItem] storyTextAudio: List[StoryTextAudioItem]
class HandbookTable(BaseModel): class HandbookTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
char_102_texas: CharHandbook char_102_texas: CharHandbook

View File

@ -1,7 +1,9 @@
from pydantic import BaseModel from typing import Dict
from ..common import BaseStruct
from msgspec import json as msgjson
class HandbookTeam(BaseModel): class HandbookTeam(BaseStruct):
powerId: str powerId: str
orderNum: int orderNum: int
powerLevel: int powerLevel: int
@ -12,10 +14,7 @@ class HandbookTeam(BaseModel):
isRaw: bool isRaw: bool
class HandbookTeamTable(BaseModel): class HandbookTeamTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
team: dict[str, HandbookTeam] team: Dict[str, HandbookTeam]
def __init__(self, **data):
super().__init__(team=data)

View File

@ -1,107 +1,107 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class ItemDataStageDropInfo(BaseModel): class ItemDataStageDropInfo(BaseStruct):
stageId: str stageId: str
occPer: str occPer: str
class ItemDataBuildingProductInfo(BaseModel): class ItemDataBuildingProductInfo(BaseStruct):
roomType: str roomType: str
formulaId: str formulaId: str
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class FavorCharacterInfo(BaseModel): class FavorCharacterInfo(BaseStruct):
itemId: str itemId: str
charId: str charId: str
favorAddAmt: int favorAddAmt: int
class ActivityPotentialCharacterInfo(BaseModel): class ActivityPotentialCharacterInfo(BaseStruct):
charId: str charId: str
class FullPotentialCharacterInfo(BaseModel): class FullPotentialCharacterInfo(BaseStruct):
itemId: str itemId: str
ts: int ts: int
class ItemPackInfo(BaseModel): class ItemPackInfo(BaseStruct):
packId: str packId: str
content: list[ItemBundle] content: List[ItemBundle]
class UniCollectionInfo(BaseModel): class UniCollectionInfo(BaseStruct):
uniCollectionItemId: str uniCollectionItemId: str
uniqueItem: list[ItemBundle] uniqueItem: List[ItemBundle]
class ApSupplyFeature(BaseModel): class ApSupplyFeature(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
ap: int ap: int
hasTs: bool hasTs: bool
class ExpItemFeature(BaseModel): class ExpItemFeature(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
gainExp: int gainExp: int
class ItemData(BaseModel): class ItemData(BaseStruct):
itemId: str itemId: str
name: str name: str
description: str | None description: Union[str, None]
rarity: int rarity: int
iconId: str iconId: str
overrideBkg: None overrideBkg: None
stackIconId: str | None stackIconId: Union[str, None]
sortId: int sortId: int
usage: str | None usage: Union[str, None]
obtainApproach: str | None obtainApproach: Union[str, None]
classifyType: str classifyType: str
itemType: str itemType: str
stageDropList: list[ItemDataStageDropInfo] stageDropList: List[ItemDataStageDropInfo]
buildingProductList: list[ItemDataBuildingProductInfo] buildingProductList: List[ItemDataBuildingProductInfo]
hideInItemGet: Union[bool, None] = None
class CharVoucherItemFeature(BaseModel): class CharVoucherItemFeature(BaseStruct):
displayType: int displayType: int
id_: str = Field(alias='id') id_: str = field(name='id')
class ServerItemReminderMailData(BaseModel): class ServerItemReminderMailData(BaseStruct):
content: str content: str
sender: str sender: str
title: str title: str
class ServerItemReminderInfo(BaseModel): class ServerItemReminderInfo(BaseStruct):
paidItemIdList: list[str] paidItemIdList: List[str]
paidReminderMail: ServerItemReminderMailData paidReminderMail: ServerItemReminderMailData
class ItemTable(BaseModel): class ItemTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
activityPotentialCharacters: dict[str, ActivityPotentialCharacterInfo] activityPotentialCharacters: Dict[str, ActivityPotentialCharacterInfo]
apSupplies: dict[str, ApSupplyFeature] apSupplies: Dict[str, ApSupplyFeature]
charVoucherItems: dict[str, CharVoucherItemFeature] | None = None expItems: Dict[str, ExpItemFeature]
expItems: dict[str, ExpItemFeature] favorCharacters: Dict[str, FavorCharacterInfo]
favorCharacters: dict[str, FavorCharacterInfo] fullPotentialCharacters: Dict[str, FullPotentialCharacterInfo]
fullPotentialCharacters: dict[str, FullPotentialCharacterInfo] itemPackInfos: Dict[str, ItemPackInfo]
itemPackInfos: dict[str, ItemPackInfo] items: Dict[str, ItemData]
items: dict[str, ItemData] itemTimeLimit: Dict[str, int]
itemTimeLimit: dict[str, int] potentialItems: Dict[str, Dict[str, str]]
potentialItems: dict[str, dict[str, str]] uniCollectionInfo: Dict[str, UniCollectionInfo]
reminderInfo: ServerItemReminderInfo | None = None uniqueInfo: Dict[str, int]
uniCollectionInfo: dict[str, UniCollectionInfo] reminderInfo: Union[ServerItemReminderInfo, None] = None
uniqueInfo: dict[str, int] charVoucherItems: Union[Dict[str, CharVoucherItemFeature], None] = None
class Config:
extra = 'allow'

View File

@ -1,65 +1,65 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class MedalExpireTime(BaseModel): class MedalExpireTime(BaseStruct):
start: int start: int
end: int end: int
type_: str = Field(alias='type') type_: str = field(name='type')
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class MedalGroupData(BaseModel): class MedalGroupData(BaseStruct):
groupId: str groupId: str
groupName: str groupName: str
groupDesc: str groupDesc: str
medalId: list[str] medalId: List[str]
sortId: int sortId: int
groupBackColor: str groupBackColor: str
groupGetTime: int groupGetTime: int
sharedExpireTimes: list[MedalExpireTime] | None sharedExpireTimes: Union[List[MedalExpireTime], None]
class MedalRewardGroupData(BaseModel): class MedalRewardGroupData(BaseStruct):
groupId: str groupId: str
slotId: int slotId: int
itemList: list[ItemBundle] itemList: List[ItemBundle]
class MedalTypeData(BaseModel): class MedalTypeData(BaseStruct):
medalGroupId: str medalGroupId: str
sortId: int sortId: int
medalName: str medalName: str
groupData: list[MedalGroupData] groupData: List[MedalGroupData]
class MedalPerData(BaseModel): class MedalPerData(BaseStruct):
medalId: str | None medalId: Union[str, None]
medalName: str | None medalName: Union[str, None]
medalType: str | None medalType: Union[str, None]
slotId: int | None slotId: Union[int, None]
preMedalIdList: list[str] | None preMedalIdList: Union[List[str], None]
rarity: int rarity: int
template: str | None template: Union[str, None]
unlockParam: list[str] unlockParam: List[str]
getMethod: str | None getMethod: Union[str, None]
description: str | None description: Union[str, None]
advancedMedal: str | None advancedMedal: Union[str, None]
originMedal: str | None originMedal: Union[str, None]
displayTime: int displayTime: int
expireTimes: list[MedalExpireTime] expireTimes: List[MedalExpireTime]
medalRewardGroup: list[MedalRewardGroupData] medalRewardGroup: List[MedalRewardGroupData]
isHidden: Union[bool, None] = None
class MedalTable(BaseModel): class MedalTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
medalList: list[MedalPerData] medalList: List[MedalPerData]
medalTypeData: dict[str, MedalTypeData] medalTypeData: Dict[str, MedalTypeData]
class Config:
extra = 'allow'

View File

@ -1,87 +1,86 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class MissionDisplayRewards(BaseModel): class MissionDisplayRewards(BaseStruct):
type_: str = Field(alias='type') type_: str = field(name='type')
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
class DailyMissionGroupInfoperiodInfo(BaseModel): class DailyMissionGroupInfoperiodInfo(BaseStruct):
missionGroupId: str missionGroupId: str
period: list[int] period: List[int]
rewardGroupId: str rewardGroupId: str
class DailyMissionGroupInfo(BaseModel): class DailyMissionGroupInfo(BaseStruct):
endTime: int endTime: int
periodList: list[DailyMissionGroupInfoperiodInfo] periodList: List[DailyMissionGroupInfoperiodInfo]
startTime: int startTime: int
tagState: str | None tagState: Union[str, None]
class MissionWeeklyRewardConf(BaseModel): class MissionWeeklyRewardConf(BaseStruct):
beginTime: int beginTime: int
endTime: int endTime: int
groupId: str groupId: str
id_: str = Field(alias='id') id_: str = field(name='id')
periodicalPointCost: int periodicalPointCost: int
type_: str = Field(alias='type') type_: str = field(name='type')
sortIndex: int sortIndex: int
rewards: list[MissionDisplayRewards] rewards: List[MissionDisplayRewards]
class MissionDailyRewardConf(BaseModel): class MissionDailyRewardConf(BaseStruct):
groupId: str groupId: str
id_: str = Field(alias='id') id_: str = field(name='id')
periodicalPointCost: int periodicalPointCost: int
type_: str = Field(alias='type') type_: str = field(name='type')
sortIndex: int sortIndex: int
rewards: list[MissionDisplayRewards] rewards: List[MissionDisplayRewards]
class MissionGroup(BaseModel): class MissionGroup(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
title: str | None title: Union[str, None]
type_: str = Field(alias='type') type_: str = field(name='type')
preMissionGroup: str | None preMissionGroup: Union[str, None]
period: list[int] | None period: Union[List[int], None]
rewards: list[MissionDisplayRewards] | None rewards: Union[List[MissionDisplayRewards], None]
missionIds: list[str] missionIds: List[str]
startTs: int startTs: int
endTs: int endTs: int
class MissionData(BaseModel): class MissionData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
sortId: int sortId: int
description: str description: str
type_: str = Field(alias='type') type_: str = field(name='type')
itemBgType: str itemBgType: str
preMissionIds: list[str] | None preMissionIds: Union[List[str], None]
template: str template: str
templateType: str templateType: str
param: list[str] param: List[str]
unlockCondition: str | None unlockCondition: Union[str, None]
unlockParam: list[str] | None unlockParam: Union[List[str], None]
missionGroup: str missionGroup: str
toPage: None toPage: None
periodicalPoint: int periodicalPoint: int
rewards: list[MissionDisplayRewards] | None rewards: Union[List[MissionDisplayRewards], None]
backImagePath: str | None backImagePath: Union[str, None]
foldId: str | None foldId: Union[str, None]
haveSubMissionToUnlock: bool haveSubMissionToUnlock: bool
class MissionTable(BaseModel): class MissionTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
missions: dict[str, MissionData] missions: Dict[str, MissionData]
missionGroups: dict[str, MissionGroup] missionGroups: Dict[str, MissionGroup]
periodicalRewards: dict[str, MissionDailyRewardConf] periodicalRewards: Dict[str, MissionDailyRewardConf]
weeklyRewards: dict[str, MissionWeeklyRewardConf] weeklyRewards: Dict[str, MissionWeeklyRewardConf]
dailyMissionGroupInfo: dict[str, DailyMissionGroupInfo] dailyMissionGroupInfo: Dict[str, DailyMissionGroupInfo]
dailyMissionPeriodInfo: list[DailyMissionGroupInfo] dailyMissionPeriodInfo: List[DailyMissionGroupInfo]
class Config:
extra = 'allow'

View File

@ -1,58 +1,67 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class ItemBundle(BaseModel): class RewardItem(BaseStruct):
type_: str = Field(alias='type') type_: str = field(name='type')
id_: str = Field(alias='id') id_: str = field(name='id')
count: int
sortId: int
class ItemBundle(BaseStruct):
type_: str = field(name='type')
id_: str = field(name='id')
count: int count: int
class MissionDisplayRewards(BaseModel): class MissionDisplayRewards(BaseStruct):
type_: str = Field(alias='type') type_: str = field(name='type')
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
class OpenServerItemData(BaseModel): class OpenServerItemData(BaseStruct):
itemId: str itemId: str
itemType: str itemType: str
count: int count: int
class ReturnIntroData(BaseModel): class ReturnIntroData(BaseStruct):
sort: int sort: int
pubTime: int pubTime: int
image: str image: str
class ReturnCheckinData(BaseModel): class ReturnCheckinData(BaseStruct):
isImportant: bool isImportant: bool
checkinRewardItems: list[ItemBundle] checkinRewardItems: List[ItemBundle]
class ReturnLongTermTaskData(BaseModel): class ReturnLongTermTaskData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
sortId: int sortId: int
template: str template: str
param: list[str] param: List[str]
desc: str desc: str
rewards: list[MissionDisplayRewards] rewards: List[MissionDisplayRewards]
playPoint: int playPoint: int
class ReturnDailyTaskData(BaseModel): class ReturnDailyTaskData(BaseStruct):
groupId: str groupId: str
id_: str = Field(alias='id') id_: str = field(name='id')
groupSortId: int groupSortId: int
taskSortId: int taskSortId: int
template: str template: str
param: list[str] param: List[str]
desc: str desc: str
rewards: list[MissionDisplayRewards] rewards: List[MissionDisplayRewards]
playPoint: int playPoint: int
class ReturnConst(BaseModel): class ReturnConst(BaseStruct):
startTime: int startTime: int
systemTab_time: int systemTab_time: int
afkDays: int afkDays: int
@ -66,75 +75,75 @@ class ReturnConst(BaseModel):
pointId: str pointId: str
class ReturnData(BaseModel): class ReturnData(BaseStruct):
constData: ReturnConst constData: ReturnConst
onceRewards: list[ItemBundle] onceRewards: List[ItemBundle]
intro: list[ReturnIntroData] intro: List[ReturnIntroData]
returnDailyTaskDic: dict[str, list[ReturnDailyTaskData]] returnDailyTaskDic: Dict[str, List[ReturnDailyTaskData]]
returnLongTermTaskList: list[ReturnLongTermTaskData] returnLongTermTaskList: List[ReturnLongTermTaskData]
creditsList: list[ItemBundle] creditsList: List[ItemBundle]
checkinRewardList: list[ReturnCheckinData] checkinRewardList: List[ReturnCheckinData]
class OpenServerConst(BaseModel): class OpenServerConst(BaseStruct):
firstDiamondShardMailCount: int firstDiamondShardMailCount: int
initApMailEndTs: int initApMailEndTs: int
class TotalCheckinData(BaseModel): class TotalCheckinData(BaseStruct):
order: int order: int
item: OpenServerItemData item: OpenServerItemData
colorId: int colorId: int
class ChainLoginData(BaseModel): class ChainLoginData(BaseStruct):
order: int order: int
item: OpenServerItemData item: OpenServerItemData
colorId: int colorId: int
class MissionData(BaseModel): class MissionData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
sortId: int sortId: int
description: str description: str
type_: str = Field(alias='type') type_: str = field(name='type')
itemBgType: str itemBgType: str
preMissionIds: None preMissionIds: None
template: str template: str
templateType: str templateType: str
param: list[str] param: List[str]
unlockCondition: None unlockCondition: None
unlockParam: None unlockParam: None
missionGroup: str missionGroup: str
toPage: None toPage: None
periodicalPoint: int periodicalPoint: int
rewards: list[ItemBundle] rewards: List[ItemBundle]
backImagePath: None backImagePath: None
foldId: None foldId: None
haveSubMissionToUnlock: bool haveSubMissionToUnlock: bool
class MissionGroup(BaseModel): class MissionGroup(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
title: None title: None
type_: str = Field(alias='type') type_: str = field(name='type')
preMissionGroup: None preMissionGroup: None
period: None period: None
rewards: None rewards: None
missionIds: list[str] missionIds: List[str]
startTs: int startTs: int
endTs: int endTs: int
class OpenServerData(BaseModel): class OpenServerData(BaseStruct):
openServerMissionGroup: MissionGroup openServerMissionGroup: MissionGroup
openServerMissionData: list[MissionData] openServerMissionData: List[MissionData]
checkInData: list[TotalCheckinData] checkInData: List[TotalCheckinData]
chainLoginData: list[ChainLoginData] chainLoginData: List[ChainLoginData]
class OpenServerScheduleItem(BaseModel): class OpenServerScheduleItem(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
startTs: int startTs: int
endTs: int endTs: int
totalCheckinDescption: str totalCheckinDescption: str
@ -142,13 +151,127 @@ class OpenServerScheduleItem(BaseModel):
charImg: str charImg: str
class OpenServerTable(BaseModel): class ReturnConstV2(BaseStruct):
startTime: int
unlockLv: int
unlockStage: str
permMissionTime: int
pointId: str
returnPriceDesc: str
dailySupplyDesc: str
class onceRewardDataV2(BaseStruct):
groupId: str
startTime: int
endTime: int
rewardList: List[RewardItem]
class ReturnCheckinDataV2RewardList(BaseStruct):
sortId: int
isImportant: bool
rewardList: List[ItemBundle]
class CheckInRewardData(BaseStruct):
groupId: str
startTime: int
endTime: int
rewardList: List[ReturnCheckinDataV2RewardList]
class PriceRewardDataV2Content(BaseStruct):
contentId: str
sortId: int
pointRequire: int
desc: str
iconId: str
topIconId: str
rewardList: List[RewardItem]
class PriceRewardDataV2(BaseStruct):
groupId: str
startTime: int
endTime: int
contentList: List[PriceRewardDataV2Content]
class MissionGroupDataV2Mission(BaseStruct):
missionId: str
groupId: str
sortId: int
jumpType: str
jumpParam: Union[str, None]
desc: str
rewardList: List[ItemBundle]
class MissionGroupDataV2(BaseStruct):
groupId: str
sortId: int
tabTitle: str
title: str
desc: str
diffMissionCount: int
startTime: int
endTime: int
imageId: str
iconId: str
missionList: List[MissionGroupDataV2Mission]
class SailySupplyDataV2(BaseStruct):
groupId: str
startTime: int
endTime: int
rewardList: List[ItemBundle]
class PackageCheckInRewardDataV2(BaseStruct):
groupId: str
startTime: int
endTime: int
getTime: int
bindGPGoodId: str
totalCheckInDay: int
iconId: str
rewardDict: Dict[str, List[RewardItem]]
class ReturnDataV2(BaseStruct):
constData: ReturnConstV2
onceRewardData: List[onceRewardDataV2]
checkInRewardData: List[CheckInRewardData]
priceRewardData: List[PriceRewardDataV2]
missionGroupData: List[MissionGroupDataV2]
dailySupplyData: List[SailySupplyDataV2]
packageCheckInRewardData: List[PackageCheckInRewardDataV2]
class CheckInRewardItem(BaseStruct):
orderNum: int
itemBundle: ItemBundle
class OpenServerNewbieCheckInPackage(BaseStruct):
groupId: str
startTime: int
endTime: int
bindGPGoodId: str
checkInDuration: int
totalCheckInDay: int
iconId: str
checkInRewardDict: Dict[str, List[CheckInRewardItem]]
class OpenServerTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
schedule: list[OpenServerScheduleItem] schedule: List[OpenServerScheduleItem]
dataMap: dict[str, OpenServerData] dataMap: Dict[str, OpenServerData]
constant: OpenServerConst constant: OpenServerConst
playerReturn: ReturnData playerReturn: ReturnData
playerReturnV2: ReturnDataV2
class Config: newbieCheckInPackageList: List[OpenServerNewbieCheckInPackage]
extra = 'allow'

View File

@ -1,13 +1,14 @@
from pydantic import BaseModel from typing import Dict, List
from ..common import BaseStruct
class PlayerAvatarGroupData(BaseModel): class PlayerAvatarGroupData(BaseStruct):
avatarType: str avatarType: str
typeName: str typeName: str
avatarIdList: list[str] avatarIdList: List[str]
class PlayerAvatarPerData(BaseModel): class PlayerAvatarPerData(BaseStruct):
avatarId: str avatarId: str
avatarType: str avatarType: str
avatarIdSort: int avatarIdSort: int
@ -18,9 +19,9 @@ class PlayerAvatarPerData(BaseModel):
obtainApproach: str obtainApproach: str
class PlayerAvatarTable(BaseModel): class PlayerAvatarTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
avatarList: list[PlayerAvatarPerData] avatarList: List[PlayerAvatarPerData]
avatarTypeData: dict[str, PlayerAvatarGroupData] avatarTypeData: Dict[str, PlayerAvatarGroupData]
defaultAvatarId: str defaultAvatarId: str

View File

@ -1,29 +1,29 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
from msgspec import json as msgjson
class GridPosition(BaseModel): class GridPosition(BaseStruct):
row: int row: int
col: int col: int
class ObscuredRect(BaseModel): class ObscuredRect(BaseStruct):
m_xMin: float m_xMin: float
m_yMin: float m_yMin: float
m_width: float m_width: float
m_height: float m_height: float
class Stage(BaseModel): class Stage(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
direction: int direction: int
grids: list[GridPosition] grids: List[GridPosition]
boundingBoxes: list[ObscuredRect] | None = None boundingBoxes: Union[List[ObscuredRect], None] = None
class RangeTable(BaseModel): class RangeTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
range: dict[str, Stage] range: Dict[str, Stage]
def __init__(self, **data):
super().__init__(range=data)

View File

@ -1,28 +1,25 @@
from pydantic import BaseModel, Field from typing import Dict, List
from ..common import BaseStruct
from msgspec import field
from msgspec import json as msgjson
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class ReplicateData(BaseModel): class ReplicateData(BaseStruct):
item: ItemBundle item: ItemBundle
replicateTokenItem: ItemBundle replicateTokenItem: ItemBundle
class ReplicateList(BaseModel): class ReplicateList(BaseStruct):
replicateList: list[ReplicateData] replicateList: List[ReplicateData]
class ReplicateTable(BaseModel): class ReplicateTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
replicate: dict[str, ReplicateList] replicate: Dict[str, ReplicateList]
class Config:
extra = 'allow'
def __init__(self, **data):
super().__init__(replicate=data)

View File

@ -1,78 +1,77 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
from msgspec.inspect import NoneType
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class StageDataDisplayRewards(BaseModel): class StageDataDisplayRewards(BaseStruct):
type_: str = Field(alias='type') type_: str = field(name='type')
id_: str = Field(alias='id') id_: str = field(name='id')
dropType: int dropType: int
class BlackboardStr(BaseModel): class Blackboard(BaseStruct):
key: str key: str
valueStr: str value: Union[float, None] = None
valueStr: Union[str, None] = None
class BlackboardInt(BaseModel): class Act17sideDataChoiceNodeOptionData(BaseStruct):
key: str
value: float
class Act17sideDataChoiceNodeOptionData(BaseModel):
canRepeat: bool canRepeat: bool
eventId: str eventId: str
des: str des: str
unlockDes: str | None unlockDes: Union[str, None]
class StageDataDisplayDetailRewards(BaseModel): class StageDataDisplayDetailRewards(BaseStruct):
occPercent: int occPercent: int
type_: str = Field(alias='type') type_: str = field(name='type')
id_: str = Field(alias='id') id_: str = field(name='id')
dropType: int dropType: int
CannotGetPercent: float | None = None CannotGetPercent: Union[float, None] = None
GetPercent: float | None = None GetPercent: Union[float, None] = None
class StageDataConditionDesc(BaseModel): class StageDataConditionDesc(BaseStruct):
stageId: str stageId: str
completeState: int completeState: int
class Act17sideDataConstData(BaseModel): class Act17sideDataConstData(BaseStruct):
techTreeUnlockEventId: str techTreeUnlockEventId: str
class Act17sideDataZoneData(BaseModel): class Act17sideDataZoneData(BaseStruct):
zoneId: str zoneId: str
unlockPlaceId: str | None unlockPlaceId: Union[str, None]
unlockText: str unlockText: str
class Act17sideDataMainlineData(BaseModel): class Act17sideDataMainlineData(BaseStruct):
mainlineId: str mainlineId: str
nodeId: str | None nodeId: Union[str, None]
sortId: int sortId: int
missionSort: str missionSort: str
zoneId: str zoneId: str
mainlineDes: str mainlineDes: str
focusNodeId: str | None focusNodeId: Union[str, None]
class Act17sideDataMainlineChapterData(BaseModel): class Act17sideDataMainlineChapterData(BaseStruct):
chapterId: str chapterId: str
chapterDes: str chapterDes: str
chapterIcon: str chapterIcon: str
unlockDes: str unlockDes: str
id_: str = Field(alias='id') id_: str = field(name='id')
class RunesSelector(BaseModel): class RunesSelector(BaseStruct):
professionMask: int professionMask: int
buildableMask: int buildableMask: int
charIdFilter: None charIdFilter: None
@ -82,23 +81,24 @@ class RunesSelector(BaseModel):
tileKeyFilter: None tileKeyFilter: None
groupTagFilter: None groupTagFilter: None
filterTagFilter: None filterTagFilter: None
subProfessionExcludeFilter: None
class TechTreeBranchRunes(BaseModel): class TechTreeBranchRunes(BaseStruct):
key: str key: str
selector: RunesSelector selector: RunesSelector
blackboard: list[BlackboardInt | BlackboardStr] blackboard: List[Blackboard]
class BranchRuneData(BaseModel): class BranchRuneData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
points: float points: float
mutexGroupKey: None mutexGroupKey: None
description: str description: str
runes: list[TechTreeBranchRunes] runes: List[TechTreeBranchRunes]
class Act17sideDataTechTreeBranchData(BaseModel): class Act17sideDataTechTreeBranchData(BaseStruct):
techTreeBranchId: str techTreeBranchId: str
techTreeId: str techTreeId: str
techTreeBranchName: str techTreeBranchName: str
@ -107,7 +107,7 @@ class Act17sideDataTechTreeBranchData(BaseModel):
runeData: BranchRuneData runeData: BranchRuneData
class Act17sideDataTechTreeData(BaseModel): class Act17sideDataTechTreeData(BaseStruct):
techTreeId: str techTreeId: str
sortId: int sortId: int
techTreeName: str techTreeName: str
@ -115,36 +115,36 @@ class Act17sideDataTechTreeData(BaseModel):
lockDes: str lockDes: str
class Act17sideDataArchiveItemUnlockData(BaseModel): class Act17sideDataArchiveItemUnlockData(BaseStruct):
itemId: str itemId: str
itemType: str itemType: str
unlockCondition: str unlockCondition: str
nodeId: str | None nodeId: Union[str, None]
stageParam: str stageParam: str
chapterId: str | None chapterId: Union[str, None]
class Act17sideDataEventData(BaseModel): class Act17sideDataEventData(BaseStruct):
eventId: str eventId: str
eventPic: str | None = None
eventSpecialPic: str | None = None
eventTitle: str eventTitle: str
eventDesList: list[str] eventDesList: List[str]
eventPic: Union[str, None] = None
eventSpecialPic: Union[str, None] = None
class Act17sideDataChoiceNodeData(BaseModel): class Act17sideDataChoiceNodeData(BaseStruct):
nodeId: str nodeId: str
choicePic: str | None = None
isDisposable: bool isDisposable: bool
choiceSpecialPic: str | None = None
choiceName: str choiceName: str
choiceDesList: list[str] choiceDesList: List[str]
cancelDes: str cancelDes: str
choiceNum: int choiceNum: int
optionList: list[Act17sideDataChoiceNodeOptionData] optionList: List[Act17sideDataChoiceNodeOptionData]
choicePic: Union[str, None] = None
choiceSpecialPic: Union[str, None] = None
class Act17sideDataTechNodeData(BaseModel): class Act17sideDataTechNodeData(BaseStruct):
nodeId: str nodeId: str
techTreeId: str techTreeId: str
techTreeName: str techTreeName: str
@ -152,54 +152,55 @@ class Act17sideDataTechNodeData(BaseModel):
techSpecialPic: str techSpecialPic: str
endEventId: str endEventId: str
confirmDes: str confirmDes: str
techDesList: list[str] techDesList: List[str]
missionIdList: list[None] missionIdList: List[None]
class Act17sideDataEventNodeData(BaseModel): class Act17sideDataEventNodeData(BaseStruct):
nodeId: str nodeId: str
eventId: str eventId: str
endEventId: str endEventId: str
class Act17sideDataTreasureNodeData(BaseModel): class Act17sideDataTreasureNodeData(BaseStruct):
nodeId: str nodeId: str
treasureId: str treasureId: str
treasureName: str treasureName: str
treasurePic: str | None treasurePic: Union[str, None]
treasureSpecialPic: None treasureSpecialPic: None
endEventId: str endEventId: str
confirmDes: str confirmDes: str
treasureDesList: list[str] treasureDesList: List[str]
missionIdList: list[str] missionIdList: List[str]
rewardList: list[ItemBundle] rewardList: List[ItemBundle]
treasureType: str
class Act17sideDataBattleNodeData(BaseModel): class Act17sideDataBattleNodeData(BaseStruct):
nodeId: str nodeId: str
stageId: str stageId: str
class Act17sideDataStoryNodeData(BaseModel): class Act17sideDataStoryNodeData(BaseStruct):
nodeId: str nodeId: str
storyId: str storyId: str
storyKey: str storyKey: str
storyName: str storyName: str
storyPic: str | None storyPic: Union[str, None]
confirmDes: str confirmDes: str
storyDesList: list[str] storyDesList: List[str]
class Act17sideDataLandmarkNodeData(BaseModel): class Act17sideDataLandmarkNodeData(BaseStruct):
nodeId: str nodeId: str
landmarkId: str landmarkId: str
landmarkName: str landmarkName: str
landmarkPic: str | None landmarkPic: Union[str, None]
landmarkSpecialPic: str landmarkSpecialPic: str
landmarkDesList: list[str] landmarkDesList: List[str]
class Act17sideDataNodeInfoData(BaseModel): class Act17sideDataNodeInfoData(BaseStruct):
nodeId: str nodeId: str
nodeType: str nodeType: str
sortId: int sortId: int
@ -209,121 +210,122 @@ class Act17sideDataNodeInfoData(BaseModel):
trackPointType: str trackPointType: str
class Act17sideDataPlaceData(BaseModel): class Act17sideDataPlaceData(BaseStruct):
placeId: str placeId: str
placeDesc: str placeDesc: str
lockEventId: str | None lockEventId: Union[str, None]
zoneId: str zoneId: str
class Act17sideData(BaseModel): class Act17sideData(BaseStruct):
archiveItemUnlockDataMap: dict[str, Act17sideDataArchiveItemUnlockData] archiveItemUnlockDataMap: Dict[str, Act17sideDataArchiveItemUnlockData]
battleNodeDataMap: dict[str, Act17sideDataBattleNodeData] battleNodeDataMap: Dict[str, Act17sideDataBattleNodeData]
choiceNodeDataMap: dict[str, Act17sideDataChoiceNodeData] choiceNodeDataMap: Dict[str, Act17sideDataChoiceNodeData]
constData: Act17sideDataConstData constData: Act17sideDataConstData
eventDataMap: dict[str, Act17sideDataEventData] eventDataMap: Dict[str, Act17sideDataEventData]
eventNodeDataMap: dict[str, Act17sideDataEventNodeData] eventNodeDataMap: Dict[str, Act17sideDataEventNodeData]
landmarkNodeDataMap: dict[str, Act17sideDataLandmarkNodeData] landmarkNodeDataMap: Dict[str, Act17sideDataLandmarkNodeData]
mainlineChapterDataMap: dict[str, Act17sideDataMainlineChapterData] mainlineChapterDataMap: Dict[str, Act17sideDataMainlineChapterData]
mainlineDataMap: dict[str, Act17sideDataMainlineData] mainlineDataMap: Dict[str, Act17sideDataMainlineData]
nodeInfoDataMap: dict[str, Act17sideDataNodeInfoData] nodeInfoDataMap: Dict[str, Act17sideDataNodeInfoData]
placeDataMap: dict[str, Act17sideDataPlaceData] placeDataMap: Dict[str, Act17sideDataPlaceData]
storyNodeDataMap: dict[str, Act17sideDataStoryNodeData] storyNodeDataMap: Dict[str, Act17sideDataStoryNodeData]
techNodeDataMap: dict[str, Act17sideDataTechNodeData] techNodeDataMap: Dict[str, Act17sideDataTechNodeData]
techTreeBranchDataMap: dict[str, Act17sideDataTechTreeBranchData] techTreeBranchDataMap: Dict[str, Act17sideDataTechTreeBranchData]
techTreeDataMap: dict[str, Act17sideDataTechTreeData] techTreeDataMap: Dict[str, Act17sideDataTechTreeData]
treasureNodeDataMap: dict[str, Act17sideDataTreasureNodeData] treasureNodeDataMap: Dict[str, Act17sideDataTreasureNodeData]
zoneDataList: list[Act17sideDataZoneData] zoneDataList: List[Act17sideDataZoneData]
class Blackboard(BaseModel): class RuneDataSelector(BaseStruct):
key: str
value: float | None = None
valueStr: str | None = None
class RuneDataSelector(BaseModel):
buildableMask: int buildableMask: int
charIdFilter: list[str] | None
enemyIdExcludeFilter: list[str] | None
enemyIdFilter: list[str] | None
filterTagFilter: list[str] | None
groupTagFilter: list[str] | None
professionMask: int professionMask: int
skillIdFilter: list[str] | None charIdFilter: None
tileKeyFilter: list[str] | None enemyIdExcludeFilter: None
enemyIdFilter: None
filterTagFilter: None
groupTagFilter: None
skillIdFilter: None
tileKeyFilter: None
subProfessionExcludeFilter: None
class RuneData(BaseModel): class RuneData(BaseStruct):
blackboard: list[Blackboard] blackboard: List[Blackboard]
key: str key: str
m_inited: bool | None = None
selector: RuneDataSelector selector: RuneDataSelector
m_inited: Union[bool, None] = None
class RuneTablePackedRuneData(BaseModel): class RuneTablePackedRuneData(BaseStruct):
description: str description: str
id_: str = Field(alias='id') id_: str = field(name='id')
mutexGroupKey: str | None = None
points: float points: float
runes: list[RuneData] runes: List[RuneData]
mutexGroupKey: Union[str, None] = None
class Act25SideDataBattlePerformanceData(BaseModel): class Act25SideDataBattlePerformanceData(BaseStruct):
itemDesc: str itemDesc: str
itemId: str itemId: str
itemIcon: str itemIcon: str
ItemName: str | None = None itemName: str
itemTechType: str itemTechType: str
runeData: RuneTablePackedRuneData runeData: RuneTablePackedRuneData
sortId: int sortId: int
class ActivityCustomDataAct25sideCustomData(BaseModel): class ActivityCustomDataAct25sideCustomData(BaseStruct):
battlePerformanceData: dict[str, Act25SideDataBattlePerformanceData] battlePerformanceData: Dict[str, Act25SideDataBattlePerformanceData]
class ActivityCustomData(BaseModel): class ActivityCustomDataAct20sideCustomData(BaseStruct):
TYPE_ACT17SIDE: dict[str, Act17sideData] zoneAdditionDataMap: Dict[str, str]
TYPE_ACT25SIDE: dict[str, ActivityCustomDataAct25sideCustomData] residentCartDatas: Dict[str, Dict[str, str]]
class RetroTrailRuleData(BaseModel): class ActivityCustomData(BaseStruct):
title: list[str] TYPE_ACT17SIDE: Dict[str, Act17sideData]
desc: list[str] TYPE_ACT25SIDE: Dict[str, ActivityCustomDataAct25sideCustomData]
TYPE_ACT20SIDE: Dict[str, ActivityCustomDataAct20sideCustomData]
class WeightItemBundle(BaseModel): class RetroTrailRuleData(BaseStruct):
title: List[str]
desc: List[str]
class WeightItemBundle(BaseStruct):
count: int count: int
dropType: str dropType: str
id_: str = Field(alias='id') id_: str = field(name='id')
type_: str = Field(alias='type') type_: str = field(name='type')
weight: int weight: int
class StageDataStageDropInfo(BaseModel): class StageDataStageDropInfo(BaseStruct):
firstPassRewards: list[ItemBundle] | None = None displayRewards: List[StageDataDisplayRewards]
firstCompleteRewards: list[ItemBundle] | None = None displayDetailRewards: List[StageDataDisplayDetailRewards]
passRewards: list[list[WeightItemBundle]] | None = None firstPassRewards: Union[List[ItemBundle], None] = None
completeRewards: list[list[WeightItemBundle]] | None = None firstCompleteRewards: Union[List[ItemBundle], None] = None
displayRewards: list[StageDataDisplayRewards] passRewards: Union[List[List[WeightItemBundle]], None] = None
displayDetailRewards: list[StageDataDisplayDetailRewards] completeRewards: Union[List[List[WeightItemBundle]], None] = None
class StageData(BaseModel): class StageData(BaseStruct, kw_only=False):
stageType: str stageType: str
difficulty: str difficulty: str
performanceStageFlag: str performanceStageFlag: str
diffGroup: str diffGroup: str
unlockCondition: list[StageDataConditionDesc] unlockCondition: List[StageDataConditionDesc]
stageId: str stageId: str
levelId: str | None levelId: Union[str, None]
zoneId: str zoneId: str
code: str code: str
name: str name: str
description: str description: str
hardStagedId: str | None hardStagedId: Union[str, None]
dangerLevel: str | None dangerLevel: Union[str, None]
dangerPoint: float dangerPoint: float
loadingPicId: str loadingPicId: str
canPractice: bool canPractice: bool
@ -357,45 +359,48 @@ class StageData(BaseModel):
startButtonOverrideId: None startButtonOverrideId: None
isStagePatch: bool isStagePatch: bool
mainStageId: str mainStageId: str
canUseTech: Union[bool, None] = None
canUseCharm: Union[bool, None] = None
canUseBattlePerformance: Union[bool, None] = None
class RetroTrailRewardItem(BaseModel): class RetroTrailRewardItem(BaseStruct):
trailRewardId: str trailRewardId: str
starCount: int starCount: int
rewardItem: ItemBundle rewardItem: ItemBundle
class RetroTrailData(BaseModel): class RetroTrailData(BaseStruct):
retroId: str retroId: str
trailStartTime: int trailStartTime: int
trailRewardList: list[RetroTrailRewardItem] trailRewardList: List[RetroTrailRewardItem]
stageList: list[str] stageList: List[str]
relatedChar: str relatedChar: str
relatedFullPotentialItemId: None relatedFullPotentialItemId: None
themeColor: str themeColor: str
fullPotentialItemId: str fullPotentialItemId: str
class RetroActData(BaseModel): class RetroActData(BaseStruct):
retroId: str retroId: str
type_: int = Field(alias='type') type_: int = field(name='type')
linkedActId: list[str] linkedActId: List[str]
startTime: int startTime: int
trailStartTime: int trailStartTime: int
index: int index: int
name: str name: str
detail: str detail: str
haveTrail: bool haveTrail: bool
customActId: str | None customActId: Union[str, None]
customActType: str customActType: str
class StageValidInfo(BaseModel): class StageValidInfo(BaseStruct):
startTs: int startTs: int
endTs: int endTs: int
class RetroStageOverrideInfo(BaseModel): class RetroStageOverrideInfo(BaseStruct):
apCost: int apCost: int
apFailReturn: int apFailReturn: int
completeFavor: int completeFavor: int
@ -406,23 +411,20 @@ class RetroStageOverrideInfo(BaseModel):
zoneId: str zoneId: str
class RetroTable(BaseModel): class RetroTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
customData: ActivityCustomData customData: ActivityCustomData
initRetroCoin: int initRetroCoin: int
retroActList: dict[str, RetroActData] retroActList: Dict[str, RetroActData]
retroCoinMax: int retroCoinMax: int
retroCoinPerWeek: int retroCoinPerWeek: int
retroDetail: str retroDetail: str
retroPreShowTime: int retroPreShowTime: int
retroTrailList: dict[str, RetroTrailData] retroTrailList: Dict[str, RetroTrailData]
retroUnlockCost: int retroUnlockCost: int
ruleData: RetroTrailRuleData ruleData: RetroTrailRuleData
stageList: dict[str, StageData] stageList: Dict[str, StageData]
stages: dict[str, RetroStageOverrideInfo] | None = None stageValidInfo: Dict[str, StageValidInfo]
stageValidInfo: dict[str, StageValidInfo] zoneToRetro: Dict[str, str]
zoneToRetro: dict[str, str] stages: Union[Dict[str, RetroStageOverrideInfo], None] = None
class Config:
extra = 'allow'

View File

@ -1,49 +1,51 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class Blackboard(BaseModel): class Blackboard(BaseStruct):
key: str key: str
value: float | None = None value: Union[float, None] = None
valueStr: str | None = None valueStr: Union[str, None] = None
class RoguelikeBuff(BaseModel): class RoguelikeBuff(BaseStruct):
key: str key: str
blackboard: list[Blackboard] blackboard: List[Blackboard]
class RoguelikeOuterBuff(BaseModel): class RoguelikeOuterBuff(BaseStruct):
buffId: str | None = None
level: int level: int
name: str name: str
iconId: str iconId: str
description: str description: str
usage: str usage: str
key: str key: str
blackboard: list[Blackboard] blackboard: List[Blackboard]
buffId: Union[str, None] = None
class RoguelikeOutBuffData(BaseModel): class RoguelikeOutBuffData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
buffs: dict[str, RoguelikeOuterBuff] buffs: Dict[str, RoguelikeOuterBuff]
class RoguelikeEndingData(BaseModel): class RoguelikeEndingData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
backgroundId: str backgroundId: str
name: str name: str
description: str description: str
priority: int priority: int
unlockItemId: str | None unlockItemId: Union[str, None]
changeEndingDesc: None changeEndingDesc: None
class RoguelikeModeData(BaseModel): class RoguelikeModeData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
name: str name: str
canUnlockItem: int canUnlockItem: int
scoreFactor: float scoreFactor: float
itemPools: list[str] itemPools: List[str]
difficultyDesc: str difficultyDesc: str
ruleDesc: str ruleDesc: str
sortId: int sortId: int
@ -51,25 +53,25 @@ class RoguelikeModeData(BaseModel):
color: str color: str
class RoguelikeChoiceSceneData(BaseModel): class RoguelikeChoiceSceneData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
title: str title: str
description: str description: str
background: str background: str
class RoguelikeChoiceData(BaseModel): class RoguelikeChoiceData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
title: str title: str
description: str | None description: Union[str, None]
type_: str = Field(alias='type') type_: str = field(name='type')
nextSceneId: str | None nextSceneId: Union[str, None]
icon: str | None icon: Union[str, None]
param: dict[str, object] param: Dict[str, object]
class RoguelikeZoneData(BaseModel): class RoguelikeZoneData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
name: str name: str
description: str description: str
endingDescription: str endingDescription: str
@ -77,106 +79,106 @@ class RoguelikeZoneData(BaseModel):
subIconId: str subIconId: str
class RoguelikeStageData(BaseModel): class RoguelikeStageData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
linkedStageId: str linkedStageId: str
levelId: str levelId: str
code: str code: str
name: str name: str
loadingPicId: str loadingPicId: str
description: str description: str
eliteDesc: str | None eliteDesc: Union[str, None]
isBoss: int isBoss: int
isElite: int isElite: int
difficulty: str difficulty: str
class RoguelikeRelicFeature(BaseModel): class RoguelikeRelicFeature(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
buffs: list[RoguelikeBuff] buffs: List[RoguelikeBuff]
class RoguelikeUpgradeTicketFeature(BaseModel): class RoguelikeUpgradeTicketFeature(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
profession: int profession: int
rarity: int rarity: int
professionList: list[str] professionList: List[str]
rarityList: list[int] rarityList: List[int]
class RoguelikeRecruitTicketFeature(BaseModel): class RoguelikeRecruitTicketFeature(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
profession: int profession: int
rarity: int rarity: int
professionList: list[str] professionList: List[str]
rarityList: list[int] rarityList: List[int]
extraEliteNum: int extraEliteNum: int
extraFreeRarity: list[int | None] extraFreeRarity: List[Union[int, None]]
extraCharIds: list[str] extraCharIds: List[str]
class RelicStableUnlockParam(BaseModel): class RelicStableUnlockParam(BaseStruct):
unlockCondDetail: str unlockCondDetail: str
unlockCnt: int unlockCnt: int
class RoguelikeItemData(BaseModel): class RoguelikeItemData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
name: str name: str
description: str | None description: Union[str, None]
usage: str usage: str
obtainApproach: str obtainApproach: str
iconId: str iconId: str
type_: str = Field(alias='type') type_: str = field(name='type')
rarity: str rarity: str
value: int value: int
sortId: int sortId: int
unlockCond: str | None unlockCond: Union[str, None]
unlockCondDesc: str | None unlockCondDesc: Union[str, None]
unlockCondParams: list[str | None] unlockCondParams: List[Union[str, None]]
stableUnlockCond: RelicStableUnlockParam | None stableUnlockCond: Union[RelicStableUnlockParam, None]
class RoguelikeItemTable(BaseModel): class RoguelikeItemTable(BaseStruct):
items: dict[str, RoguelikeItemData] items: Dict[str, RoguelikeItemData]
recruitTickets: dict[str, RoguelikeRecruitTicketFeature] recruitTickets: Dict[str, RoguelikeRecruitTicketFeature]
upgradeTickets: dict[str, RoguelikeUpgradeTicketFeature] upgradeTickets: Dict[str, RoguelikeUpgradeTicketFeature]
relics: dict[str, RoguelikeRelicFeature] relics: Dict[str, RoguelikeRelicFeature]
class RoguelikeConstTableEventTypeData(BaseModel): class RoguelikeConstTableEventTypeData(BaseStruct):
name: str name: str
description: str description: str
class RoguelikeConstTableCharUpgradeData(BaseModel): class RoguelikeConstTableCharUpgradeData(BaseStruct):
evolvePhase: int evolvePhase: int
skillLevel: int skillLevel: int
skillSpecializeLevel: int skillSpecializeLevel: int
class RoguelikeConstTableRecruitData(BaseModel): class RoguelikeConstTableRecruitData(BaseStruct):
recruitPopulation: int recruitPopulation: int
upgradePopulation: int upgradePopulation: int
class RoguelikeConstTablePlayerLevelData(BaseModel): class RoguelikeConstTablePlayerLevelData(BaseStruct):
exp: int exp: int
populationUp: int populationUp: int
squadCapacityUp: int squadCapacityUp: int
battleCharLimitUp: int battleCharLimitUp: int
class RoguelikeConstTable(BaseModel): class RoguelikeConstTable(BaseStruct):
playerLevelTable: dict[str, RoguelikeConstTablePlayerLevelData] playerLevelTable: Dict[str, RoguelikeConstTablePlayerLevelData]
recruitPopulationTable: dict[str, RoguelikeConstTableRecruitData] recruitPopulationTable: Dict[str, RoguelikeConstTableRecruitData]
charUpgradeTable: dict[str, RoguelikeConstTableCharUpgradeData] charUpgradeTable: Dict[str, RoguelikeConstTableCharUpgradeData]
eventTypeTable: dict[str, RoguelikeConstTableEventTypeData] eventTypeTable: Dict[str, RoguelikeConstTableEventTypeData]
shopDialogs: list[str] shopDialogs: List[str]
shopRelicDialogs: list[str] shopRelicDialogs: List[str]
shopTicketDialogs: list[str] shopTicketDialogs: List[str]
mimicEnemyIds: list[str] mimicEnemyIds: List[str]
clearZoneScores: list[int] clearZoneScores: List[int]
moveToNodeScore: int moveToNodeScore: int
clearNormalBattleScore: int clearNormalBattleScore: int
clearEliteBattleScore: int clearEliteBattleScore: int
@ -185,21 +187,18 @@ class RoguelikeConstTable(BaseModel):
gainCharacterScore: int gainCharacterScore: int
unlockRelicSpecialScore: int unlockRelicSpecialScore: int
squadCapacityMax: int squadCapacityMax: int
bossIds: list[str] bossIds: List[str]
class RoguelikeTable(BaseModel): class RoguelikeTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
constTable: RoguelikeConstTable constTable: RoguelikeConstTable
itemTable: RoguelikeItemTable itemTable: RoguelikeItemTable
stages: dict[str, RoguelikeStageData] stages: Dict[str, RoguelikeStageData]
zones: dict[str, RoguelikeZoneData] zones: Dict[str, RoguelikeZoneData]
choices: dict[str, RoguelikeChoiceData] choices: Dict[str, RoguelikeChoiceData]
choiceScenes: dict[str, RoguelikeChoiceSceneData] choiceScenes: Dict[str, RoguelikeChoiceSceneData]
modes: dict[str, RoguelikeModeData] modes: Dict[str, RoguelikeModeData]
endings: dict[str, RoguelikeEndingData] endings: Dict[str, RoguelikeEndingData]
outBuffs: dict[str, RoguelikeOutBuffData] outBuffs: Dict[str, RoguelikeOutBuffData]
class Config:
extra = 'allow'

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,10 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class SandboxMapConstTable(BaseModel): class SandboxMapConstTable(BaseStruct):
directionNames: list[str] directionNames: List[str]
homeNodeStageId: str homeNodeStageId: str
homeRushStageCode: str homeRushStageCode: str
homeRushStageName: str homeRushStageName: str
@ -11,11 +13,11 @@ class SandboxMapConstTable(BaseModel):
homeBuildModeBGM: str homeBuildModeBGM: str
class SandboxBaseConstTable(BaseModel): class SandboxBaseConstTable(BaseStruct):
cookRegularCostItemId: str cookRegularCostItemId: str
cookRegularCostItemIdCnt: int cookRegularCostItemIdCnt: int
squadTabNameList: list[str] squadTabNameList: List[str]
charRarityColorList: list[str] charRarityColorList: List[str]
sumFoodLimitedCount: int sumFoodLimitedCount: int
sumBuildingLimitedCount: int sumBuildingLimitedCount: int
sumTacticalLimitedCount: int sumTacticalLimitedCount: int
@ -44,69 +46,69 @@ class SandboxBaseConstTable(BaseModel):
settleSucDesc: str settleSucDesc: str
class TipData(BaseModel): class TipData(BaseStruct):
tip: str tip: str
weight: int | float weight: Union[int, float]
category: str category: str
class SandboxFoodProduceData(BaseModel): class SandboxFoodProduceData(BaseStruct):
itemId: str itemId: str
mainMaterialItems: list[str] mainMaterialItems: List[str]
buffId: str buffId: str
unlockDesc: str unlockDesc: str
class SandboxFoodmatBuffData(BaseModel): class SandboxFoodmatBuffData(BaseStruct):
itemId: str itemId: str
buffId: str | None buffId: Union[str, None]
buffDesc: str | None buffDesc: Union[str, None]
matType: str matType: str
sortId: int sortId: int
class SandboxFoodStaminaData(BaseModel): class SandboxFoodStaminaData(BaseStruct):
itemId: str itemId: str
potCnt: int potCnt: int
foodStaminaCnt: int foodStaminaCnt: int
class SandboxBuildProduceData(BaseModel): class SandboxBuildProduceData(BaseStruct):
itemProduceId: str itemProduceId: str
itemId: str itemId: str
itemTypeText: str itemTypeText: str
materialItems: dict[str, int] materialItems: Dict[str, int]
class SandboxBuildGoldRatioData(BaseModel): class SandboxBuildGoldRatioData(BaseStruct):
itemId: str itemId: str
ratio: int ratio: int
effectDesc: str effectDesc: str
class SandboxBuildingItemData(BaseModel): class SandboxBuildingItemData(BaseStruct):
itemId: str itemId: str
itemSubType: str itemSubType: str
itemRarity: int itemRarity: int
class SandboxBuildProduceUnlockData(BaseModel): class SandboxBuildProduceUnlockData(BaseStruct):
itemId: str itemId: str
buildingEffectDesc: str buildingEffectDesc: str
buildingItemDesc: str buildingItemDesc: str
buildingUnlockDesc: str buildingUnlockDesc: str
class SandboxCraftItemData(BaseModel): class SandboxCraftItemData(BaseStruct):
itemId: str itemId: str
sortId: int sortId: int
getFrom: str getFrom: str
npcId: str | None npcId: Union[str, None]
notObtainedDesc: str notObtainedDesc: str
itemType: str itemType: str
class SandboxItemTrapData(BaseModel): class SandboxItemTrapData(BaseStruct):
itemId: str itemId: str
trapId: str trapId: str
trapPhase: int trapPhase: int
@ -115,87 +117,87 @@ class SandboxItemTrapData(BaseModel):
skillLevel: int skillLevel: int
class SandboxDevelopmentData(BaseModel): class SandboxDevelopmentData(BaseStruct):
buffId: str buffId: str
positionX: int positionX: int
positionY: int positionY: int
frontNodeId: str | None frontNodeId: Union[str, None]
nextNodeIds: list[str] | None nextNodeIds: Union[List[str], None]
buffLimitedId: str buffLimitedId: str
tokenCost: int tokenCost: int
canBuffResearch: bool canBuffResearch: bool
buffResearchDesc: str | None buffResearchDesc: Union[str, None]
buffName: str buffName: str
buffIconId: str buffIconId: str
nodeTitle: str nodeTitle: str
buffEffectDesc: str buffEffectDesc: str
class SandboxDevelopmentLimitData(BaseModel): class SandboxDevelopmentLimitData(BaseStruct):
buffLimitedId: str buffLimitedId: str
positionX: int positionX: int
buffCostLimitedCount: int buffCostLimitedCount: int
class SandboxItemToastData(BaseModel): class SandboxItemToastData(BaseStruct):
itemType: str itemType: str
toastDesc: str toastDesc: str
color: str color: str
class SandboxDevelopmentLineSegmentData(BaseModel): class SandboxDevelopmentLineSegmentData(BaseStruct):
fromNodeId: str fromNodeId: str
passingNodeIds: list[str] passingNodeIds: List[str]
fromAxisPosX: int fromAxisPosX: int
fromAxisPosY: int fromAxisPosY: int
toAxisPosX: int toAxisPosX: int
toAxisPosY: int toAxisPosY: int
class SandboxRewardItemConfigData(BaseModel): class SandboxRewardItemConfigData(BaseStruct):
rewardItem: str rewardItem: str
rewardType: str rewardType: str
class SandboxRewardData(BaseModel): class SandboxRewardData(BaseStruct):
rewardList: list[SandboxRewardItemConfigData] rewardList: List[SandboxRewardItemConfigData]
class SandboxRewardCommonConfig(BaseModel): class SandboxRewardCommonConfig(BaseStruct):
dropType: int | None = None
rewardItemId: str rewardItemId: str
rewardItemType: str rewardItemType: str
count: int count: int
dropType: Union[int, None] = None
class SandboxTrapRewardConfigData(SandboxRewardCommonConfig): class SandboxTrapRewardConfigData(SandboxRewardCommonConfig):
dropType: int dropType: int
class SandboxRewardConfigGroupData(BaseModel): class SandboxRewardConfigGroupData(BaseStruct):
stagePreviewRewardDict: dict[str, SandboxRewardData] stagePreviewRewardDict: Dict[str, SandboxRewardData]
stageDefaultPreviewRewardDict: dict[str, SandboxRewardData] stageDefaultPreviewRewardDict: Dict[str, SandboxRewardData]
rushPreviewRewardDict: dict[str, SandboxRewardData] rushPreviewRewardDict: Dict[str, SandboxRewardData]
stageRewardDict: dict[str, SandboxRewardData] stageRewardDict: Dict[str, SandboxRewardData]
rushRewardDict: dict[str, SandboxRewardData] rushRewardDict: Dict[str, SandboxRewardData]
trapRewardDict: dict[str, SandboxRewardCommonConfig] trapRewardDict: Dict[str, SandboxRewardCommonConfig]
enemyRewardDict: dict[str, SandboxRewardCommonConfig] enemyRewardDict: Dict[str, SandboxRewardCommonConfig]
keyWordData: dict[str, str] keyWordData: Dict[str, str]
class SandboxStaminaData(BaseModel): class SandboxStaminaData(BaseStruct):
levelUpperLimit: int levelUpperLimit: int
staminaUpperLimit: int staminaUpperLimit: int
class SandboxNodeTypeData(BaseModel): class SandboxNodeTypeData(BaseStruct):
nodeType: str nodeType: str
name: str name: str
subName: str subName: str
iconId: str iconId: str
class SandboxNodeUpgradeData(BaseModel): class SandboxNodeUpgradeData(BaseStruct):
nodeUpdradeId: str nodeUpdradeId: str
name: str name: str
description: str description: str
@ -206,7 +208,7 @@ class SandboxNodeUpgradeData(BaseModel):
itemRarity: int itemRarity: int
class SandboxWeatherData(BaseModel): class SandboxWeatherData(BaseStruct):
weatherId: str weatherId: str
weatherType: str weatherType: str
weatherLevel: int weatherLevel: int
@ -218,7 +220,7 @@ class SandboxWeatherData(BaseModel):
buffId: str buffId: str
class SandboxStageData(BaseModel): class SandboxStageData(BaseStruct):
stageId: str stageId: str
levelId: str levelId: str
code: str code: str
@ -229,157 +231,158 @@ class SandboxStageData(BaseModel):
powerCost: int powerCost: int
class SandboxEventData(BaseModel): class SandboxEventData(BaseStruct):
eventSceneId: str eventSceneId: str
hasThumbtack: bool hasThumbtack: bool
class SandboxEventSceneData(BaseModel): class SandboxEventSceneData(BaseStruct):
choiceSceneId: str choiceSceneId: str
type_: str = Field(alias='type') type_: str = field(name='type')
title: str title: str
description: str description: str
choices: list[str] choices: List[str]
class SandboxEventChoiceData(BaseModel): class SandboxEventChoiceData(BaseStruct):
choiceId: str choiceId: str
type_: str = Field(alias='type') type_: str = field(name='type')
costAction: int costAction: int
finishScene: bool finishScene: bool
title: str title: str
description: str description: str
class SandboxEventTypeData(BaseModel): class SandboxEventTypeData(BaseStruct):
eventType: str eventType: str
iconId: str iconId: str
class SandboxMissionData(BaseModel): class SandboxMissionData(BaseStruct):
missionId: str missionId: str
desc: str desc: str
effectDesc: str | None effectDesc: Union[str, None]
costAction: int costAction: int
charCnt: int charCnt: int
professionIds: list[str] professionIds: List[str]
profession: int profession: int
costStamina: int costStamina: int
class SandboxUnitData(BaseModel): class SandboxUnitData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
name: str name: str
class SandboxDailyDescTemplateData(BaseModel): class SandboxDailyDescTemplateData(BaseStruct):
type_: str = Field(alias='type') type_: str = field(name='type')
templateDesc: list[str] templateDesc: List[str]
class RushEnemyConfig(BaseModel): class RushEnemyConfig(BaseStruct):
enemyKey: str enemyKey: str
branchId: str branchId: str
count: int count: int
interval: int | float interval: Union[int, float]
class RushEnemyGroupConfig(BaseModel): class RushEnemyGroupConfig(BaseStruct):
enemyGroupKey: str enemyGroupKey: str
weight: int weight: int
enemy: list[RushEnemyConfig] enemy: List[RushEnemyConfig]
dynamicEnemy: list[str] dynamicEnemy: List[str]
class RushEnemyGroupRushEnemyDBRef(BaseModel): class RushEnemyGroupRushEnemyDBRef(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
level: int level: int
class RushEnemyGroup(BaseModel): class RushEnemyGroup(BaseStruct):
rushEnemyGroupConfigs: dict[str, list[RushEnemyGroupConfig]] rushEnemyGroupConfigs: Dict[str, List[RushEnemyGroupConfig]]
rushEnemyDbRef: list[RushEnemyGroupRushEnemyDBRef] rushEnemyDbRef: List[RushEnemyGroupRushEnemyDBRef]
class RuneDataSelector(BaseModel): class RuneDataSelector(BaseStruct):
professionMask: int professionMask: int
buildableMask: int buildableMask: int
charIdFilter: list[str] | None charIdFilter: Union[List[str], None]
enemyIdFilter: list[str] | None enemyIdFilter: Union[List[str], None]
enemyIdExcludeFilter: list[str] | None enemyIdExcludeFilter: Union[List[str], None]
skillIdFilter: list[str] | None skillIdFilter: Union[List[str], None]
tileKeyFilter: list[str] | None tileKeyFilter: Union[List[str], None]
groupTagFilter: list[str] | None groupTagFilter: Union[List[str], None]
filterTagFilter: list[str] | None filterTagFilter: Union[List[str], None]
subProfessionExcludeFilter: Union[List[str], None]
class Blackboard(BaseModel): class Blackboard(BaseStruct):
key: str key: str
value: int | float | None = None value: Union[Union[int, float], None] = None
valueStr: str | None = None valueStr: Union[str, None] = None
class RuneData(BaseModel): class RuneData(BaseStruct):
key: str key: str
selector: RuneDataSelector selector: RuneDataSelector
blackboard: list[Blackboard] blackboard: List[Blackboard]
class RuneTablePackedRuneData(BaseModel): class RuneTablePackedRuneData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
points: int | float points: Union[int, float]
mutexGroupKey: str | None mutexGroupKey: Union[str, None]
description: str description: str
runes: list[RuneData] runes: List[RuneData]
class LegacyInLevelRuneData(BaseModel): class LegacyInLevelRuneData(BaseStruct):
difficultyMask: int difficultyMask: int
key: str key: str
professionMask: int professionMask: int
buildableMask: int buildableMask: int
blackboard: list[Blackboard] blackboard: List[Blackboard]
class SandboxActTable(BaseModel): class SandboxActTable(BaseStruct):
mapConstTable: SandboxMapConstTable mapConstTable: SandboxMapConstTable
baseConstTable: SandboxBaseConstTable baseConstTable: SandboxBaseConstTable
battleLoadingTips: list[TipData] battleLoadingTips: List[TipData]
foodProduceDatas: dict[str, SandboxFoodProduceData] foodProduceDatas: Dict[str, SandboxFoodProduceData]
foodmatDatas: dict[str, SandboxFoodmatBuffData] foodmatDatas: Dict[str, SandboxFoodmatBuffData]
foodmatBuffDatas: dict[str, SandboxFoodmatBuffData] foodmatBuffDatas: Dict[str, SandboxFoodmatBuffData]
foodStaminaDatas: dict[str, SandboxFoodStaminaData] foodStaminaDatas: Dict[str, SandboxFoodStaminaData]
buildProduceDatas: dict[str, SandboxBuildProduceData] buildProduceDatas: Dict[str, SandboxBuildProduceData]
buildGoldRatioDatas: list[SandboxBuildGoldRatioData] buildGoldRatioDatas: List[SandboxBuildGoldRatioData]
buildingItemDatas: dict[str, SandboxBuildingItemData] buildingItemDatas: Dict[str, SandboxBuildingItemData]
buildProduceUnlockDatas: dict[str, SandboxBuildProduceUnlockData] buildProduceUnlockDatas: Dict[str, SandboxBuildProduceUnlockData]
craftItemDatas: dict[str, SandboxCraftItemData] craftItemDatas: Dict[str, SandboxCraftItemData]
itemTrapDatas: dict[str, SandboxItemTrapData] itemTrapDatas: Dict[str, SandboxItemTrapData]
trapDeployLimitDatas: dict[str, int] trapDeployLimitDatas: Dict[str, int]
developmentDatas: dict[str, SandboxDevelopmentData] developmentDatas: Dict[str, SandboxDevelopmentData]
developmentLimitDatas: dict[str, SandboxDevelopmentLimitData] developmentLimitDatas: Dict[str, SandboxDevelopmentLimitData]
itemToastDatas: dict[str, SandboxItemToastData] itemToastDatas: Dict[str, SandboxItemToastData]
developmentLineSegmentDatas: list[SandboxDevelopmentLineSegmentData] developmentLineSegmentDatas: List[SandboxDevelopmentLineSegmentData]
rewardConfigDatas: SandboxRewardConfigGroupData rewardConfigDatas: SandboxRewardConfigGroupData
charStaminaMapping: dict[str, dict[str, list[SandboxStaminaData]]] charStaminaMapping: Dict[str, Dict[str, List[SandboxStaminaData]]]
nodeTypeDatas: dict[str, SandboxNodeTypeData] nodeTypeDatas: Dict[str, SandboxNodeTypeData]
nodeUpgradeDatas: dict[str, SandboxNodeUpgradeData] nodeUpgradeDatas: Dict[str, SandboxNodeUpgradeData]
weatherDatas: dict[str, SandboxWeatherData] weatherDatas: Dict[str, SandboxWeatherData]
stageDatas: dict[str, SandboxStageData] stageDatas: Dict[str, SandboxStageData]
eventDatas: dict[str, SandboxEventData] eventDatas: Dict[str, SandboxEventData]
eventSceneDatas: dict[str, SandboxEventSceneData] eventSceneDatas: Dict[str, SandboxEventSceneData]
eventChoiceDatas: dict[str, SandboxEventChoiceData] eventChoiceDatas: Dict[str, SandboxEventChoiceData]
eventTypeDatas: dict[str, SandboxEventTypeData] eventTypeDatas: Dict[str, SandboxEventTypeData]
missionDatas: dict[str, SandboxMissionData] missionDatas: Dict[str, SandboxMissionData]
unitData: dict[str, SandboxUnitData] unitData: Dict[str, SandboxUnitData]
dailyDescTemplateDatas: dict[str, SandboxDailyDescTemplateData] dailyDescTemplateDatas: Dict[str, SandboxDailyDescTemplateData]
rushAvgDict: dict[str, str] rushAvgDict: Dict[str, str]
rushEnemyGroup: RushEnemyGroup rushEnemyGroup: RushEnemyGroup
runeDatas: dict[str, RuneTablePackedRuneData] runeDatas: Dict[str, RuneTablePackedRuneData]
itemRuneList: dict[str, list[LegacyInLevelRuneData]] itemRuneList: Dict[str, List[LegacyInLevelRuneData]]
class SandboxItemData(BaseModel): class SandboxItemData(BaseStruct):
itemId: str itemId: str
itemType: str itemType: str
itemName: str itemName: str
@ -387,13 +390,13 @@ class SandboxItemData(BaseModel):
itemDesc: str itemDesc: str
itemRarity: int itemRarity: int
sortId: int sortId: int
recommendTypeList: list[str] | None recommendTypeList: Union[List[str], None]
recommendPriority: int recommendPriority: int
obtainApproach: str obtainApproach: str
class SandboxTable(BaseModel): class SandboxTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
sandboxActTables: dict[str, SandboxActTable] sandboxActTables: Dict[str, SandboxActTable]
itemDatas: dict[str, SandboxItemData] itemDatas: Dict[str, SandboxItemData]

View File

@ -1,26 +1,28 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class ShopRecommendData(BaseModel): class ShopRecommendData(BaseStruct):
imgId: str imgId: str
slotIndex: int slotIndex: int
cmd: str cmd: str
param1: str | None param1: Union[str, None]
param2: str | None param2: Union[str, None]
skinId: str | None skinId: Union[str, None]
class ShopRecommendGroup(BaseModel): class ShopRecommendGroup(BaseStruct):
recommendGroup: list[int] recommendGroup: List[int]
dataList: list[ShopRecommendData] dataList: List[ShopRecommendData]
class ShopKeeperWord(BaseModel): class ShopKeeperWord(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
text: str text: str
class ShopRecommendItem(BaseModel): class ShopRecommendItem(BaseStruct):
tagId: str tagId: str
displayType: str displayType: str
tagName: str tagName: str
@ -28,81 +30,81 @@ class ShopRecommendItem(BaseModel):
orderNum: int orderNum: int
startDatetime: int startDatetime: int
endDatetime: int endDatetime: int
groupList: list[ShopRecommendGroup] groupList: List[ShopRecommendGroup]
tagWord: ShopKeeperWord tagWord: ShopKeeperWord
class ShopCreditUnlockItem(BaseModel): class ShopCreditUnlockItem(BaseStruct):
sortId: int sortId: int
unlockNum: int unlockNum: int
charId: str charId: str
class ShopCreditUnlockGroup(BaseModel): class ShopCreditUnlockGroup(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
index: str index: str
startDateTime: int startDateTime: int
charDict: list[ShopCreditUnlockItem] charDict: List[ShopCreditUnlockItem]
class ShopClientDataShopKeeperData(BaseModel): class ShopClientDataShopKeeperData(BaseStruct):
welcomeWords: list[ShopKeeperWord] welcomeWords: List[ShopKeeperWord]
clickWords: list[ShopKeeperWord] clickWords: List[ShopKeeperWord]
class ShopCarouselDataItem(BaseModel): class ShopCarouselDataItem(BaseStruct):
spriteId: str spriteId: str
startTime: int startTime: int
endTime: int endTime: int
cmd: str cmd: str
param1: str | None param1: Union[str, None]
skinId: str skinId: str
furniId: str furniId: str
class ShopCarouselData(BaseModel): class ShopCarouselData(BaseStruct):
items: list[ShopCarouselDataItem] items: List[ShopCarouselDataItem]
class ChooseShopRelation(BaseModel): class ChooseShopRelation(BaseStruct):
goodId: str goodId: str
optionList: list[str] optionList: List[str]
class ShopClientGPData(BaseModel): class ShopClientGPData(BaseStruct):
goodId: str goodId: str
displayName: str displayName: str
condTrigPackageType: str condTrigPackageType: str
class LMTGSShopSchedule(BaseModel): class LMTGSShopSchedule(BaseStruct):
gachaPoolId: str gachaPoolId: str
LMTGSId: str LMTGSId: str
iconColor: str iconColor: str
iconBackColor: str iconBackColor: str
storeTextColor: str | None = None
startTime: int startTime: int
endTime: int endTime: int
storeTextColor: Union[str, None] = None
class LMTGSShopOverlaySchedule(BaseModel): class LMTGSShopOverlaySchedule(BaseStruct):
gachaPoolId1: str gachaPoolId1: str
gachaPoolId2: str gachaPoolId2: str
picId: str picId: str
class ShopClientTable(BaseModel): class ShopClientTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
recommendList: list[ShopRecommendItem] recommendList: List[ShopRecommendItem]
creditUnlockGroup: dict[str, ShopCreditUnlockGroup] creditUnlockGroup: Dict[str, ShopCreditUnlockGroup]
shopKeeperData: ShopClientDataShopKeeperData shopKeeperData: ShopClientDataShopKeeperData
carousels: list[ShopCarouselData] carousels: List[ShopCarouselData]
chooseShopRelations: list[ChooseShopRelation] chooseShopRelations: List[ChooseShopRelation]
shopUnlockDict: dict[str, str] shopUnlockDict: Dict[str, str]
extraQCShopRule: list[str] extraQCShopRule: List[str]
repQCShopRule: list[str] repQCShopRule: List[str]
shopGPDataDict: dict[str, ShopClientGPData] shopGPDataDict: Dict[str, ShopClientGPData]
shopMonthlySubGoodId: str shopMonthlySubGoodId: str
ls: list[LMTGSShopSchedule] ls: List[LMTGSShopSchedule]
os: list[LMTGSShopOverlaySchedule] os: List[LMTGSShopOverlaySchedule]

View File

@ -1,51 +1,50 @@
from typing import Dict, List, Union
from pydantic import BaseModel, Field from ..common import BaseStruct
from msgspec import field
from msgspec import json as msgjson
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class SpData(BaseModel): class SpData(BaseStruct):
spType: int spType: int
levelUpCost: list[ItemBundle] | None levelUpCost: Union[List[ItemBundle], None]
maxChargeTime: int maxChargeTime: int
spCost: int spCost: int
initSp: int initSp: int
increment: int | float increment: Union[int, float]
class Blackboard(BaseModel): class Blackboard(BaseStruct):
key: str key: str
value: int | float | None = None value: Union[Union[int, float], None] = None
valueStr: str | None = None valueStr: Union[str, None] = None
class SkillDataBundleLevelData(BaseModel): class SkillDataBundleLevelData(BaseStruct):
name: str name: str
rangeId: str | None rangeId: Union[str, None]
description: str | None description: Union[str, None]
skillType: int skillType: int
durationType: int durationType: int
spData: SpData spData: SpData
prefabId: str | None prefabId: Union[str, None]
duration: int | float duration: Union[int, float]
blackboard: list[Blackboard] blackboard: List[Blackboard]
class SkillDataBundle(BaseModel): class SkillDataBundle(BaseStruct):
skillId: str skillId: str
iconId: str | None iconId: Union[str, None]
hidden: bool hidden: bool
levels: list[SkillDataBundleLevelData] levels: List[SkillDataBundleLevelData]
class SkillTable(BaseModel): class SkillTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
skills: dict[str, SkillDataBundle] skills: Dict[str, SkillDataBundle]
def __init__(self, data: dict) -> None:
super().__init__(skills=data)

View File

@ -1,89 +1,90 @@
from typing import Dict, List, Union
from pydantic import BaseModel from ..common import BaseStruct
class CharSkinDataTokenSkinInfo(BaseModel): class CharSkinDataTokenSkinInfo(BaseStruct):
tokenId: str tokenId: str
tokenSkinId: str tokenSkinId: str
class CharSkinDataBattleSkin(BaseModel): class CharSkinDataBattleSkin(BaseStruct):
overwritePrefab: bool overwritePrefab: bool
skinOrPrefabId: str | None skinOrPrefabId: Union[str, None]
class CharSkinDataDisplaySkin(BaseModel): class CharSkinDataDisplaySkin(BaseStruct):
skinName: str | None skinName: Union[str, None]
colorList: list[str] | None colorList: Union[List[str], None]
titleList: list[str] | None titleList: Union[List[str], None]
modelName: str | None modelName: Union[str, None]
drawerList: list[str] | None drawerList: Union[List[str], None]
designerList: list[str] | None designerList: Union[List[str], None]
skinGroupId: str | None skinGroupId: Union[str, None]
skinGroupName: str | None skinGroupName: Union[str, None]
skinGroupSortIndex: int skinGroupSortIndex: int
content: str | None content: Union[str, None]
dialog: str | None dialog: Union[str, None]
usage: str | None usage: Union[str, None]
description: str | None description: Union[str, None]
obtainApproach: str | None obtainApproach: Union[str, None]
sortId: int sortId: int
displayTagId: str | None displayTagId: Union[str, None]
getTime: int getTime: int
onYear: int onYear: int
onPeriod: int onPeriod: int
class CharSkinData(BaseModel): class CharSkinData(BaseStruct):
skinId: str skinId: str
charId: str charId: str
tokenSkinMap: list[CharSkinDataTokenSkinInfo] | None tokenSkinMap: Union[List[CharSkinDataTokenSkinInfo], None]
illustId: str | None illustId: Union[str, None]
dynIllustId: str | None dynIllustId: Union[str, None]
avatarId: str avatarId: str
portraitId: str | None portraitId: Union[str, None]
dynPortraitId: str | None dynPortraitId: Union[str, None]
dynEntranceId: str | None dynEntranceId: Union[str, None]
buildingId: str | None buildingId: Union[str, None]
battleSkin: CharSkinDataBattleSkin battleSkin: CharSkinDataBattleSkin
isBuySkin: bool isBuySkin: bool
tmplId: str | None tmplId: Union[str, None]
voiceId: str | None voiceId: Union[str, None]
voiceType: str voiceType: str
displaySkin: CharSkinDataDisplaySkin displaySkin: CharSkinDataDisplaySkin
class CharSkinGroupInfo(BaseModel): class CharSkinGroupInfo(BaseStruct):
skinGroupId: str skinGroupId: str
publishTime: int publishTime: int
class CharSkinKvImgInfo(BaseModel): class CharSkinKvImgInfo(BaseStruct):
kvImgId: str kvImgId: str
linkedSkinGroupId: str linkedSkinGroupId: str
class CharSkinBrandInfo(BaseModel): class CharSkinBrandInfo(BaseStruct):
brandId: str brandId: str
groupList: list[CharSkinGroupInfo] groupList: List[CharSkinGroupInfo]
kvImgIdList: list[CharSkinKvImgInfo] kvImgIdList: List[CharSkinKvImgInfo]
brandName: str brandName: str
brandCapitalName: str brandCapitalName: str
description: str description: str
publishTime: int
sortId: int sortId: int
class SpecialSkinInfo(BaseModel): class SpecialSkinInfo(BaseStruct):
skinId: str skinId: str
startTime: int startTime: int
endTime: int endTime: int
class SkinTable(BaseModel): class SkinTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
charSkins: dict[str, CharSkinData] charSkins: Dict[str, CharSkinData]
buildinEvolveMap: dict[str, dict[str, str]] buildinEvolveMap: Dict[str, Dict[str, str]]
buildinPatchMap: dict[str, dict[str, str]] buildinPatchMap: Dict[str, Dict[str, str]]
brandList: dict[str, CharSkinBrandInfo] brandList: Dict[str, CharSkinBrandInfo]
specialSkinInfoList: list[SpecialSkinInfo] specialSkinInfoList: List[SpecialSkinInfo]

View File

@ -1,80 +1,82 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class StageDataConditionDesc(BaseModel): class StageDataConditionDesc(BaseStruct):
stageId: str stageId: str
completeState: int completeState: int
class StageDataDisplayRewards(BaseModel): class StageDataDisplayRewards(BaseStruct):
type_: str = Field(alias='type') type_: str = field(name='type')
id_: str = Field(alias='id') id_: str = field(name='id')
dropType: int dropType: int
class StageDataDisplayDetailRewards(BaseModel): class StageDataDisplayDetailRewards(BaseStruct):
occPercent: int occPercent: int
type_: str = Field(alias='type') type_: str = field(name='type')
id_: str = Field(alias='id') id_: str = field(name='id')
dropType: int dropType: int
class StageDataStageDropInfo(BaseModel): class StageDataStageDropInfo(BaseStruct):
firstPassRewards: None firstPassRewards: None
firstCompleteRewards: None firstCompleteRewards: None
passRewards: None passRewards: None
completeRewards: None completeRewards: None
displayRewards: list[StageDataDisplayRewards] displayRewards: List[StageDataDisplayRewards]
displayDetailRewards: list[StageDataDisplayDetailRewards] displayDetailRewards: List[StageDataDisplayDetailRewards]
class ExtraCondition(BaseModel): class ExtraCondition(BaseStruct):
index: int index: int
template: str template: str
unlockParam: list[str] unlockParam: List[str]
class ProgressInfo(BaseModel): class ProgressInfo(BaseStruct):
progressType: str progressType: str
descList: dict[str, str] | None descList: Union[Dict[str, str], None]
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class ExtraInfo(BaseModel): class ExtraInfo(BaseStruct):
stageId: str stageId: str
rewards: list[ItemBundle] rewards: List[ItemBundle]
progressInfo: ProgressInfo progressInfo: ProgressInfo
class StageData(BaseModel): class StageData(BaseStruct):
stageType: str stageType: str
difficulty: str difficulty: str
performanceStageFlag: str performanceStageFlag: str
diffGroup: str diffGroup: str
unlockCondition: list[StageDataConditionDesc] unlockCondition: List[StageDataConditionDesc]
stageId: str stageId: str
levelId: str | None levelId: Union[str, None]
zoneId: str zoneId: str
code: str code: str
name: str | None name: Union[str, None]
description: str | None description: Union[str, None]
hardStagedId: str | None hardStagedId: Union[str, None]
dangerLevel: str | None dangerLevel: Union[str, None]
dangerPoint: int | float dangerPoint: Union[int, float]
loadingPicId: str loadingPicId: str
canPractice: bool canPractice: bool
canBattleReplay: bool canBattleReplay: bool
apCost: int apCost: int
apFailReturn: int apFailReturn: int
etItemId: str | None etItemId: Union[str, None]
etCost: int etCost: int
etFailReturn: int etFailReturn: int
etButtonStyle: str | None etButtonStyle: Union[str, None]
apProtectTimes: int apProtectTimes: int
diamondOnceDrop: int diamondOnceDrop: int
practiceTicketCost: int practiceTicketCost: int
@ -86,7 +88,7 @@ class StageData(BaseModel):
passFavor: int passFavor: int
completeFavor: int completeFavor: int
slProgress: int slProgress: int
displayMainItem: str | None displayMainItem: Union[str, None]
hilightMark: bool hilightMark: bool
bossMark: bool bossMark: bool
isPredefined: bool isPredefined: bool
@ -95,65 +97,65 @@ class StageData(BaseModel):
isStoryOnly: bool isStoryOnly: bool
appearanceStyle: int appearanceStyle: int
stageDropInfo: StageDataStageDropInfo stageDropInfo: StageDataStageDropInfo
canUseCharm: bool | None = None startButtonOverrideId: Union[str, None]
canUseTech: bool | None = None
canUseTrapTool: bool | None = None
canUseBattlePerformance: bool | None = None
startButtonOverrideId: str | None
isStagePatch: bool isStagePatch: bool
mainStageId: str | None mainStageId: Union[str, None]
extraCondition: list[ExtraCondition] | None = None canUseCharm: Union[bool, None] = None
extraInfo: list[ExtraInfo] | None = None canUseTech: Union[bool, None] = None
canUseTrapTool: Union[bool, None] = None
canUseBattlePerformance: Union[bool, None] = None
extraCondition: Union[List[ExtraCondition], None] = None
extraInfo: Union[List[ExtraInfo], None] = None
class RuneStageGroupDataRuneStageInst(BaseModel): class RuneStageGroupDataRuneStageInst(BaseStruct):
stageId: str stageId: str
activePackedRuneIds: list[str] activePackedRuneIds: List[str]
class RuneStageGroupData(BaseModel): class RuneStageGroupData(BaseStruct):
groupId: str groupId: str
activeRuneStages: list[RuneStageGroupDataRuneStageInst] activeRuneStages: List[RuneStageGroupDataRuneStageInst]
startTs: int startTs: int
endTs: int endTs: int
class MapThemeData(BaseModel): class MapThemeData(BaseStruct):
themeId: str themeId: str
unitColor: str unitColor: str
buildableColor: str | None buildableColor: Union[str, None]
themeType: str | None themeType: Union[str, None]
trapTintColor: str | None trapTintColor: Union[str, None]
class TileAppendInfo(BaseModel): class TileAppendInfo(BaseStruct):
tileKey: str tileKey: str
name: str name: str
description: str description: str
isFunctional: bool isFunctional: bool
class WeeklyForceOpenTable(BaseModel): class WeeklyForceOpenTable(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
startTime: int startTime: int
endTime: int endTime: int
forceOpenList: list[str] forceOpenList: List[str]
class TimelyDropTimeInfo(BaseModel): class TimelyDropTimeInfo(BaseStruct):
startTs: int startTs: int
endTs: int endTs: int
stagePic: str | None stagePic: Union[str, None]
dropPicId: str | None dropPicId: Union[str, None]
stageUnlock: str stageUnlock: str
entranceDownPicId: str | None entranceDownPicId: Union[str, None]
entranceUpPicId: str | None entranceUpPicId: Union[str, None]
timelyGroupId: str timelyGroupId: str
weeklyPicId: str | None weeklyPicId: Union[str, None]
apSupplyOutOfDateDict: dict[str, int] apSupplyOutOfDateDict: Dict[str, int]
class OverrideDropInfo(BaseModel): class OverrideDropInfo(BaseStruct):
itemId: str itemId: str
startTs: int startTs: int
endTs: int endTs: int
@ -166,19 +168,19 @@ class OverrideDropInfo(BaseModel):
desc3: str desc3: str
dropTag: str dropTag: str
dropTypeDesc: str dropTypeDesc: str
dropInfo: dict[str, StageDataStageDropInfo] dropInfo: Dict[str, StageDataStageDropInfo]
class TimelyDropInfo(BaseModel): class TimelyDropInfo(BaseStruct):
dropInfo: dict[str, StageDataStageDropInfo] dropInfo: Dict[str, StageDataStageDropInfo]
class StageValidInfo(BaseModel): class StageValidInfo(BaseStruct):
startTs: int startTs: int
endTs: int endTs: int
class StageFogInfo(BaseModel): class StageFogInfo(BaseStruct):
lockId: str lockId: str
fogType: str fogType: str
stageId: str stageId: str
@ -188,70 +190,71 @@ class StageFogInfo(BaseModel):
unlockItemType: str unlockItemType: str
unlockItemNum: int unlockItemNum: int
preposedStageId: str preposedStageId: str
preposedLockId: str | None preposedLockId: Union[str, None]
class StageStartCondRequireChar(BaseModel): class StageStartCondRequireChar(BaseStruct):
charId: str charId: str
evolvePhase: int evolvePhase: int
class StageStartCond(BaseModel): class StageStartCond(BaseStruct):
requireChars: list[StageStartCondRequireChar] requireChars: List[StageStartCondRequireChar]
excludeAssists: list[str] excludeAssists: List[str]
isNotPass: bool isNotPass: bool
class StageDiffGroupTable(BaseModel): class StageDiffGroupTable(BaseStruct):
normalId: str normalId: str
toughId: str | None toughId: Union[str, None]
easyId: str easyId: str
class StoryStageShowGroup(BaseModel): class StoryStageShowGroup(BaseStruct):
displayRecordId: str displayRecordId: str
stageId: str stageId: str
accordingStageId: str | None accordingStageId: Union[str, None]
diffGroup: int diffGroup: int
class SpecialBattleFinishStageData(BaseModel): class SpecialBattleFinishStageData(BaseStruct):
stageId: str stageId: str
skipAccomplishPerform: bool skipAccomplishPerform: bool
class RecordRewardServerData(BaseModel): class RecordRewardServerData(BaseStruct):
stageId: str stageId: str
rewards: list[ItemBundle] rewards: List[ItemBundle]
class ApProtectZoneInfoTimeRange(BaseModel): class ApProtectZoneInfoTimeRange(BaseStruct):
startTs: int startTs: int
endTs: int endTs: int
class ApProtectZoneInfo(BaseModel): class ApProtectZoneInfo(BaseStruct):
zoneId: str zoneId: str
timeRanges: list[ApProtectZoneInfoTimeRange] timeRanges: List[ApProtectZoneInfoTimeRange]
class StageTable(BaseModel): class StageTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
stages: dict[str, StageData] stages: Dict[str, StageData]
runeStageGroups: dict[str, RuneStageGroupData] runeStageGroups: Dict[str, RuneStageGroupData]
mapThemes: dict[str, MapThemeData] mapThemes: Dict[str, MapThemeData]
tileInfo: dict[str, TileAppendInfo] tileInfo: Dict[str, TileAppendInfo]
forceOpenTable: dict[str, WeeklyForceOpenTable] forceOpenTable: Dict[str, WeeklyForceOpenTable]
timelyStageDropInfo: dict[str, TimelyDropTimeInfo] timelyStageDropInfo: Dict[str, TimelyDropTimeInfo]
overrideDropInfo: dict[str, OverrideDropInfo] overrideDropInfo: Dict[str, OverrideDropInfo]
timelyTable: dict[str, TimelyDropInfo] timelyTable: Dict[str, TimelyDropInfo]
stageValidInfo: dict[str, StageValidInfo] stageValidInfo: Dict[str, StageValidInfo]
stageFogInfo: dict[str, StageFogInfo] stageFogInfo: Dict[str, StageFogInfo]
stageStartConds: dict[str, StageStartCond] stageStartConds: Dict[str, StageStartCond]
diffGroupTable: dict[str, StageDiffGroupTable] diffGroupTable: Dict[str, StageDiffGroupTable]
storyStageShowGroup: dict[str, dict[str, StoryStageShowGroup]] storyStageShowGroup: Dict[str, Dict[str, StoryStageShowGroup]]
specialBattleFinishStageData: dict[str, SpecialBattleFinishStageData] specialBattleFinishStageData: Dict[str, SpecialBattleFinishStageData]
recordRewardData: dict[str, RecordRewardServerData] | None recordRewardData: Union[Dict[str, RecordRewardServerData], None]
apProtectZoneInfo: dict[str, ApProtectZoneInfo] apProtectZoneInfo: Dict[str, ApProtectZoneInfo]
spNormalStageIdFor4StarList: list[str] actCustomStageDatas: Dict[str, Dict[str, str]]
spNormalStageIdFor4StarList: List[str]

View File

@ -1,18 +1,20 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class MiniActTrialDataRuleData(BaseModel): class MiniActTrialDataRuleData(BaseStruct):
ruleType: str ruleType: str
ruleText: str ruleText: str
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class MiniActTrialDataMiniActTrialRewardData(BaseModel): class MiniActTrialDataMiniActTrialRewardData(BaseStruct):
trialRewardId: str trialRewardId: str
orderId: int orderId: int
actId: str actId: str
@ -20,55 +22,55 @@ class MiniActTrialDataMiniActTrialRewardData(BaseModel):
item: ItemBundle item: ItemBundle
class MiniActTrialDataMiniActTrialSingleData(BaseModel): class MiniActTrialDataMiniActTrialSingleData(BaseStruct):
actId: str actId: str
rewardStartTime: int rewardStartTime: int
themeColor: str themeColor: str
rewardList: list[MiniActTrialDataMiniActTrialRewardData] rewardList: List[MiniActTrialDataMiniActTrialRewardData]
class MiniActTrialData(BaseModel): class MiniActTrialData(BaseStruct):
preShowDays: int preShowDays: int
ruleDataList: list[MiniActTrialDataRuleData] ruleDataList: List[MiniActTrialDataRuleData]
miniActTrialDataMap: dict[str, MiniActTrialDataMiniActTrialSingleData] miniActTrialDataMap: Dict[str, MiniActTrialDataMiniActTrialSingleData]
class ActArchiveResDataPicArchiveResItemData(BaseModel): class ActArchiveResDataPicArchiveResItemData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
desc: str desc: str
assetPath: str assetPath: str
type_: str = Field(alias='type') type_: str = field(name='type')
subType: str | None subType: Union[str, None]
picDescription: str picDescription: str
kvId: str | None kvId: Union[str, None]
class ActArchiveResDataAudioArchiveResItemData(BaseModel): class ActArchiveResDataAudioArchiveResItemData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
desc: str desc: str
name: str name: str
class ActArchiveResDataAvgArchiveResItemData(BaseModel): class ActArchiveResDataAvgArchiveResItemData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
desc: str desc: str
breifPath: str | None breifPath: Union[str, None]
contentPath: str contentPath: str
imagePath: str imagePath: str
rawBrief: str | None rawBrief: Union[str, None]
titleIconPath: str | None titleIconPath: Union[str, None]
class ActArchiveResDataStoryArchiveResItemData(BaseModel): class ActArchiveResDataStoryArchiveResItemData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
desc: str desc: str
date: str | None date: Union[str, None]
pic: str pic: str
text: str text: str
titlePic: str | None titlePic: Union[str, None]
class ActArchiveResDataNewsFormatData(BaseModel): class ActArchiveResDataNewsFormatData(BaseStruct):
typeId: str typeId: str
typeName: str typeName: str
typeLogo: str typeLogo: str
@ -76,13 +78,13 @@ class ActArchiveResDataNewsFormatData(BaseModel):
typeMainSealing: str typeMainSealing: str
class ActArchiveResDataActivityNewsLine(BaseModel): class ActArchiveResDataActivityNewsLine(BaseStruct):
lineType: int lineType: int
content: str content: str
class ActArchiveResDataNewsArchiveResItemData(BaseModel): class ActArchiveResDataNewsArchiveResItemData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
desc: str desc: str
newsType: str newsType: str
newsFormat: ActArchiveResDataNewsFormatData newsFormat: ActArchiveResDataNewsFormatData
@ -91,10 +93,10 @@ class ActArchiveResDataNewsArchiveResItemData(BaseModel):
paramP0: int paramP0: int
paramK: int paramK: int
paramR: float paramR: float
newsLines: list[ActArchiveResDataActivityNewsLine] newsLines: List[ActArchiveResDataActivityNewsLine]
class ActArchiveResDataLandmarkArchiveResItemData(BaseModel): class ActArchiveResDataLandmarkArchiveResItemData(BaseStruct):
landmarkId: str landmarkId: str
landmarkName: str landmarkName: str
landmarkPic: str landmarkPic: str
@ -102,111 +104,111 @@ class ActArchiveResDataLandmarkArchiveResItemData(BaseModel):
landmarkEngName: str landmarkEngName: str
class ActArchiveResDataLogArchiveResItemData(BaseModel): class ActArchiveResDataLogArchiveResItemData(BaseStruct):
logId: str logId: str
logDesc: str logDesc: str
class ActArchiveResData(BaseModel): class ActArchiveResData(BaseStruct):
pics: dict[str, ActArchiveResDataPicArchiveResItemData] pics: Dict[str, ActArchiveResDataPicArchiveResItemData]
audios: dict[str, ActArchiveResDataAudioArchiveResItemData] audios: Dict[str, ActArchiveResDataAudioArchiveResItemData]
avgs: dict[str, ActArchiveResDataAvgArchiveResItemData] avgs: Dict[str, ActArchiveResDataAvgArchiveResItemData]
stories: dict[str, ActArchiveResDataStoryArchiveResItemData] stories: Dict[str, ActArchiveResDataStoryArchiveResItemData]
news: dict[str, ActArchiveResDataNewsArchiveResItemData] news: Dict[str, ActArchiveResDataNewsArchiveResItemData]
landmarks: dict[str, ActArchiveResDataLandmarkArchiveResItemData] landmarks: Dict[str, ActArchiveResDataLandmarkArchiveResItemData]
logs: dict[str, ActArchiveResDataLogArchiveResItemData] logs: Dict[str, ActArchiveResDataLogArchiveResItemData]
class ActArchiveTimelineItemData(BaseModel): class ActArchiveTimelineItemData(BaseStruct):
timelineId: str timelineId: str
timelineSortId: int timelineSortId: int
timelineTitle: str timelineTitle: str
timelineDes: str timelineDes: str
picIdList: list[str] | None = None picIdList: Union[List[str], None] = None
audioIdList: list[str] | None = None audioIdList: Union[List[str], None] = None
avgIdList: list[str] | None = None avgIdList: Union[List[str], None] = None
storyIdList: list[str] | None = None storyIdList: Union[List[str], None] = None
newsIdList: list[str] | None = None newsIdList: Union[List[str], None] = None
class ActArchiveTimelineData(BaseModel): class ActArchiveTimelineData(BaseStruct):
timelineList: list[ActArchiveTimelineItemData] timelineList: List[ActArchiveTimelineItemData]
class ActArchiveMusicItemData(BaseModel): class ActArchiveMusicItemData(BaseStruct):
musicId: str musicId: str
musicSortId: int musicSortId: int
class ActArchiveMusicData(BaseModel): class ActArchiveMusicData(BaseStruct):
musics: dict[str, ActArchiveMusicItemData] musics: Dict[str, ActArchiveMusicItemData]
class ActArchivePicItemData(BaseModel): class ActArchivePicItemData(BaseStruct):
picId: str picId: str
picSortId: int picSortId: int
class ActArchivePicData(BaseModel): class ActArchivePicData(BaseStruct):
pics: dict[str, ActArchivePicItemData] pics: Dict[str, ActArchivePicItemData]
class ActArchiveStoryItemData(BaseModel): class ActArchiveStoryItemData(BaseStruct):
storyId: str storyId: str
storySortId: int storySortId: int
class ActArchiveStoryData(BaseModel): class ActArchiveStoryData(BaseStruct):
stories: dict[str, ActArchiveStoryItemData] stories: Dict[str, ActArchiveStoryItemData]
class ActArchiveAvgItemData(BaseModel): class ActArchiveAvgItemData(BaseStruct):
avgId: str avgId: str
avgSortId: int avgSortId: int
class ActArchiveAvgData(BaseModel): class ActArchiveAvgData(BaseStruct):
avgs: dict[str, ActArchiveAvgItemData] avgs: Dict[str, ActArchiveAvgItemData]
class ActArchiveNewsItemData(BaseModel): class ActArchiveNewsItemData(BaseStruct):
newsId: str newsId: str
newsSortId: int newsSortId: int
class ActArchiveNewsData(BaseModel): class ActArchiveNewsData(BaseStruct):
news: dict[str, ActArchiveNewsItemData] news: Dict[str, ActArchiveNewsItemData]
class ActArchiveLandmarkItemData(BaseModel): class ActArchiveLandmarkItemData(BaseStruct):
landmarkId: str landmarkId: str
landmarkSortId: int landmarkSortId: int
class ActArchiveChapterLogData(BaseModel): class ActArchiveChapterLogData(BaseStruct):
chapterName: str chapterName: str
displayId: str displayId: str
unlockDes: str unlockDes: str
logs: list[str] logs: List[str]
chapterIcon: str chapterIcon: str
class ActArchiveComponentData(BaseModel): class ActArchiveComponentData(BaseStruct):
timeline: ActArchiveTimelineData | None = None
music: ActArchiveMusicData | None = None
pic: ActArchivePicData pic: ActArchivePicData
story: ActArchiveStoryData | None = None timeline: Union[ActArchiveTimelineData, None] = None
avg: ActArchiveAvgData | None = None music: Union[ActArchiveMusicData, None] = None
news: ActArchiveNewsData | None = None story: Union[ActArchiveStoryData, None] = None
landmark: dict[str, ActArchiveLandmarkItemData] | None = None avg: Union[ActArchiveAvgData, None] = None
log: dict[str, ActArchiveChapterLogData] | None = None news: Union[ActArchiveNewsData, None] = None
landmark: Union[Dict[str, ActArchiveLandmarkItemData], None] = None
log: Union[Dict[str, ActArchiveChapterLogData], None] = None
class ActArchiveComponentTable(BaseModel): class ActArchiveComponentTable(BaseStruct):
components: dict[str, ActArchiveComponentData] components: Dict[str, ActArchiveComponentData]
class StoryReviewMetaTable(BaseModel): class StoryReviewMetaTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
miniActTrialData: MiniActTrialData miniActTrialData: MiniActTrialData

View File

@ -1,42 +1,45 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
from msgspec import json as msgjson
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class StoryDataConditionStageCondition(BaseModel): class StoryDataConditionStageCondition(BaseStruct):
stageId: str stageId: str
minState: int minState: int
maxState: int maxState: int
class StoryReviewInfoClientData(BaseModel): class StoryReviewInfoClientData(BaseStruct):
storyReviewType: int storyReviewType: int
storyId: str storyId: str
storyGroup: str storyGroup: str
storySort: int storySort: int
storyDependence: str | None storyDependence: Union[str, None]
storyCanShow: int storyCanShow: int
storyCode: str | None storyCode: Union[str, None]
storyName: str storyName: str
storyPic: str | None storyPic: Union[str, None]
storyInfo: str storyInfo: str
storyCanEnter: int storyCanEnter: int
storyTxt: str storyTxt: str
avgTag: str avgTag: str
unLockType: str unLockType: str
costItemType: str costItemType: str
costItemId: str | None costItemId: Union[str, None]
costItemCount: int costItemCount: int
stageCount: int stageCount: int
requiredStages: list[StoryDataConditionStageCondition] | None requiredStages: Union[List[StoryDataConditionStageCondition], None]
class StoryReviewGroupClientData(BaseModel): class StoryReviewGroupClientData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
name: str name: str
entryType: str entryType: str
actType: str actType: str
@ -46,19 +49,16 @@ class StoryReviewGroupClientData(BaseModel):
endShowTime: int endShowTime: int
remakeStartTime: int remakeStartTime: int
remakeEndTime: int remakeEndTime: int
storyEntryPicId: str | None storyEntryPicId: Union[str, None]
storyPicId: str | None storyPicId: Union[str, None]
storyMainColor: str | None storyMainColor: Union[str, None]
customType: int customType: int
storyCompleteMedalId: str | None storyCompleteMedalId: Union[str, None]
rewards: list[ItemBundle] | None rewards: Union[List[ItemBundle], None]
infoUnlockDatas: list[StoryReviewInfoClientData] infoUnlockDatas: List[StoryReviewInfoClientData]
class StoryReviewTable(BaseModel): class StoryReviewTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
storyreviewtable: dict[str, StoryReviewGroupClientData] storyreviewtable: Dict[str, StoryReviewGroupClientData]
def __init__(self, data: dict) -> None:
super().__init__(storyreviewtable=data)

View File

@ -1,50 +1,50 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
from msgspec import json as msgjson
class StoryDataTrigger(BaseModel): class StoryDataTrigger(BaseStruct):
type_: str = Field(alias='type') type_: str = field(name='type')
key: str | None key: Union[str, None]
useRegex: bool useRegex: bool
class StoryDataConditionStageCondition(BaseModel): class StoryDataConditionStageCondition(BaseStruct):
stageId: str stageId: str
minState: int minState: int
maxState: int maxState: int
class StoryDataCondition(BaseModel): class StoryDataCondition(BaseStruct):
minProgress: int minProgress: int
maxProgress: int maxProgress: int
minPlayerLevel: int minPlayerLevel: int
requiredFlags: list[str] requiredFlags: List[str]
excludedFlags: list[str] excludedFlags: List[str]
requiredStages: list[StoryDataConditionStageCondition] requiredStages: List[StoryDataConditionStageCondition]
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class StoryData(BaseModel): class StoryData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
needCommit: bool needCommit: bool
repeatable: bool repeatable: bool
disabled: bool disabled: bool
videoResource: bool videoResource: bool
trigger: StoryDataTrigger trigger: StoryDataTrigger
condition: StoryDataCondition | None condition: Union[StoryDataCondition, None]
setProgress: int setProgress: int
setFlags: list[str] | None setFlags: Union[List[str], None]
completedRewards: list[ItemBundle] | None completedRewards: Union[List[ItemBundle], None]
class StoryTable(BaseModel): class StoryTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
stories: dict[str, StoryData] stories: Dict[str, StoryData]
def __init__(self, data: dict) -> None:
super().__init__(stories=data)

View File

@ -1,36 +1,38 @@
from pydantic import BaseModel, Field from typing import List, Union
from ..common import BaseStruct
from msgspec import field
class RuneDataSelector(BaseModel): class RuneDataSelector(BaseStruct):
professionMask: int professionMask: int
buildableMask: int buildableMask: int
charIdFilter: list[str] | None charIdFilter: Union[List[str], None]
enemyIdFilter: list[str] | None enemyIdFilter: Union[List[str], None]
skillIdFilter: list[str] | None skillIdFilter: Union[List[str], None]
tileKeyFilter: list[str] | None tileKeyFilter: Union[List[str], None]
class Blackboard(BaseModel): class Blackboard(BaseStruct):
key: str key: str
value: float | None = None value: Union[float, None] = None
valueStr: str | None = None valueStr: Union[str, None] = None
class RuneData(BaseModel): class RuneData(BaseStruct):
key: str key: str
selector: RuneDataSelector selector: RuneDataSelector
blackboard: list[Blackboard] blackboard: List[Blackboard]
class PackedRuneData(BaseModel): class PackedRuneData(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
points: float points: float
mutexGroupKey: str | None mutexGroupKey: Union[str, None]
description: str description: str
runes: list[RuneData] runes: List[RuneData]
class TechBuffTable(BaseModel): class TechBuffTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
runes: list[PackedRuneData] runes: List[PackedRuneData]

View File

@ -1,21 +1,22 @@
from pydantic import BaseModel from typing import List
from ..common import BaseStruct
class TipData(BaseModel): class TipData(BaseStruct):
tip: str tip: str
weight: float weight: float
category: str category: str
class WorldViewTip(BaseModel): class WorldViewTip(BaseStruct):
title: str title: str
description: str description: str
backgroundPicId: str backgroundPicId: str
weight: float weight: float
class TipTable(BaseModel): class TipTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
tips: list[TipData] tips: List[TipData]
worldViewTips: list[WorldViewTip] worldViewTips: List[WorldViewTip]

View File

@ -1,36 +1,37 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
# 部分数据似乎不是float类型,等之后问问dice吧awa from msgspec import field
from msgspec import json as msgjson
class CharacterDataUnlockCondition(BaseModel): class CharacterDataUnlockCondition(BaseStruct):
phase: int phase: int
level: int level: int
class Blackboard(BaseModel): class Blackboard(BaseStruct):
key: str key: str
value: float | None = None value: Union[float, None] = None
valueStr: str | None = None valueStr: Union[str, None] = None
class CharacterDataTraitData(BaseModel): class CharacterDataTraitData(BaseStruct):
unlockCondition: CharacterDataUnlockCondition unlockCondition: CharacterDataUnlockCondition
requiredPotentialRank: int requiredPotentialRank: int
blackboard: list[Blackboard] blackboard: List[Blackboard]
overrideDescripton: str | None overrideDescripton: Union[str, None]
prefabKey: str | None prefabKey: Union[str, None]
rangeId: str | None rangeId: Union[str, None]
class CharacterDataTraitDataBundle(BaseModel): class CharacterDataTraitDataBundle(BaseStruct):
candidates: list[CharacterDataTraitData] candidates: List[CharacterDataTraitData]
class AttributesData(BaseModel): class AttributesData(BaseStruct):
maxHp: int maxHp: int
atk: int atk: int
def_: int = Field(..., alias='def') def_: int = field(name='def')
magicResistance: float magicResistance: float
cost: int cost: int
blockCnt: int blockCnt: int
@ -52,54 +53,54 @@ class AttributesData(BaseModel):
levitateImmune: bool levitateImmune: bool
class CharacterDataAttributesKeyFrame(BaseModel): class CharacterDataAttributesKeyFrame(BaseStruct):
level: int level: int
data: AttributesData data: AttributesData
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(..., alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(..., alias='type') type_: str = field(name='type')
class CharacterDataPhaseData(BaseModel): class CharacterDataPhaseData(BaseStruct):
characterPrefabKey: str characterPrefabKey: str
rangeId: str | None rangeId: Union[str, None]
maxLevel: int maxLevel: int
attributesKeyFrames: list[CharacterDataAttributesKeyFrame] attributesKeyFrames: List[CharacterDataAttributesKeyFrame]
evolveCost: list[ItemBundle] | None evolveCost: Union[List[ItemBundle], None]
class CharacterDataMainSkillSpecializeLevelData(BaseModel): class CharacterDataMainSkillSpecializeLevelData(BaseStruct):
unlockCond: CharacterDataUnlockCondition unlockCond: CharacterDataUnlockCondition
lvlUpTime: int lvlUpTime: int
levelUpCost: list[ItemBundle] | None levelUpCost: Union[List[ItemBundle], None]
class CharacterDataMainSkill(BaseModel): class CharacterDataMainSkill(BaseStruct):
skillId: str | None skillId: Union[str, None]
overridePrefabKey: str | None overridePrefabKey: Union[str, None]
overrideTokenKey: str | None overrideTokenKey: Union[str, None]
levelUpCostCond: list[CharacterDataMainSkillSpecializeLevelData] levelUpCostCond: List[CharacterDataMainSkillSpecializeLevelData]
unlockCond: CharacterDataUnlockCondition unlockCond: CharacterDataUnlockCondition
class TalentData(BaseModel): class TalentData(BaseStruct):
unlockCondition: CharacterDataUnlockCondition unlockCondition: CharacterDataUnlockCondition
requiredPotentialRank: int requiredPotentialRank: int
prefabKey: str prefabKey: str
name: str | None name: Union[str, None]
description: str | None description: Union[str, None]
rangeId: str | None rangeId: Union[str, None]
blackboard: list[Blackboard] blackboard: List[Blackboard]
class CharacterDataTalentDataBundle(BaseModel): class CharacterDataTalentDataBundle(BaseStruct):
candidates: list[TalentData] | None candidates: Union[List[TalentData], None]
class AttributeModifierDataAttributeModifier(BaseModel): class AttributeModifierDataAttributeModifier(BaseStruct):
attributeType: int attributeType: int
formulaItem: int formulaItem: int
value: float value: float
@ -107,70 +108,67 @@ class AttributeModifierDataAttributeModifier(BaseModel):
fetchBaseValueFromSourceEntity: bool fetchBaseValueFromSourceEntity: bool
class AttributeModifierData(BaseModel): class AttributeModifierData(BaseStruct):
abnormalFlags: list[str] | None abnormalFlags: Union[List[str], None]
abnormalImmunes: list[str] | None abnormalImmunes: Union[List[str], None]
abnormalAntis: list[str] | None abnormalAntis: Union[List[str], None]
abnormalCombos: list[str] | None abnormalCombos: Union[List[str], None]
abnormalComboImmunes: list[str] | None abnormalComboImmunes: Union[List[str], None]
attributeModifiers: list[AttributeModifierDataAttributeModifier] attributeModifiers: List[AttributeModifierDataAttributeModifier]
class ExternalBuff(BaseModel): class ExternalBuff(BaseStruct):
attributes: AttributeModifierData attributes: AttributeModifierData
class CharacterDataPotentialRank(BaseModel): class CharacterDataPotentialRank(BaseStruct):
type_: int = Field(..., alias='type') type_: int = field(name='type')
description: str description: str
buff: ExternalBuff | None buff: Union[ExternalBuff, None]
equivalentCost: ItemBundle | None equivalentCost: Union[ItemBundle, None]
class CharacterDataSkillLevelCost(BaseModel): class CharacterDataSkillLevelCost(BaseStruct):
unlockCond: CharacterDataUnlockCondition unlockCond: CharacterDataUnlockCondition
lvlUpCost: list[ItemBundle] | None lvlUpCost: Union[List[ItemBundle], None]
class CharacterData(BaseModel): class TokenCharacterData(BaseStruct):
name: str name: str
description: str | None description: Union[str, None]
canUseGeneralPotentialItem: bool canUseGeneralPotentialItem: bool
canUseActivityPotentialItem: bool canUseActivityPotentialItem: bool
potentialItemId: str | None potentialItemId: Union[str, None]
activityPotentialItemId: str | None activityPotentialItemId: Union[str, None]
nationId: str | None nationId: Union[str, None]
groupId: str | None groupId: Union[str, None]
teamId: str | None teamId: Union[str, None]
displayNumber: str | None displayNumber: Union[str, None]
tokenKey: str | None = None
appellation: str appellation: str
position: str position: str
tagList: list[str] | None tagList: Union[List[str], None]
itemUsage: str | None itemUsage: Union[str, None]
itemDesc: str | None itemDesc: Union[str, None]
itemObtainApproach: str | None itemObtainApproach: Union[str, None]
isNotObtainable: bool isNotObtainable: bool
isSpChar: bool isSpChar: bool
maxPotentialLevel: int maxPotentialLevel: int
rarity: int rarity: int
profession: str profession: str
subProfessionId: str subProfessionId: str
trait: CharacterDataTraitDataBundle | None trait: Union[CharacterDataTraitDataBundle, None]
phases: list[CharacterDataPhaseData] phases: List[CharacterDataPhaseData]
skills: list[CharacterDataMainSkill] | None skills: Union[List[CharacterDataMainSkill], None]
talents: list[CharacterDataTalentDataBundle] | None talents: Union[List[CharacterDataTalentDataBundle], None]
potentialRanks: list[CharacterDataPotentialRank] | None potentialRanks: Union[List[CharacterDataPotentialRank], None]
favorKeyFrames: list[CharacterDataAttributesKeyFrame] | None favorKeyFrames: Union[List[CharacterDataAttributesKeyFrame], None]
allSkillLvlup: list[CharacterDataSkillLevelCost] | None allSkillLvlup: Union[List[CharacterDataSkillLevelCost], None]
minPowerId: str minPowerId: str
maxPowerId: str maxPowerId: str
tokenKey: Union[str, None] = None
class TokenTable(BaseModel): class TokenTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
tokens: dict[str, CharacterData] tokens: Dict[str, TokenCharacterData]
def __init__(self, data: dict) -> None:
super().__init__(tokens=data)

View File

@ -1,25 +1,27 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class UnlockCondition(BaseModel): class UnlockCondition(BaseStruct):
phase: int phase: int
level: int level: int
class TraitDescBundle(BaseModel): class TraitDescBundle(BaseStruct):
unlockCondition: UnlockCondition unlockCondition: UnlockCondition
requiredPotentialRank: int requiredPotentialRank: int
overrideDescription: None overrideDescription: None
additiveDescription: str additiveDescription: str
class UniEquipData(BaseModel): class UniEquipData(BaseStruct):
uniEquipId: str uniEquipId: str
uniEquipName: str uniEquipName: str
uniEquipIcon: str uniEquipIcon: str
@ -33,31 +35,31 @@ class UniEquipData(BaseModel):
showLevel: int showLevel: int
unlockLevel: int unlockLevel: int
unlockFavorPercent: int unlockFavorPercent: int
missionList: list[str] missionList: List[str]
itemCost: list[ItemBundle] | None itemCost: Union[List[ItemBundle], None]
type_: str = Field(..., alias='type') type_: str = field(name='type')
traitDescBundle: list[TraitDescBundle] traitDescBundle: List[TraitDescBundle]
class UniEquipMissionData(BaseModel): class UniEquipMissionData(BaseStruct):
template: str | None template: Union[str, None]
desc: str | None desc: Union[str, None]
paramList: list[str] paramList: List[str]
uniEquipMissionId: str uniEquipMissionId: str
uniEquipMissionSort: int uniEquipMissionSort: int
uniEquipId: str uniEquipId: str
class SubProfessionData(BaseModel): class SubProfessionData(BaseStruct):
subProfessionId: str subProfessionId: str
subProfessionName: str subProfessionName: str
subProfessionCatagory: int subProfessionCatagory: int
class UniequipData(BaseModel): class UniequipData(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
equipDict: dict[str, UniEquipData] equipDict: Dict[str, UniEquipData]
missionList: dict[str, UniEquipMissionData] missionList: Dict[str, UniEquipMissionData]
subProfDict: dict[str, SubProfessionData] subProfDict: Dict[str, SubProfessionData]
charEquip: dict[str, list[str]] charEquip: Dict[str, List[str]]

View File

@ -1,66 +1,68 @@
from pydantic import BaseModel, Field from typing import Dict, List, Union
from ..common import BaseStruct
from msgspec import field
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class UniEquipData(BaseModel): class UniEquipData(BaseStruct):
uniEquipId: str uniEquipId: str
uniEquipName: str uniEquipName: str
uniEquipIcon: str uniEquipIcon: str
uniEquipDesc: str uniEquipDesc: str
typeIcon: str typeIcon: str
typeName1: str typeName1: str
typeName2: str | None typeName2: Union[str, None]
equipShiningColor: str equipShiningColor: str
showEvolvePhase: int showEvolvePhase: int
unlockEvolvePhase: int unlockEvolvePhase: int
charId: str charId: str
tmplId: str | None tmplId: Union[str, None]
showLevel: int showLevel: int
unlockLevel: int unlockLevel: int
unlockFavorPoint: int unlockFavorPoint: int
missionList: list[str] missionList: List[str]
itemCost: dict[str, list[ItemBundle]] | None itemCost: Union[Dict[str, List[ItemBundle]], None]
type_: str = Field(..., alias='type') type_: str = field(name='type')
uniEquipGetTime: int uniEquipGetTime: int
charEquipOrder: int charEquipOrder: int
class UniEquipMissionData(BaseModel): class UniEquipMissionData(BaseStruct):
template: str template: str
desc: str desc: str
paramList: list[str] paramList: List[str]
uniEquipMissionId: str uniEquipMissionId: str
uniEquipMissionSort: int uniEquipMissionSort: int
uniEquipId: str uniEquipId: str
jumpStageId: str | None jumpStageId: Union[str, None]
class SubProfessionData(BaseModel): class SubProfessionData(BaseStruct):
subProfessionId: str subProfessionId: str
subProfessionName: str subProfessionName: str
subProfessionCatagory: int subProfessionCatagory: int
class UniEquipTrack(BaseModel): class UniEquipTrack(BaseStruct):
charId: str charId: str
equipId: str equipId: str
class UniEquipTimeInfo(BaseModel): class UniEquipTimeInfo(BaseStruct):
timeStamp: int timeStamp: int
trackList: list[UniEquipTrack] trackList: List[UniEquipTrack]
class UniEquipTable(BaseModel): class UniEquipTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
equipDict: dict[str, UniEquipData] equipDict: Dict[str, UniEquipData]
missionList: dict[str, UniEquipMissionData] missionList: Dict[str, UniEquipMissionData]
subProfDict: dict[str, SubProfessionData] subProfDict: Dict[str, SubProfessionData]
charEquip: dict[str, list[str]] charEquip: Dict[str, List[str]]
equipTrackDict: list[UniEquipTimeInfo] equipTrackDict: List[UniEquipTimeInfo]

View File

@ -1,34 +1,36 @@
from pydantic import BaseModel, Field from typing import Dict, Union, List
from ..common import BaseStruct
from msgspec import field
class ZoneData(BaseModel): class ZoneData(BaseStruct):
zoneID: str zoneID: str
zoneIndex: int zoneIndex: int
type: str type: str
zoneNameFirst: str | None zoneNameFirst: Union[str, None]
zoneNameSecond: str | None zoneNameSecond: Union[str, None]
zoneNameTitleCurrent: str | None zoneNameTitleCurrent: Union[str, None]
zoneNameTitleUnCurrent: str | None zoneNameTitleUnCurrent: Union[str, None]
zoneNameTitleEx: str | None zoneNameTitleEx: Union[str, None]
zoneNameThird: str | None zoneNameThird: Union[str, None]
lockedText: str | None lockedText: Union[str, None]
canPreview: bool canPreview: bool
class WeeklyZoneData(BaseModel): class WeeklyZoneData(BaseStruct):
daysOfWeek: list[int] daysOfWeek: List[int]
type_: str = Field(..., alias='type') type_: str = field(name='type')
class ZoneValidInfo(BaseModel): class ZoneValidInfo(BaseStruct):
startTs: int startTs: int
endTs: int endTs: int
class MainlineZoneData(BaseModel): class MainlineZoneData(BaseStruct):
zoneId: str zoneId: str
chapterId: str chapterId: str
preposedZoneId: str | None preposedZoneId: Union[str, None]
zoneIndex: int zoneIndex: int
startStageId: str startStageId: str
endStageId: str endStageId: str
@ -39,70 +41,70 @@ class MainlineZoneData(BaseModel):
buttonStyle: str buttonStyle: str
spoilAlert: bool spoilAlert: bool
zoneOpenTime: int zoneOpenTime: int
diffGroup: list[int] diffGroup: List[int]
class ItemBundle(BaseModel): class ItemBundle(BaseStruct):
id_: str = Field(alias='id') id_: str = field(name='id')
count: int count: int
type_: str = Field(alias='type') type_: str = field(name='type')
class RecordRewardInfo(BaseModel): class RecordRewardInfo(BaseStruct):
bindStageId: str bindStageId: str
stageDiff1: int stageDiff1: int
stageDiff: int stageDiff: int
picRes: str | None picRes: Union[str, None]
textPath: str | None textPath: Union[str, None]
textDesc: str | None textDesc: Union[str, None]
recordReward: list[ItemBundle] | None recordReward: Union[List[ItemBundle], None]
class ZoneRecordData(BaseModel): class ZoneRecordData(BaseStruct):
recordId: str recordId: str
zoneId: str zoneId: str
recordTitleName: str recordTitleName: str
preRecordId: str | None preRecordId: Union[str, None]
nodeTitle1: str | None nodeTitle1: Union[str, None]
nodeTitle2: str | None nodeTitle2: Union[str, None]
rewards: list[RecordRewardInfo] rewards: List[RecordRewardInfo]
class ZoneRecordUnlockData(BaseModel): class ZoneRecordUnlockData(BaseStruct):
noteId: str noteId: str
zoneId: str zoneId: str
initialName: str initialName: str
finalName: str | None finalName: Union[str, None]
accordingExposeId: str | None accordingExposeId: Union[str, None]
initialDes: str initialDes: str
finalDes: str | None finalDes: Union[str, None]
remindDes: str | None remindDes: Union[str, None]
class ZoneRecordGroupData(BaseModel): class ZoneRecordGroupData(BaseStruct):
zoneId: str zoneId: str
records: list[ZoneRecordData] records: List[ZoneRecordData]
unlockData: ZoneRecordUnlockData unlockData: ZoneRecordUnlockData
class ZoneRecordMissionData(BaseModel): class ZoneRecordMissionData(BaseStruct):
missionId: str missionId: str
recordStageId: str recordStageId: str
templateDesc: str templateDesc: str
desc: str desc: str
class ZoneMetaData(BaseModel): class ZoneMetaData(BaseStruct):
ZoneRecordMissionData: dict[str, ZoneRecordMissionData] ZoneRecordMissionData: Dict[str, ZoneRecordMissionData]
class ZoneTable(BaseModel): class ZoneTable(BaseStruct):
__version__ = '23-07-27-18-50-06-aeb568' __version__ = '23-07-27-18-50-06-aeb568'
zones: dict[str, ZoneData] zones: Dict[str, ZoneData]
weeklyAdditionInfo: dict[str, WeeklyZoneData] weeklyAdditionInfo: Dict[str, WeeklyZoneData]
zoneValidInfo: dict[str, ZoneValidInfo] zoneValidInfo: Dict[str, ZoneValidInfo]
mainlineAdditionInfo: dict[str, MainlineZoneData] mainlineAdditionInfo: Dict[str, MainlineZoneData]
zoneRecordGroupedData: dict[str, ZoneRecordGroupData] zoneRecordGroupedData: Dict[str, ZoneRecordGroupData]
zoneRecordRewardData: dict[str, list[str]] zoneRecordRewardData: Dict[str, List[str]]
zoneMetaData: ZoneMetaData zoneMetaData: ZoneMetaData

View File

@ -1,3 +1,4 @@
from typing import Dict, List, Union
from msgspec import Struct, field from msgspec import Struct, field
@ -28,9 +29,9 @@ class ArknightsAttendanceCalendar(Struct):
class ArknightsAttendanceCalendarModel(Struct): class ArknightsAttendanceCalendarModel(Struct):
currentTs: str currentTs: str
calendar: list[ArknightsAttendanceCalendar] calendar: List[ArknightsAttendanceCalendar]
records: list[ArknightsAttendanceRecord | None] records: List[Union[ArknightsAttendanceRecord, None]]
resourceInfoMap: dict[str, ArknightsAttendanceAwardResource] resourceInfoMap: Dict[str, ArknightsAttendanceAwardResource]
################ ################
@ -43,7 +44,7 @@ class ArknightsAttendanceAward(Struct):
class ArknightsAttendanceModel(Struct): class ArknightsAttendanceModel(Struct):
ts: str ts: str
awards: list[ArknightsAttendanceAward] awards: List[ArknightsAttendanceAward]
################ ################
# ArknightsAttendance End # ArknightsAttendance End
################ ################
@ -95,7 +96,7 @@ class UserGameStatus(Struct):
charCnt: int charCnt: int
furnitureCnt: int furnitureCnt: int
skinCnt: int skinCnt: int
avatar: UserGameStatusAvatar | None = None avatar: Union[UserGameStatusAvatar, None] = None
class UserMeInfoRts(Struct): class UserMeInfoRts(Struct):
@ -116,7 +117,7 @@ class UserMeInfo(Struct):
avatar: str avatar: str
backgroundCode: int backgroundCode: int
isCreator: bool isCreator: bool
creatorIdentifiers: list[str] creatorIdentifiers: List[str]
status: int status: int
operationStatus: int operationStatus: int
identity: int identity: int
@ -131,7 +132,7 @@ class UserMeInfo(Struct):
class ArknightsUserMeModel(Struct, omit_defaults=True): class ArknightsUserMeModel(Struct, omit_defaults=True):
user: UserMeInfo user: UserMeInfo
userRts: UserMeInfoRts userRts: UserMeInfoRts
userSanctionList: list[str] userSanctionList: List[str]
gameStatus: UserGameStatus gameStatus: UserGameStatus
moderator: UserMeModerator moderator: UserMeModerator
userInfoApply: UserMeInfoApply userInfoApply: UserMeInfoApply
@ -152,7 +153,7 @@ class PlayerManufactureFormulaInfo(Struct):
count: int count: int
weight: int weight: int
costPoint: int costPoint: int
costs: list[str] | None = None costs: Union[List[str], None] = None
class PlayerEquipmentInfo(Struct): class PlayerEquipmentInfo(Struct):
@ -160,8 +161,8 @@ class PlayerEquipmentInfo(Struct):
name: str name: str
typeIcon: str typeIcon: str
shiningColor: str shiningColor: str
desc: str | None = None desc: Union[str, None] = None
typeName1: str | None = None typeName1: Union[str, None] = None
class PlayerCampaignZoneInfo(Struct): class PlayerCampaignZoneInfo(Struct):
@ -189,8 +190,8 @@ class PlayerTowerInfo(Struct):
id_: str = field(name='id') id_: str = field(name='id')
name: str name: str
subName: str subName: str
hasHard: bool | None = None hasHard: Union[bool, None] = None
stageNum: int | None = None stageNum: Union[int, None] = None
class PlayerZoneInfo(Struct): class PlayerZoneInfo(Struct):
@ -219,14 +220,14 @@ class PlayerSkinInfo(Struct):
brandId: str brandId: str
sortId: int sortId: int
displayTagId: str displayTagId: str
name: str | None = None name: Union[str, None] = None
brandName: str | None = None brandName: Union[str, None] = None
brandCapitalName: str | None = None brandCapitalName: Union[str, None] = None
illustId: str | None = None illustId: Union[str, None] = None
dynIllustId: str | None = None dynIllustId: Union[str, None] = None
avatarId: str | None = None avatarId: Union[str, None] = None
portraitId: str | None = None portraitId: Union[str, None] = None
skinGroupId: str | None = None skinGroupId: Union[str, None] = None
class PlayerCharInfo(Struct): class PlayerCharInfo(Struct):
@ -250,14 +251,14 @@ class ActivityZone(Struct):
zoneReplicaId: str zoneReplicaId: str
clearedStage: int clearedStage: int
totalStage: int totalStage: int
stageStatus: list[ActivityZoneStageStatus] | None = None stageStatus: Union[List[ActivityZoneStageStatus], None] = None
class PlayerActivity(Struct): class PlayerActivity(Struct):
actId: str actId: str
actReplicaId: str actReplicaId: str
zones: list[ActivityZone] zones: List[ActivityZone]
type_: str | None = field(name='type', default=None) type_: Union[str, None] = field(name='type', default=None)
class RewoardItem(Struct): class RewoardItem(Struct):
@ -279,12 +280,12 @@ class RogueRecord(Struct):
rogueId: str rogueId: str
relicCnt: int relicCnt: int
bank: BankItem bank: BankItem
mission: RewoardItem | None = None mission: Union[RewoardItem, None] = None
clearTime: int | None = None clearTime: Union[int, None] = None
class PlayerRogue(Struct): class PlayerRogue(Struct):
records: list[RogueRecord] records: List[RogueRecord]
class TowerReward(Struct): class TowerReward(Struct):
@ -296,14 +297,14 @@ class TowerReward(Struct):
class TowerRecord(Struct): class TowerRecord(Struct):
towerId: str towerId: str
best: int best: int
hasHard: bool | None = None hasHard: Union[bool, None] = None
stageNum: int | None = None stageNum: Union[int, None] = None
unlockHard: bool | None = None unlockHard: Union[bool, None] = None
hardBest: int | None = None hardBest: Union[int, None] = None
class PlayerTower(Struct): class PlayerTower(Struct):
records: list[TowerRecord] records: List[TowerRecord]
reward: TowerReward reward: TowerReward
@ -318,7 +319,7 @@ class CampaignRecord(Struct):
class PlayerCampaign(Struct): class PlayerCampaign(Struct):
records: list[CampaignRecord] records: List[CampaignRecord]
reward: CampaignReward reward: CampaignReward
@ -331,8 +332,8 @@ class PlayerRecruit(Struct):
startTs: int startTs: int
finishTs: int finishTs: int
state: int state: int
duration: int | None = None duration: Union[int, None] = None
selectTags: list[RecruitTag] | None = None selectTags: Union[List[RecruitTag], None] = None
class BuildingTrainingTrainee(Struct): class BuildingTrainingTrainee(Struct):
@ -353,7 +354,7 @@ class BuildingClue(Struct):
received: int received: int
dailyReward: bool dailyReward: bool
needReceive: int needReceive: int
board: list[str] board: List[str]
sharing: bool sharing: bool
shareCompleteTime: int shareCompleteTime: int
@ -381,7 +382,7 @@ class BuildingControl(Struct):
slotId: str slotId: str
slotState: int slotState: int
level: int level: int
chars: list[BuildingChar] chars: List[BuildingChar]
class BuildingCorridor(Struct): class BuildingCorridor(Struct):
@ -415,14 +416,14 @@ class BuildingTraining(Struct):
lastUpdateTime: int lastUpdateTime: int
remainSecs: int remainSecs: int
slotState: int slotState: int
trainee: BuildingTrainingTrainee | None trainee: Union[BuildingTrainingTrainee, None]
trainer: BuildingTrainingTrainer | None trainer: Union[BuildingTrainingTrainer, None]
class BuildingHire(Struct): class BuildingHire(Struct):
slotId: str slotId: str
level: int level: int
chars: list[BuildingChar] chars: List[BuildingChar]
state: int state: int
refreshCount: int refreshCount: int
completeWorkTime: int completeWorkTime: int
@ -432,7 +433,7 @@ class BuildingHire(Struct):
class BuildingMeeting(Struct): class BuildingMeeting(Struct):
slotId: str slotId: str
level: int level: int
chars: list[BuildingChar] chars: List[BuildingChar]
clue: BuildingClue clue: BuildingClue
lastUpdateTime: int lastUpdateTime: int
completeWorkTime: int completeWorkTime: int
@ -441,7 +442,7 @@ class BuildingMeeting(Struct):
class BuildingDormitories(Struct): class BuildingDormitories(Struct):
slotId: str slotId: str
level: int level: int
chars: list[BuildingChar] chars: List[BuildingChar]
comfort: int comfort: int
@ -454,7 +455,7 @@ class BuildingStockDelivery(Struct):
class BuildingStock(Struct): class BuildingStock(Struct):
instId: int instId: int
type_: str = field(name='type') type_: str = field(name='type')
delivery: list[BuildingStockDelivery] delivery: List[BuildingStockDelivery]
gain: BuildingStockDelivery gain: BuildingStockDelivery
isViolated: bool isViolated: bool
@ -462,18 +463,18 @@ class BuildingStock(Struct):
class BuildingTradings(Struct): class BuildingTradings(Struct):
slotId: str slotId: str
level: int level: int
chars: list[BuildingChar] chars: List[BuildingChar]
completeWorkTime: int completeWorkTime: int
lastUpdateTime: int lastUpdateTime: int
strategy: str strategy: str
stock: list[BuildingStock] stock: List[BuildingStock]
stockLimit: int stockLimit: int
class BuildingManufactures(Struct): class BuildingManufactures(Struct):
slotId: str slotId: str
level: int level: int
chars: list[BuildingChar] chars: List[BuildingChar]
completeWorkTime: int completeWorkTime: int
lastUpdateTime: int lastUpdateTime: int
formulaId: str formulaId: str
@ -487,7 +488,7 @@ class BuildingManufactures(Struct):
class BuildingPower(Struct): class BuildingPower(Struct):
slotId: str slotId: str
level: int level: int
chars: list[BuildingChar] chars: List[BuildingChar]
class BuildingTiredChar(Struct): class BuildingTiredChar(Struct):
@ -501,19 +502,19 @@ class BuildingTiredChar(Struct):
class PlayerBuilding(Struct): class PlayerBuilding(Struct):
tiredChars: list[BuildingTiredChar] | None tiredChars: Union[List[BuildingTiredChar], None]
powers: list[BuildingPower] | None powers: Union[List[BuildingPower], None]
manufactures: list[BuildingManufactures] | None manufactures: Union[List[BuildingManufactures], None]
tradings: list[BuildingTradings] | None tradings: Union[List[BuildingTradings], None]
dormitories: list[BuildingDormitories] | None dormitories: Union[List[BuildingDormitories], None]
meeting: BuildingMeeting | None meeting: Union[BuildingMeeting, None]
hire: BuildingHire | None hire: Union[BuildingHire, None]
labor: BuildingLabor labor: BuildingLabor
furniture: BuildingFurniture furniture: BuildingFurniture
elevators: list[BuildingElevator] elevators: List[BuildingElevator]
corridors: list[BuildingCorridor] | None corridors: Union[List[BuildingCorridor], None]
control: BuildingControl control: BuildingControl
training: BuildingTraining | None = None training: Union[BuildingTraining, None] = None
class PlayerInfoSkin(Struct): class PlayerInfoSkin(Struct):
@ -538,8 +539,8 @@ class PlayerInfoChar(Struct):
evolvePhase: int evolvePhase: int
potentialRank: int potentialRank: int
mainSkillLvl: int mainSkillLvl: int
skills: list[PlayerInfoCharSkill] | None skills: Union[List[PlayerInfoCharSkill] , None]
equip: list[PlayerInfoCharEquip] | None equip: Union[List[PlayerInfoCharEquip] , None]
favorPercent: int favorPercent: int
defaultSkillId: str defaultSkillId: str
gainTime: int gainTime: int
@ -560,14 +561,14 @@ class PlayerAssistChar(Struct):
skillId: str skillId: str
mainSkillLvl: int mainSkillLvl: int
specializeLevel: int specializeLevel: int
equip: PlayerAssistCharEquip | None equip: Union[PlayerAssistCharEquip, None]
class PlayerMedal(Struct): class PlayerMedal(Struct):
type_: str = field(name='type') type_: str = field(name='type')
template: str template: str
templateMedalList: list[str] templateMedalList: List[str]
customMedalLayout: list[str | None] customMedalLayout: List[Union[str, None]]
total: int total: int
@ -603,7 +604,7 @@ class PlayerStatus(Struct):
charCnt: int charCnt: int
furnitureCnt: int furnitureCnt: int
skinCnt: int skinCnt: int
avatar: PlayerStatusAvatar | None = None avatar: Union[PlayerStatusAvatar, None] = None
class DisplayShowConfig(Struct): class DisplayShowConfig(Struct):
@ -624,32 +625,32 @@ class ArknightsPlayerInfoModel(Struct, omit_defaults=True, gc=False):
currentTs: int currentTs: int
showConfig: DisplayShowConfig showConfig: DisplayShowConfig
status: PlayerStatus status: PlayerStatus
assistChars: list[PlayerAssistChar] assistChars: List[PlayerAssistChar]
chars: list[PlayerInfoChar] chars: List[PlayerInfoChar]
skins: list[PlayerInfoSkin] skins: List[PlayerInfoSkin]
building: PlayerBuilding building: PlayerBuilding
recruit: list[PlayerRecruit] recruit: List[PlayerRecruit]
campaign: PlayerCampaign campaign: PlayerCampaign
tower: PlayerTower tower: PlayerTower
rogue: PlayerRogue rogue: PlayerRogue
routine: PlayerRoutine routine: PlayerRoutine
activity: list[PlayerActivity] activity: List[PlayerActivity]
charInfoMap: dict[str, PlayerCharInfo] charInfoMap: Dict[str, PlayerCharInfo]
skinInfoMap: dict[str, PlayerSkinInfo] skinInfoMap: Dict[str, PlayerSkinInfo]
stageInfoMap: dict[str, PlayerStageInfo] stageInfoMap: Dict[str, PlayerStageInfo]
activityInfoMap: dict[str, PlayerActivityInfo] activityInfoMap: Dict[str, PlayerActivityInfo]
towerInfoMap: dict[str, PlayerTowerInfo] towerInfoMap: Dict[str, PlayerTowerInfo]
rogueInfoMap: dict[str, PlayerRogueInfo] rogueInfoMap: Dict[str, PlayerRogueInfo]
campaignInfoMap: dict[str, PlayerCampaignInfo] campaignInfoMap: Dict[str, PlayerCampaignInfo]
campaignZoneInfoMap: dict[str, PlayerCampaignZoneInfo] campaignZoneInfoMap: Dict[str, PlayerCampaignZoneInfo]
equipmentInfoMap: dict[str, PlayerEquipmentInfo] equipmentInfoMap: Dict[str, PlayerEquipmentInfo]
manufactureFormulaInfoMap: dict[str, PlayerManufactureFormulaInfo] manufactureFormulaInfoMap: Dict[str, PlayerManufactureFormulaInfo]
charAssets: list[str | None] charAssets: List[Union[str, None]]
skinAssets: list[str | None] skinAssets: List[Union[str, None]]
activityBannerList: dict[str, list[PlayerActivityBannerList]] activityBannerList: Dict[str, List[PlayerActivityBannerList]]
medal: PlayerMedal | None = None medal: Union[PlayerMedal, None] = None
zoneInfoMap: dict[str, PlayerZoneInfo] | None = None zoneInfoMap: Union[Dict[str, PlayerZoneInfo], None] = None
medalInfoMap: dict[str, PlayerMedalInfo] | None = None medalInfoMap: Union[Dict[str, PlayerMedalInfo], None] = None
################ ################

View File

@ -1,5 +1,6 @@
import asyncio import asyncio
from pathlib import Path from pathlib import Path
from typing import Dict, List, Tuple, Union
from aiohttp.client import ClientSession from aiohttp.client import ClientSession
from gsuid_core.logger import logger from gsuid_core.logger import logger
@ -15,19 +16,19 @@ with Path.open(
) as f: ) as f:
resource_map = msgjson.decode( resource_map = msgjson.decode(
f.read(), f.read(),
type=dict[str, dict[str, dict[str, dict[str, int | str]]]], type=Dict[str, Dict[str, Dict[str, Dict[str, Union[int, str]]]]],
) )
async def download_all_file_from_cos(): async def download_all_file_from_cos():
async def _download(tasks: list[asyncio.Task]): async def _download(tasks: List[asyncio.Task]):
failed_list.extend( failed_list.extend(
list(filter(lambda x: x is not None, await asyncio.gather(*tasks))) list(filter(lambda x: x is not None, await asyncio.gather(*tasks)))
) )
tasks.clear() tasks.clear()
logger.info('[cos]下载完成!') logger.info('[cos]下载完成!')
failed_list: list[tuple[str, str, str, str]] = [] failed_list: List[Tuple[str, str, str, str]] = []
TASKS = [] TASKS = []
async with ClientSession() as sess: async with ClientSession() as sess:
for res_type in ['resource']: for res_type in ['resource']:

View File

@ -1,4 +1,5 @@
from typing import Union, Tuple
import aiofiles import aiofiles
from aiohttp.client import ClientSession from aiohttp.client import ClientSession
from aiohttp.client_exceptions import ClientConnectorError from aiohttp.client_exceptions import ClientConnectorError
@ -16,7 +17,7 @@ async def download(
res_type: str, res_type: str,
resource_type: str, resource_type: str,
name: str, name: str,
) -> tuple[str, str, str] | None: ) -> Union[Tuple[str, str, str], None]:
""" """
:说明: :说明:
下载URL保存入目录 下载URL保存入目录
@ -43,8 +44,8 @@ async def download_file(
res_type: str, res_type: str,
resource_type: str, resource_type: str,
name: str, name: str,
sess: ClientSession | None = None, sess: Union[ClientSession, None] = None,
) -> tuple[str, str, str] | None: ) -> Union[Tuple[str, str, str], None]:
if sess is None: if sess is None:
sess = ClientSession() sess = ClientSession()
try: try: