迁移到独立的 torappu-excel 包

This commit is contained in:
baiqwerdvd 2025-03-05 18:15:05 +08:00
parent e697284b56
commit 99341bc034
No known key found for this signature in database
GPG Key ID: 103223964DCA2FF3
85 changed files with 460 additions and 11228 deletions

View File

@ -2,8 +2,6 @@ import asyncio
import random
import aiohttp
from msgspec import convert
from gsuid_core.aps import scheduler
from gsuid_core.bot import Bot
from gsuid_core.logger import logger
@ -11,6 +9,7 @@ from gsuid_core.models import Event
from gsuid_core.segment import MessageSegment
from gsuid_core.subscribe import gs_subscribe
from gsuid_core.sv import SV
from msgspec import convert
from ..arknightsuid_config import PREFIX, ArkConfig
from .draw_img import get_ann_img
@ -50,9 +49,7 @@ async def force_ann_(bot: Bot, ev: Event):
@sv_ann.on_command(f"{PREFIX}获取当前Android公告列表")
async def get_ann_list_(bot: Bot, ev: Event):
async with aiohttp.ClientSession() as session:
async with session.get(
"https://ak-webview.hypergryph.com/api/game/bulletinList?target=Android"
) as response:
async with session.get("https://ak-webview.hypergryph.com/api/game/bulletinList?target=Android") as response:
data = await response.json()
data = convert(data.get("data", {}), BulletinTargetData)
@ -85,9 +82,7 @@ async def sub_ann_(bot: Bot, ev: Event):
await bot.send("成功订阅明日方舟公告!")
@sv_ann_sub.on_fullmatch(
(f"{PREFIX}取消订阅公告", f"{PREFIX}取消公告", f"{PREFIX}退订公告")
)
@sv_ann_sub.on_fullmatch((f"{PREFIX}取消订阅公告", f"{PREFIX}取消公告", f"{PREFIX}退订公告"))
async def unsub_ann_(bot: Bot, ev: Event):
if ev.group_id is None:
return await bot.send("请在群聊中取消订阅")

View File

@ -2,13 +2,12 @@ import textwrap
from typing import Any
from bs4 import BeautifulSoup, element
from PIL import Image, ImageDraw
from gsuid_core.logger import logger
from gsuid_core.utils.fonts.fonts import core_font as cf
from gsuid_core.utils.image.convert import convert_img
from gsuid_core.utils.image.image_tools import get_div
from gsuid_core.utils.image.utils import download_pic_to_image
from PIL import Image, ImageDraw
from .model import BulletinData

View File

@ -3,11 +3,10 @@ from pathlib import Path
import aiohttp
import msgspec
from msgspec import convert
from msgspec import json as msgjson
from gsuid_core.data_store import get_res_path
from gsuid_core.logger import logger
from msgspec import convert
from msgspec import json as msgjson
from .model import (
BulletinData,
@ -57,19 +56,13 @@ async def check_bulletin_update() -> dict[str, BulletinData]:
if cur_meta.get("code") == 0:
match target:
case "Android":
android_data = convert(
cur_meta.get("data", {}), BulletinTargetData
)
android_data = convert(cur_meta.get("data", {}), BulletinTargetData)
bulletin_meta.target.Android = android_data
case "Bilibili":
bilibili_data = convert(
cur_meta.get("data", {}), BulletinTargetData
)
bilibili_data = convert(cur_meta.get("data", {}), BulletinTargetData)
bulletin_meta.target.Bilibili = bilibili_data
case "IOS":
ios_data = convert(
cur_meta.get("data", {}), BulletinTargetData
)
ios_data = convert(cur_meta.get("data", {}), BulletinTargetData)
bulletin_meta.target.IOS = ios_data
assert android_data is not None
@ -80,9 +73,7 @@ async def check_bulletin_update() -> dict[str, BulletinData]:
update_set: set[int] = set()
update_list: list[BulletinTargetDataItem] = [
x
for x in update_list
if x.updatedAt not in update_set and not update_set.add(x.updatedAt)
x for x in update_list if x.updatedAt not in update_set and not update_set.add(x.updatedAt)
]
update_list.sort(key=lambda x: x.updatedAt, reverse=True)
@ -112,12 +103,8 @@ async def check_bulletin_update() -> dict[str, BulletinData]:
new_ann[item.cid] = ann
logger.info(f"New bulletin found: {item.cid}:{item.title}")
bulletin_meta.data = dict(
sorted(bulletin_meta.data.items(), key=lambda x: int(x[0]))
)
bulletin_meta.update = dict(
sorted(bulletin_meta.update.items(), key=lambda x: x[1].cid, reverse=False)
)
bulletin_meta.data = dict(sorted(bulletin_meta.data.items(), key=lambda x: int(x[0])))
bulletin_meta.update = dict(sorted(bulletin_meta.update.items(), key=lambda x: x[1].cid, reverse=False))
data = msgjson.decode(msgjson.encode(bulletin_meta))
with Path.open(bulletin_path, mode="w", encoding="UTF-8") as file:

View File

@ -6,7 +6,7 @@ from gsuid_core.logger import logger
from gsuid_core.utils.image.convert import convert_img
from PIL import Image, ImageDraw
from ..arknightsuid_resource.constants import CHARACTER_TABLE
from ..arknightsuid_resource.constants import EXCEL
from ..utils.ark_api import ark_skd_api
from ..utils.database.models import ArknightsBind
from ..utils.fonts.source_han_sans import (
@ -102,9 +102,7 @@ def get_error(img: Image.Image, uid: str, daily_data: int):
async def draw_ap_img(uid: str) -> Image.Image:
# char
char_pic = (
Image.open(TEXT_PATH / "char_1028_texas2_1b.png").resize((1700, 1700)).convert("RGBA")
)
char_pic = Image.open(TEXT_PATH / "char_1028_texas2_1b.png").resize((1700, 1700)).convert("RGBA")
tmp_img = Image.new("RGBA", (based_w, based_h))
tmp_img.paste(char_pic, (-250, 50), char_pic)
@ -291,7 +289,7 @@ async def draw_ap_img(uid: str) -> Image.Image:
# 将remainSecs(剩余秒数) , 转换为几小时几分钟
remain_time = seconds2hours_zhcn(remain_secs)
char_cn_name = CHARACTER_TABLE[training_char].name
char_cn_name = EXCEL.CHARATER_TABLE.chars[training_char].name
blue_bar_bg1_img = blue_bar_bg1.copy()
blue_bar_bg1_draw = ImageDraw.Draw(blue_bar_bg1_img)
blue_bar_bg1_draw.text(

View File

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

View File

@ -1,10 +1,9 @@
from pathlib import Path
from typing import Dict
from gsuid_core.utils.image.convert import convert_img
from PIL import Image, ImageDraw
from ..arknightsuid_resource.constants import SKILL_TABLE
from ..arknightsuid_resource.constants import EXCEL
from ..utils.ark_api import ark_skd_api
from ..utils.fonts.source_han_sans import (
sans_font_26,
@ -97,9 +96,7 @@ async def get_char_snapshot(uid: str, cur_page: int):
avatar_id = status.avatar.id_
try:
try:
avatar_img = Image.open(UI_PLAYER_AVATAR_LIST_PATH / f"{avatar_id}.png").resize(
(235, 235)
)
avatar_img = Image.open(UI_PLAYER_AVATAR_LIST_PATH / f"{avatar_id}.png").resize((235, 235))
except FileNotFoundError:
avatar_img = Image.open(UI_CHAR_AVATAR_PATH / f"{avatar_id}.png").resize((235, 235))
except FileNotFoundError:
@ -170,8 +167,8 @@ async def get_char_snapshot(uid: str, cur_page: int):
def draw_char(
test_char: PlayerInfoChar,
charInfoMap: Dict[str, PlayerCharInfo],
equipmentInfoMap: Dict[str, PlayerEquipmentInfo],
charInfoMap: dict[str, PlayerCharInfo],
equipmentInfoMap: dict[str, PlayerEquipmentInfo],
):
avatar_bg = Image.open(TEXT_PATH / "avatar_bg.png").resize((118, 118))
bar_img: Image.Image = Image.open(TEXT_PATH / "bar.png").convert("RGBA")
@ -179,16 +176,12 @@ def draw_char(
charid = test_char.charId
if charid == "char_1037_amiya3":
charid = "char_1037_amiya3_2"
ui_char_avatar = (
Image.open(UI_CHAR_AVATAR_PATH / f"{charid}.png").resize((90, 90)).convert("RGBA")
)
ui_char_avatar = Image.open(UI_CHAR_AVATAR_PATH / f"{charid}.png").resize((90, 90)).convert("RGBA")
bar_img.paste(avatar_bg, (24, 5), mask=avatar_bg)
bar_img.paste(ui_char_avatar, (38, 21), mask=ui_char_avatar)
potential_rank = test_char.potentialRank
potential_img = Image.open(POTENTIAL_HUB_PATH / f"potential_{potential_rank}.png").resize(
(45, 45)
)
potential_img = Image.open(POTENTIAL_HUB_PATH / f"potential_{potential_rank}.png").resize((45, 45))
bar_img.paste(potential_img, (135, 67), mask=potential_img)
elite_level = test_char.evolvePhase
@ -226,7 +219,7 @@ def draw_char(
if char_skills is not None:
for i, skill in enumerate(char_skills):
skill_id = skill.id_
skill_icon_id = SKILL_TABLE.skills[skill_id].iconId
skill_icon_id = EXCEL.SKILL_TABLE.skills[skill_id].iconId
skill_specialize_level = skill.specializeLevel
if skill_icon_id is None:
skill_icon_id = skill_id
@ -234,9 +227,7 @@ def draw_char(
skill_img = skill_img.resize((70, 70))
if test_char.defaultSkillId == skill_id:
skill_img.paste(skill_selected, (38, -1), mask=skill_selected)
skill_specialize_img = Image.open(
CHAR_COMMON_PATH / f"evolve_small_icon_{skill_specialize_level}.png"
)
skill_specialize_img = Image.open(CHAR_COMMON_PATH / f"evolve_small_icon_{skill_specialize_level}.png")
skill_img.paste(skill_specialize_img, (0, 0), mask=skill_specialize_img)
skill_img = skill_img.resize((60, 60))
bar_img.paste(skill_img, box=(355 + 70 * i, 37), mask=skill_img)
@ -256,9 +247,7 @@ def draw_char(
equip_type_icon = equipmentInfoMap[equip_id.id_].typeIcon
if equip_type_icon == "original":
continue
equip_img = Image.open(
UI_EQUIP_TYPE_DIRECTION_HUB_PATH / f"{equip_type_icon.lower()}.png"
).resize((92, 68))
equip_img = Image.open(UI_EQUIP_TYPE_DIRECTION_HUB_PATH / f"{equip_type_icon.lower()}.png").resize((92, 68))
if test_char.defaultEquipId == equip_id.id_:
bar_img.paste(equip_selected, (626 + 67 * i, 31), mask=equip_selected)
bar_img.paste(equip_img, (616 + 68 * i, 32), mask=equip_img)

View File

@ -1,5 +1,3 @@
from typing import Dict
from gsuid_core.utils.plugins_config.models import (
GSC,
GsBoolConfig,
@ -8,10 +6,8 @@ from gsuid_core.utils.plugins_config.models import (
GsStrConfig,
)
CONIFG_DEFAULT: Dict[str, GSC] = {
"SignTime": GsListStrConfig(
"每晚签到时间设置", "每晚森空岛签到时间设置(时,分)", ["0", "38"]
),
CONIFG_DEFAULT: dict[str, GSC] = {
"SignTime": GsListStrConfig("每晚签到时间设置", "每晚森空岛签到时间设置(时,分)", ["0", "38"]),
"SignReportSimple": GsBoolConfig(
"简洁签到报告",
"开启后可以大大减少每日签到报告字数",
@ -37,7 +33,5 @@ CONIFG_DEFAULT: Dict[str, GSC] = {
"用于设置ArknightsUID前缀的配置",
"ark",
),
"AnnMinuteCheck": GsIntConfig(
"公告推送时间检测单位min", "公告推送时间检测单位min", 1, 60
),
"AnnMinuteCheck": GsIntConfig("公告推送时间检测单位min", "公告推送时间检测单位min", 1, 60),
}

View File

@ -1,5 +1,3 @@
from typing import Optional
from gsuid_core.logger import logger
from ..utils.database.models import ArknightsPush, ArknightsUser
@ -35,7 +33,7 @@ async def set_config_func(
uid: str = "0",
user_id: str = "",
option: str = "0",
query: Optional[bool] = None,
query: bool | None = None,
is_admin: bool = False,
):
# 这里将传入的中文config_name转换为英文status
@ -60,7 +58,7 @@ async def set_config_func(
await ArknightsPush.update_push_data(
uid,
{
f'{PUSH_MAP[config_name.replace("推送", "")]}_push': option,
f"{PUSH_MAP[config_name.replace('推送', '')]}_push": option,
},
)
else:

View File

@ -1,5 +1,4 @@
from pathlib import Path
from typing import List, Tuple
from PIL import Image
@ -12,7 +11,7 @@ back_four = Image.open(IMG_DIR / "back_four.png").convert("RGBA").resize((115, 3
# (140 388)
async def draw_gacha_image(char_get: List[Tuple[str, int]]):
async def draw_gacha_image(char_get: list[tuple[str, int]]):
if len(char_get) != 10:
return
img = GACHA_BG.copy().resize((1170, 580))
@ -43,7 +42,7 @@ async def draw_gacha_image(char_get: List[Tuple[str, int]]):
import asyncio
test: List[Tuple[str, int]] = [
test: list[tuple[str, int]] = [
("char_328_cammou", 4),
("char_473_mberry", 4),
("char_103_angel", 5),

View File

@ -1,7 +1,6 @@
import json
import time
from pathlib import Path
from typing import List
from msgspec import convert
from msgspec import json as msgjson
@ -32,9 +31,7 @@ async def gacha(uid: str):
data = PlayerDataDetail(
user=PlayerData(
gacha=PlayerGacha(
newbee=PlayerGacha.PlayerNewbeeGachaPool(
openFlag=1, cnt=21, poolId="BOOT_0_1_2"
),
newbee=PlayerGacha.PlayerNewbeeGachaPool(openFlag=1, cnt=21, poolId="BOOT_0_1_2"),
normal={},
attain={},
single={},
@ -64,7 +61,7 @@ async def testTenAdvancedGacha(
player_data: PlayerDataDetail,
useTkt: int = 0,
itemId: str = "4003",
) -> List[str]:
) -> list[str]:
now = int(time.time())
newbeeGachaPoolClient = Excel.newbeeGachaPoolClient
gachaPoolClient = Excel.gachaPoolClient

View File

@ -2,7 +2,7 @@ import json
import random
import time
from pathlib import Path
from typing import ClassVar, List, Tuple
from typing import ClassVar
from loguru import logger
from msgspec import convert
@ -33,12 +33,10 @@ class GachaService:
RIT5_UP_CNT_2: ClassVar[int] = 20
RIT6_UP_CNT: ClassVar[int] = 50
forbiddenGachaPool: ClassVar[List[str]] = []
forbiddenGachaPool: ClassVar[list[str]] = []
@classmethod
async def doAdvancedGacha(
cls, poolId: str, ruleType: str, player_data: PlayerDataDetail
) -> PoolWeightItem:
async def doAdvancedGacha(cls, poolId: str, ruleType: str, player_data: PlayerDataDetail) -> PoolWeightItem:
pool = Server.details[poolId]
state = GachaService._tryGetTrackState(poolId, player_data)
@ -85,9 +83,7 @@ class GachaService:
return charHit
@staticmethod
async def handleNormalGacha(
poolId: str, useTkt: int, player_data: PlayerDataDetail
) -> PoolWeightItem:
async def handleNormalGacha(poolId: str, useTkt: int, player_data: PlayerDataDetail) -> PoolWeightItem:
now = time.time()
poolClient = next(p for p in Excel.gachaPoolClient if p.gachaPoolId == poolId)
state = GachaService._tryGetTrackState(poolId, player_data)
@ -115,7 +111,7 @@ class GachaService:
@staticmethod
async def handleTenNormalGacha(
poolId: str, itemId: str, useTkt: int, player_data: PlayerDataDetail
) -> List[PoolWeightItem]:
) -> list[PoolWeightItem]:
now = time.time()
poolClient = next(p for p in Excel.gachaPoolClient if p.gachaPoolId == poolId)
state = GachaService._tryGetTrackState(poolId, player_data)
@ -167,14 +163,10 @@ class GachaService:
# 调试状态下模拟客户端请求时需强制完成`obt/guide/l0-0/1_recruit_adv`
curPool.cnt -= 1
return await GachaService.doAdvancedGacha(
poolId=poolId, ruleType=RuleType.NEWBEE, player_data=player_data
)
return await GachaService.doAdvancedGacha(poolId=poolId, ruleType=RuleType.NEWBEE, player_data=player_data)
@staticmethod
async def handleTenNewbieGacha(
poolId: str, player_data: PlayerDataDetail
) -> List[PoolWeightItem]:
async def handleTenNewbieGacha(poolId: str, player_data: PlayerDataDetail) -> list[PoolWeightItem]:
now = time.time()
poolClient = next(p for p in Excel.newbeeGachaPoolClient if p.gachaPoolId == poolId)
carousel = next(g for g in Excel.carousel if g.poolId == poolId)
@ -195,7 +187,7 @@ class GachaService:
curPool.cnt -= 10
result: List[PoolWeightItem] = []
result: list[PoolWeightItem] = []
for _ in range(10):
obj = await GachaService.doAdvancedGacha(
poolId=poolId,
@ -210,7 +202,7 @@ class GachaService:
poolId: str,
useTkt: int,
player_data: PlayerDataDetail,
) -> Tuple[PoolWeightItem, List]:
) -> tuple[PoolWeightItem, list]:
now = time.time()
poolClient = next(p for p in Excel.gachaPoolClient if p.gachaPoolId == poolId)
state = GachaService._tryGetTrackState(poolId, player_data)
@ -241,7 +233,7 @@ class GachaService:
@staticmethod
async def handleTenLimitedGacha(
poolId: str, itemId: str, useTkt: int, player_data: PlayerDataDetail
) -> Tuple[List[PoolWeightItem], List[List]]:
) -> tuple[list[PoolWeightItem], list[list]]:
now = time.time()
poolClient = next(p for p in Excel.gachaPoolClient if p.gachaPoolId == poolId)
state = GachaService._tryGetTrackState(poolId, player_data)
@ -260,7 +252,7 @@ class GachaService:
## === ↑ ***基础数据校验*** ↑ ===
# 处理 lmtgs -> itemGet
result: List[PoolWeightItem] = []
result: list[PoolWeightItem] = []
for _ in range(10):
obj = await GachaService.doAdvancedGacha(
@ -304,7 +296,7 @@ class GachaService:
poolId: str,
useTkt: int,
player_data: PlayerDataDetail,
) -> List[PoolWeightItem]:
) -> list[PoolWeightItem]:
now = time.time()
poolClient = next(p for p in Excel.gachaPoolClient if p.gachaPoolId == poolId)
state = GachaService._tryGetTrackState(poolId, player_data)
@ -321,7 +313,7 @@ class GachaService:
# useTkt:7|CLASSIC_TKT_GACHA_10 -> useTkt:8|CLASSIC_TKT_GACHA -> useTkt:2|TKT_GACHA_10 -> useTkt:5|TKT_GACHA -> useTkt:0|DIAMOND_SHD -> gacha tkt state error
## === ↑ ***基础数据校验*** ↑ ===
result: List[PoolWeightItem] = []
result: list[PoolWeightItem] = []
for _ in range(10):
obj = await GachaService.doAdvancedGacha(
poolId=poolId,
@ -332,9 +324,7 @@ class GachaService:
return result
@classmethod
async def tryInitGachaRule(
cls, poolClient: GachaPoolClientData, player_data: PlayerDataDetail
) -> None:
async def tryInitGachaRule(cls, poolClient: GachaPoolClientData, player_data: PlayerDataDetail) -> None:
poolId = poolClient.gachaPoolId
if poolClient.gachaRuleType in [RuleType.ATTAIN, RuleType.CLASSIC_ATTAIN]:
await cls._initAttainPoolState(poolId, poolClient, player_data)
@ -351,9 +341,7 @@ class GachaService:
return player_data.track.gacha.pool[poolId]
@staticmethod
async def _initAttainPoolState(
poolId: str, poolClient: GachaPoolClientData, player_data: PlayerDataDetail
) -> None:
async def _initAttainPoolState(poolId: str, poolClient: GachaPoolClientData, player_data: PlayerDataDetail) -> None:
if poolId not in player_data.user.gacha.attain:
attain6Count = (poolClient.dynMeta or {}).get("attainRare6Num", 0)
poolObj = player_data.user.gacha.PlayerAttainGacha(attain6Count=attain6Count)

View File

@ -24,9 +24,7 @@ with cur_path.joinpath("gacha_detail_table.json").open(encoding="UTF-8") as f:
class GachaTrigger:
@classmethod
async def postAdvancedGacha(
cls, poolId: str, charHit: PoolWeightItem, player_data: PlayerDataDetail
) -> None:
async def postAdvancedGacha(cls, poolId: str, charHit: PoolWeightItem, player_data: PlayerDataDetail) -> None:
if poolId not in [p.gachaPoolId for p in Excel.newbeeGachaPoolClient]:
poolClient = next(p for p in Excel.gachaPoolClient if p.gachaPoolId == poolId)
if poolClient.gachaRuleType == RuleType.LINKAGE:
@ -54,9 +52,7 @@ class GachaTrigger:
# return self.track.pool[poolId]
@staticmethod
async def _trigLinkageType(
poolId: str, charHit: PoolWeightItem, player_data: PlayerDataDetail
) -> None:
async def _trigLinkageType(poolId: str, charHit: PoolWeightItem, player_data: PlayerDataDetail) -> None:
pool = Server.details[poolId]
poolClient = next(p for p in Excel.gachaPoolClient if p.gachaPoolId == poolId)
track = player_data.track.gacha.pool[poolId]
@ -108,9 +104,7 @@ class GachaTrigger:
player_data.track.gacha.nonNormal6StarCnt = track.non6StarCnt
@staticmethod
async def _trigAttainType(
poolId: str, charHit: PoolWeightItem, player_data: PlayerDataDetail
) -> None:
async def _trigAttainType(poolId: str, charHit: PoolWeightItem, player_data: PlayerDataDetail) -> None:
pool = Server.details[poolId]
weightPool = await PoolGenerator.build(pool)
attain = player_data.user.gacha.attain[poolId]
@ -127,17 +121,13 @@ class GachaTrigger:
attain.attain6Count -= 1
@staticmethod
async def _trigClassicType(
poolId: str, charHit: PoolWeightItem, player_data: PlayerDataDetail
) -> None:
async def _trigClassicType(poolId: str, charHit: PoolWeightItem, player_data: PlayerDataDetail) -> None:
track = player_data.track.gacha.pool[poolId]
player_data.track.gacha.nonClassic6StarCnt = track.non6StarCnt
charHit.isClassic = True
@staticmethod
async def _trigSingleType(
poolId: str, charHit: PoolWeightItem, player_data: PlayerDataDetail
) -> None:
async def _trigSingleType(poolId: str, charHit: PoolWeightItem, player_data: PlayerDataDetail) -> None:
pool = Server.details[poolId]
single = player_data.user.gacha.single[poolId]
charHit.singleEnsureCnt = 150 if single.singleEnsureCnt < 0 else single.singleEnsureCnt
@ -162,17 +152,13 @@ class GachaTrigger:
charHit.isSingleEnsure = True
@staticmethod
async def _trigFesClassicType(
poolId: str, charHit: PoolWeightItem, player_data: PlayerDataDetail
) -> None:
async def _trigFesClassicType(poolId: str, charHit: PoolWeightItem, player_data: PlayerDataDetail) -> None:
track = player_data.track.gacha.pool[poolId]
player_data.track.gacha.nonClassic6StarCnt = track.non6StarCnt
charHit.isClassic = True
@staticmethod
async def _trigClassicAttainType(
poolId: str, charHit: PoolWeightItem, player_data: PlayerDataDetail
) -> None:
async def _trigClassicAttainType(poolId: str, charHit: PoolWeightItem, player_data: PlayerDataDetail) -> None:
pool = Server.details[poolId]
weightPool = await PoolGenerator.build(pool)
attain = player_data.user.gacha.attain[poolId]

View File

@ -1,7 +1,7 @@
from enum import Enum
# from typing_extensions import TypeAlias
from typing import Any, Dict, List, Union
from typing import Any
from msgspec import Struct, field
@ -29,23 +29,23 @@ class LinkageRuleType(StrEnum):
class GachaPerAvail(Struct):
rarityRank: int
charIdList: List[str]
charIdList: list[str]
totalPercent: float
class GachaAvailChar(Struct):
perAvailList: List[GachaPerAvail]
perAvailList: list[GachaPerAvail]
class GachaPerChar(Struct):
rarityRank: int
charIdList: List[str]
charIdList: list[str]
percent: float
count: int
class GachaUpChar(Struct):
perCharList: List[GachaPerChar]
perCharList: list[GachaPerChar]
class GachaWeightUpChar(Struct):
@ -58,7 +58,7 @@ class GachaObject(Struct):
gachaObject: str
type_: int = field(name="type")
imageType: int
param: Union[str, None]
param: str | None
class GachaGroupObject(Struct):
@ -69,15 +69,15 @@ class GachaGroupObject(Struct):
class GachaDetailInfo(Struct):
availCharInfo: GachaAvailChar
upCharInfo: Union[GachaUpChar, None]
weightUpCharInfoList: Union[List[GachaWeightUpChar], None]
limitedChar: Union[List[str], None]
gachaObjList: List[GachaObject]
gachaObjGroups: Union[List[GachaGroupObject], None]
upCharInfo: GachaUpChar | None
weightUpCharInfoList: list[GachaWeightUpChar] | None
limitedChar: list[str] | None
gachaObjList: list[GachaObject]
gachaObjGroups: list[GachaGroupObject] | None
class GachaDetailTable(Struct):
details: Dict[str, GachaDetailInfo]
details: dict[str, GachaDetailInfo]
class GachaDataLinkageTenGachaTkt(Struct):
@ -118,24 +118,24 @@ class GachaDataRecruitRange(Struct):
class PotentialMaterialConverterConfig(Struct):
items: Dict[str, ItemBundle]
items: dict[str, ItemBundle]
class RecruitPoolRecruitTime(Struct):
timeLength: int
recruitPrice: int
accumRate: Union[float, None] = None
accumRate: float | None = None
class RecruitConstantsData(Struct):
tagPriceList: Dict[str, int]
tagPriceList: dict[str, int]
maxRecruitTime: int
rarityWeights: None = None
recruitTimeFactorList: None = None
class RecruitPool(Struct):
recruitTimeTable: List[RecruitPoolRecruitTime]
recruitTimeTable: list[RecruitPoolRecruitTime]
recruitConstants: RecruitConstantsData
recruitCharacterList: None = None
maskTypeWeightTable: None = None
@ -148,30 +148,30 @@ class NewbeeGachaPoolClientData(Struct):
gachaPoolDetail: str
gachaPrice: int
gachaTimes: int
gachaOffset: Union[str, None] = None
firstOpenDay: Union[int, None] = None
reOpenDay: Union[int, None] = None
gachaOffset: str | None = None
firstOpenDay: int | None = None
reOpenDay: int | None = None
gachaPoolItems: None = None
signUpEarliestTime: Union[int, None] = None
signUpEarliestTime: int | None = None
class GachaPoolClientData(Struct):
CDPrimColor: Union[str, None]
CDSecColor: Union[str, None]
CDPrimColor: str | None
CDSecColor: str | None
endTime: int
gachaIndex: int
gachaPoolDetail: Union[str, None]
gachaPoolDetail: str | None
gachaPoolId: str
gachaPoolName: str
gachaPoolSummary: str
gachaRuleType: str
guarantee5Avail: int
guarantee5Count: int
LMTGSID: Union[str, None]
LMTGSID: str | None
openTime: int
dynMeta: Union[Dict[str, Any], None] = None
linkageParam: Union[Dict[str, Any], None] = None
linkageRuleId: Union[str, None] = None
dynMeta: dict[str, Any] | None = None
linkageParam: dict[str, Any] | None = None
linkageRuleId: str | None = None
class GachaTag(Struct):
@ -190,13 +190,13 @@ class SpecialRecruitPool(Struct):
endDateTime: int
order: int
recruitId: str
recruitTimeTable: List[SpecialRecruitPoolSpecialRecruitCostData]
recruitTimeTable: list[SpecialRecruitPoolSpecialRecruitCostData]
startDateTime: int
tagId: int
tagName: str
CDPrimColor: Union[str, None]
CDSecColor: Union[str, None]
LMTGSID: Union[str, None]
CDPrimColor: str | None
CDSecColor: str | None
LMTGSID: str | None
gachaRuleType: str
@ -208,35 +208,35 @@ class GachaDataFesGachaPoolRelateItem(Struct):
class GachaTable(Struct):
__version__ = "24-03-29-14-33-44-5002d2"
gachaTags: List[GachaTag]
carousel: List[GachaDataCarouselData]
gachaTags: list[GachaTag]
carousel: list[GachaDataCarouselData]
classicPotentialMaterialConverter: PotentialMaterialConverterConfig
dicRecruit6StarHint: Union[Dict[str, str], None]
fesGachaPoolRelateItem: Union[Dict[str, GachaDataFesGachaPoolRelateItem], None]
freeGacha: List[GachaDataFreeLimitGachaData]
gachaPoolClient: List[GachaPoolClientData]
limitTenGachaItem: List[GachaDataLimitTenGachaTkt]
linkageTenGachaItem: List[GachaDataLinkageTenGachaTkt]
newbeeGachaPoolClient: List[NewbeeGachaPoolClientData]
dicRecruit6StarHint: dict[str, str] | None
fesGachaPoolRelateItem: dict[str, GachaDataFesGachaPoolRelateItem] | None
freeGacha: list[GachaDataFreeLimitGachaData]
gachaPoolClient: list[GachaPoolClientData]
limitTenGachaItem: list[GachaDataLimitTenGachaTkt]
linkageTenGachaItem: list[GachaDataLinkageTenGachaTkt]
newbeeGachaPoolClient: list[NewbeeGachaPoolClientData]
potentialMaterialConverter: PotentialMaterialConverterConfig
recruitDetail: str
recruitPool: RecruitPool
recruitRarityTable: Dict[str, GachaDataRecruitRange]
specialRecruitPool: List[SpecialRecruitPool]
specialTagRarityTable: Dict[str, List[int]]
gachaTagMaxValid: Union[int, None] = None
potentialMats: Union[Dict, None] = None
classicPotentialMats: Union[Dict, None] = None
recruitRarityTable: dict[str, GachaDataRecruitRange]
specialRecruitPool: list[SpecialRecruitPool]
specialTagRarityTable: dict[str, list[int]]
gachaTagMaxValid: int | None = None
potentialMats: dict | None = None
classicPotentialMats: dict | None = None
class GachaDetailDataPerAvail(Struct):
rarityRank: int
charIdList: List[str]
charIdList: list[str]
totalPercent: float
class GachaDetailDataGachaAvailChar(Struct):
perAvailList: List[GachaDetailDataPerAvail]
perAvailList: list[GachaDetailDataPerAvail]
class PoolWeightItem(Struct):
@ -245,12 +245,12 @@ class PoolWeightItem(Struct):
type_: str = field(name="type")
rarity: int
isClassic: bool = field(default=False)
beforeNonHitCnt: Union[int, None] = field(default=None)
singleEnsureCnt: Union[int, None] = field(default=None)
isSingleEnsure: Union[bool, None] = field(default=None)
beforeNonHitCnt: int | None = field(default=None)
singleEnsureCnt: int | None = field(default=None)
isSingleEnsure: bool | None = field(default=None)
def bulidLog(self) -> Dict:
m_log: Dict[str, Union[bool, int]] = {}
def bulidLog(self) -> dict:
m_log: dict[str, bool | int] = {}
if self.beforeNonHitCnt is not None:
m_log["beforeNonHitCnt"] = self.beforeNonHitCnt
if self.singleEnsureCnt is not None:
@ -262,10 +262,10 @@ class PoolWeightItem(Struct):
class gachaGroupConfig(Struct):
normalCharCnt: int
weights: List[float] = field(default_factory=list)
pool: List[PoolWeightItem] = field(default_factory=list)
upChars_1: List[str] = field(default_factory=list)
upChars_2: List[str] = field(default_factory=list)
weights: list[float] = field(default_factory=list)
pool: list[PoolWeightItem] = field(default_factory=list)
upChars_1: list[str] = field(default_factory=list)
upChars_2: list[str] = field(default_factory=list)
perUpWeight_1: float = field(default=0.0)
perUpWeight_2: float = field(default=0.0)
totalWeights: float = field(default=1.0)
@ -276,13 +276,13 @@ class GachaPoolInfo(Struct, omit_defaults=False):
totalCnt: int = field(default=0)
non6StarCnt: int = field(default=0)
non5StarCnt: int = field(default=0)
gain5Star: List[str] = field(default_factory=list)
gain6Star: List[str] = field(default_factory=list)
history: List[str] = field(default_factory=list)
gain5Star: list[str] = field(default_factory=list)
gain6Star: list[str] = field(default_factory=list)
history: list[str] = field(default_factory=list)
class GachaTrackModel(Struct, omit_defaults=False):
pool: Dict[str, GachaPoolInfo] = field(default_factory=dict)
pool: dict[str, GachaPoolInfo] = field(default_factory=dict)
nonNormal6StarCnt: int = field(default=0)
nonClassic6StarCnt: int = field(default=0)
@ -317,20 +317,20 @@ class PlayerGacha(Struct):
singleEnsureCnt: int
singleEnsureUse: bool
singleEnsureChar: str
cnt: Union[int, None] = field(default=None)
maxCnt: Union[int, None] = field(default=None)
avail: Union[bool, None] = field(default=None)
cnt: int | None = field(default=None)
maxCnt: int | None = field(default=None)
avail: bool | None = field(default=None)
class PlayerFesClassicGacha(Struct):
upChar: Dict[str, List[str]]
upChar: dict[str, list[str]]
newbee: PlayerNewbeeGachaPool
normal: Dict[str, PlayerGachaPool]
attain: Dict[str, PlayerAttainGacha]
single: Dict[str, PlayerSingleGacha]
fesClassic: Dict[str, PlayerFesClassicGacha]
limit: Dict[str, PlayerFreeLimitGacha]
linkage: Dict[str, Dict[str, PlayerLinkageGacha]]
normal: dict[str, PlayerGachaPool]
attain: dict[str, PlayerAttainGacha]
single: dict[str, PlayerSingleGacha]
fesClassic: dict[str, PlayerFesClassicGacha]
limit: dict[str, PlayerFreeLimitGacha]
linkage: dict[str, dict[str, PlayerLinkageGacha]]
class PlayerTrack(Struct):

View File

@ -1,6 +1,4 @@
from typing import List, Tuple, overload
from typing_extensions import TypeAlias
from typing import TypeAlias, overload
from .models import (
GachaDetailDataGachaAvailChar,
@ -10,8 +8,8 @@ from .models import (
gachaGroupConfig,
)
PoolResultA: TypeAlias = Tuple[List[float], List[PoolWeightItem]]
PoolResultB: TypeAlias = List[List[Tuple[List[float], List[PoolWeightItem]]]]
PoolResultA: TypeAlias = tuple[list[float], list[PoolWeightItem]]
PoolResultB: TypeAlias = list[list[tuple[list[float], list[PoolWeightItem]]]]
class PoolGenerator:
@ -22,9 +20,7 @@ class PoolGenerator:
if not group.charIdList:
continue
for charId in group.charIdList:
weightObj = PoolWeightItem(
id_=charId, count=1, type_="CHAR", rarity=group.rarityRank
)
weightObj = PoolWeightItem(id_=charId, count=1, type_="CHAR", rarity=group.rarityRank)
pool.append(weightObj)
length = len(group.charIdList)
weights.extend([group.totalPercent / length] * length)
@ -36,9 +32,7 @@ class PoolGenerator:
@overload
@classmethod
async def build(
cls, detail: GachaDetailInfo, poolId: str, player_data: PlayerDataDetail
) -> PoolResultB: ...
async def build(cls, detail: GachaDetailInfo, poolId: str, player_data: PlayerDataDetail) -> PoolResultB: ...
@classmethod
async def build(cls, *args) -> PoolResultB: # type: ignore[overload-overlap]
@ -54,9 +48,7 @@ class PoolGenerator:
for group in detail.availCharInfo.perAvailList:
conf = gachaGroupConfig(normalCharCnt=len(group.charIdList))
if info := detail.upCharInfo:
upGroup = next(
(x for x in info.perCharList if x.rarityRank == group.rarityRank), None
)
upGroup = next((x for x in info.perCharList if x.rarityRank == group.rarityRank), None)
if upGroup is not None:
conf.upChars_1 = upGroup.charIdList
conf.perUpWeight_1 = upGroup.percent
@ -68,11 +60,7 @@ class PoolGenerator:
conf.perUpWeight_2 = info[0].weight
conf.normalCharCnt -= len(conf.upChars_2)
rate = conf.perUpWeight_2 // 100
conf.perUpWeight_2 = (
conf.totalWeights
/ (conf.normalCharCnt + len(conf.upChars_2) * rate)
* rate
)
conf.perUpWeight_2 = conf.totalWeights / (conf.normalCharCnt + len(conf.upChars_2) * rate) * rate
conf.totalWeights -= conf.perUpWeight_2 * len(conf.upChars_2)
for charId in group.charIdList:
weightObj = PoolWeightItem(
@ -92,9 +80,7 @@ class PoolGenerator:
return result
@staticmethod
async def _buildFesCustomPool(
detail: GachaDetailInfo, poolId: str, player_data: PlayerDataDetail
) -> PoolResultB:
async def _buildFesCustomPool(detail: GachaDetailInfo, poolId: str, player_data: PlayerDataDetail) -> PoolResultB:
result = [[] for _ in range(6)]
for group in detail.availCharInfo.perAvailList:
conf = gachaGroupConfig(normalCharCnt=len(group.charIdList))

View File

@ -1,5 +1,4 @@
from pathlib import Path
from typing import Dict, Union
import aiofiles
from gsuid_core.help.draw_plugin_help import get_help
@ -18,16 +17,16 @@ TEXT_PATH = Path(__file__).parent / "texture2d"
HELP_DATA = Path(__file__).parent / "Help.json"
async def get_help_data() -> Union[Dict[str, PluginHelp], None]:
async def get_help_data() -> dict[str, PluginHelp] | None:
if HELP_DATA.exists():
async with aiofiles.open(HELP_DATA, "rb") as file:
return msgjson.decode(
await file.read(),
type=Dict[str, PluginHelp],
type=dict[str, PluginHelp],
)
async def get_core_help() -> Union[bytes, str]:
async def get_core_help() -> bytes | str:
help_data = await get_help_data()
if help_data is None:
return "暂未找到帮助数据..."
@ -42,8 +41,6 @@ async def get_core_help() -> Union[bytes, str]:
Image.open(TEXT_PATH / "banner.png"),
Image.open(TEXT_PATH / "button.png"),
source_han_sans_cn_origin,
extra_message=[
f"Client Version:{Arknights_Client_version} " f" Res version: {Arknights_Res_version}"
],
extra_message=[f"Client Version:{Arknights_Client_version} Res version: {Arknights_Res_version}"],
)
return img

View File

@ -1,5 +1,5 @@
from datetime import datetime
from typing import ClassVar, Dict, TypeVar, Union
from typing import ClassVar, TypeVar
import httpx
from gsuid_core.utils.plugins_config.gs_config import core_plugins_config
@ -36,19 +36,19 @@ class SklandLoginError(Exception):
return self.url + " " + self.message
def transUnset(v: Union[T1, UnsetType], d: T2 = None) -> Union[T1, T2]:
def transUnset(v: T1 | UnsetType, d: T2 = None) -> T1 | T2:
return v if not isinstance(v, UnsetType) else d
class SklandLogin:
_HEADER: ClassVar[Dict[str, str]] = {
_HEADER: ClassVar[dict[str, str]] = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36", # noqa: E501
"content-type": "application/json;charset=UTF-8",
"origin": "https://ak.hypergryph.com",
"referer": "https://ak.hypergryph.com",
}
def __init__(self, phone: str, geetest_token: Union[str, None] = None):
def __init__(self, phone: str, geetest_token: str | None = None):
self.phone = phone
self.client = httpx.Client(
headers=self._HEADER,
@ -60,7 +60,7 @@ class SklandLogin:
def send_phone_code(
self,
override_geetest: Union[GeneralGeetestData, None] = None,
override_geetest: GeneralGeetestData | None = None,
):
if override_geetest:
data = GeneralV1SendPhoneCodeRequest(

View File

@ -1,5 +1,3 @@
from typing import Dict, Union
from msgspec import UNSET, Struct, UnsetType, field
@ -12,7 +10,7 @@ class GeneralGeetestData(Struct):
class GeneralV1SendPhoneCodeRequest(Struct):
phone: str
type: int
captcha: Union[GeneralGeetestData, UnsetType] = field(default=UNSET)
captcha: GeneralGeetestData | UnsetType = field(default=UNSET)
class CaptchaItemModel(Struct):
@ -28,9 +26,9 @@ class GeneralV1SendPhoneCodeData(Struct):
class GeneralV1SendPhoneCodeResponse(Struct):
status: int
msg: Union[str, UnsetType] = field(default=UNSET)
type: Union[str, UnsetType] = field(default=UNSET)
data: Union[GeneralV1SendPhoneCodeData, UnsetType] = field(default=UNSET)
msg: str | UnsetType = field(default=UNSET)
type: str | UnsetType = field(default=UNSET)
data: GeneralV1SendPhoneCodeData | UnsetType = field(default=UNSET)
class TokenData(Struct):
@ -44,9 +42,9 @@ class UserAuthV2TokenByPhoneCodeRequest(Struct):
class UserAuthV2TokenByPhoneCodeResponse(Struct):
status: int
msg: Union[str, UnsetType] = field(default=UNSET)
data: Union[TokenData, UnsetType] = field(default=UNSET)
type: Union[str, UnsetType] = field(default=UNSET)
msg: str | UnsetType = field(default=UNSET)
data: TokenData | UnsetType = field(default=UNSET)
type: str | UnsetType = field(default=UNSET)
class AccountInfoHGRequest(Struct):
@ -56,7 +54,7 @@ class AccountInfoHGRequest(Struct):
class AccountInfoHGResponse(Struct):
code: int
msg: str
data: Dict
data: dict
class GeetestData(Struct):
@ -80,19 +78,19 @@ class Oauth2V2GrantRequest(Struct):
class Oauth2V2CodeDataItemResponse(Struct):
hgId: Union[str, UnsetType] = field(default=UNSET)
token: Union[str, UnsetType] = field(default=UNSET)
code: Union[str, UnsetType] = field(default=UNSET)
uid: Union[str, UnsetType] = field(default=UNSET)
delete_commit_ts: Union[int, UnsetType] = field(default=UNSET)
delete_request_ts: Union[int, UnsetType] = field(default=UNSET)
hgId: str | UnsetType = field(default=UNSET)
token: str | UnsetType = field(default=UNSET)
code: str | UnsetType = field(default=UNSET)
uid: str | UnsetType = field(default=UNSET)
delete_commit_ts: int | UnsetType = field(default=UNSET)
delete_request_ts: int | UnsetType = field(default=UNSET)
class Oauth2V2GrantResponse(Struct):
status: int
msg: str
data: Union[Oauth2V2CodeDataItemResponse, UnsetType] = field(default=UNSET)
type: Union[str, UnsetType] = field(default=UNSET)
data: Oauth2V2CodeDataItemResponse | UnsetType = field(default=UNSET)
type: str | UnsetType = field(default=UNSET)
class ZonaiSklandWebUserGenerateCredByCodeRequest(Struct):

View File

@ -1,158 +1,8 @@
import asyncio
import json
import threading
from pathlib import Path
from gsuid_core.logger import logger
from torappu_excel import ExcelTableManager
from ..utils.models.gamedata.BattleEquipTable import BattleEquipTable
from ..utils.models.gamedata.BuildingData import BuildingData
from ..utils.models.gamedata.CampaignTable import CampaignTable
from ..utils.models.gamedata.ChapterTable import ChapterTable
from ..utils.models.gamedata.CharacterTable import CharacterTable
from ..utils.models.gamedata.CharMetaTable import CharMetaTable
from ..utils.models.gamedata.CharmTable import CharmTable
from ..utils.models.gamedata.CharPatchTable import CharPatchTable
from ..utils.models.gamedata.CharwordTable import CharwordTable
from ..utils.models.gamedata.CheckinTable import CheckinTable
from ..utils.models.gamedata.ClimbTowerTable import ClimbTowerTable
from ..utils.models.gamedata.ClueData import ClueData
from ..utils.models.gamedata.CrisisTable import CrisisTable
from ..utils.models.gamedata.CrisisV2Table import CrisisV2Table
from ..utils.models.gamedata.EnemyHandbookTable import EnemyHandbookTable
from ..utils.models.gamedata.FavorTable import FavorTable
from ..utils.models.gamedata.GachaTable import GachaTable
from ..utils.models.gamedata.GamedataConst import GamedataConst
from ..utils.models.gamedata.HandbookInfoTable import HandbookInfoTable
from ..utils.models.gamedata.HandbookTable import HandbookTable
from ..utils.models.gamedata.HandbookTeamTable import HandbookTeamTable
from ..utils.models.gamedata.MedalTable import MedalTable
from ..utils.models.gamedata.MissionTable import MissionTable
from ..utils.models.gamedata.OpenServerTable import OpenServerTable
from ..utils.models.gamedata.PlayerAvatarTable import PlayerAvatarTable
from ..utils.models.gamedata.RangeTable import RangeTable
from ..utils.models.gamedata.ReplicateTable import ReplicateTable
from ..utils.models.gamedata.RetroTable import RetroTable
from ..utils.models.gamedata.RoguelikeTable import RoguelikeTable
from ..utils.models.gamedata.RoguelikeTopicTable import RoguelikeTopicTable
from ..utils.models.gamedata.SandboxTable import SandboxTable
from ..utils.models.gamedata.ShopClientTable import ShopClientTable
from ..utils.models.gamedata.SkillTable import SkillTable
from ..utils.models.gamedata.SkinTable import SkinTable
from ..utils.models.gamedata.StageTable import StageTable
from ..utils.models.gamedata.StoryReviewMetaTable import StoryReviewMetaTable
from ..utils.models.gamedata.StoryReviewTable import StoryReviewTable
from ..utils.models.gamedata.StoryTable import StoryTable
from ..utils.models.gamedata.TechBuffTable import TechBuffTable
from ..utils.models.gamedata.TipTable import TipTable
from ..utils.models.gamedata.TokenTable import TokenTable
from ..utils.models.gamedata.UniequipData import UniequipData
from ..utils.models.gamedata.UniequipTable import UniEquipTable
from ..utils.models.gamedata.ZoneTable import ZoneTable
from ..utils.resource.download_all_resource import download_all_resource
from ..utils.resource.RESOURCE_PATH import GAMEDATA_PATH
EXCEL: ExcelTableManager = ExcelTableManager()
def read_json(file_path: Path, **kwargs) -> dict:
"""
Read a JSON file and return its contents as a dictionary.
"""
try:
with Path.open(file_path, encoding="UTF-8", **kwargs) as file:
return json.load(file)
except (FileNotFoundError, json.JSONDecodeError) as e:
logger.error(f"Error reading JSON file: {e}")
return {}
threading.Thread(target=lambda: asyncio.run(download_all_resource()), daemon=True).start()
# ACTIVITY_TABLE = ActivityTable.convert(read_json(GAMEDATA_PATH / 'activity_table.json'))
# AUDIO_DATA = AudioData.convert(read_json(GAMEDATA_PATH / 'audio_data.json'))
BATTLE_EQUIP_TABLE = BattleEquipTable.convert(
{"equips": read_json(GAMEDATA_PATH / "battle_equip_table.json")}
)
BUILDING_DATA = BuildingData.convert(read_json(GAMEDATA_PATH / "building_data.json"))
CAMPAIGN_TABLE = CampaignTable.convert(read_json(GAMEDATA_PATH / "campaign_table.json"))
CHAPTER_TABLE = ChapterTable.convert(
{"chapters": read_json(GAMEDATA_PATH / "chapter_table.json")}
)
CHARACTER_TABLE = CharacterTable.convert(
{"chars": read_json(GAMEDATA_PATH / "character_table.json")}
)
CHAR_META_TABLE = CharMetaTable.convert(read_json(GAMEDATA_PATH / "char_meta_table.json"))
CHARM_TABLE = CharmTable.convert(read_json(GAMEDATA_PATH / "charm_table.json"))
CHAR_PATH_TABLE = CharPatchTable.convert(read_json(GAMEDATA_PATH / "char_patch_table.json"))
CHARWORD_TABLE = CharwordTable.convert(read_json(GAMEDATA_PATH / "charword_table.json"))
CHECKIN_TABLE = CheckinTable.convert(read_json(GAMEDATA_PATH / "checkin_table.json"))
CLIMB_TOWER_TABLE = ClimbTowerTable.convert(read_json(GAMEDATA_PATH / "climb_tower_table.json"))
CLUE_DATA = ClueData.convert(read_json(GAMEDATA_PATH / "clue_data.json"))
CRISIS_TABLE = CrisisTable.convert(read_json(GAMEDATA_PATH / "crisis_table.json"))
CRISIS_V2_TABLE = CrisisV2Table.convert(read_json(GAMEDATA_PATH / "crisis_v2_table.json"))
# DISPLAY_META_TABLE = DisplayMetaTable.convert(read_json(GAMEDATA_PATH / 'display_meta_table.json'))
ENEMY_HANDBOOK_TABLE = EnemyHandbookTable.convert(
read_json(GAMEDATA_PATH / "enemy_handbook_table.json")
)
FAVOR_TABLE = FavorTable.convert(read_json(GAMEDATA_PATH / "favor_table.json"))
GACHA_TABLE = GachaTable.convert(read_json(GAMEDATA_PATH / "gacha_table.json"))
GAMEDATA_CONST = GamedataConst.convert(read_json(GAMEDATA_PATH / "gamedata_const.json"))
HANDBOOK_INFO_TABLE = HandbookInfoTable.convert(
read_json(GAMEDATA_PATH / "handbook_info_table.json")
)
HANDBOOK_TABLE = HandbookTable.convert(read_json(GAMEDATA_PATH / "handbook_table.json"))
HANDBOOK_TEAM_TABLE = HandbookTeamTable.convert(
{"team": read_json(GAMEDATA_PATH / "handbook_team_table.json")}
)
# ITEM_TABLE = ItemTable.convert(read_json(GAMEDATA_PATH / "item_table.json"))
MEDAL_TABLE = MedalTable.convert(read_json(GAMEDATA_PATH / "medal_table.json"))
MISSION_TABLE = MissionTable.convert(read_json(GAMEDATA_PATH / "mission_table.json"))
OPEN_SERVER_TABLE = OpenServerTable.convert(read_json(GAMEDATA_PATH / "open_server_table.json"))
PLAYER_AVATAR_TABLE = PlayerAvatarTable.convert(
read_json(GAMEDATA_PATH / "player_avatar_table.json")
)
RANGE_TABLE = RangeTable.convert({"range_": read_json(GAMEDATA_PATH / "range_table.json")})
REPLICATE_TABLE = ReplicateTable.convert(
{"replicate": read_json(GAMEDATA_PATH / "replicate_table.json")}
)
RETRO_TABLE = RetroTable.convert(read_json(GAMEDATA_PATH / "retro_table.json"))
ROGUELIKE_TABLE = RoguelikeTable.convert(read_json(GAMEDATA_PATH / "roguelike_table.json"))
ROGUELIKE_TOPIC_TABLE = RoguelikeTopicTable.convert(
read_json(GAMEDATA_PATH / "roguelike_topic_table.json")
)
SANDBOX_TABLE = SandboxTable.convert(read_json(GAMEDATA_PATH / "sandbox_table.json"))
# SANDBOX_PERM_TABLE = SandboxPermTable.convert(
# read_json(GAMEDATA_PATH / "sandbox_perm_table.json")
# )
SHOP_CLIENT_TABLE = ShopClientTable.convert(read_json(GAMEDATA_PATH / "shop_client_table.json"))
SKILL_TABLE = SkillTable.convert(
{"skills": read_json(Path(__file__).parent / "skill_table.json")}
)
SKIN_TABLE = SkinTable.convert(read_json(GAMEDATA_PATH / "skin_table.json"))
STAGE_TABLE = StageTable.convert(read_json(GAMEDATA_PATH / "stage_table.json"))
STORY_REVIEW_META_TABLE = StoryReviewMetaTable.convert(
read_json(GAMEDATA_PATH / "story_review_meta_table.json")
)
STORY_REVIEW_TABLE = StoryReviewTable.convert(
{"storyreviewtable": read_json(GAMEDATA_PATH / "story_review_table.json")}
)
STORY_TABLE = StoryTable.convert({"stories": read_json(GAMEDATA_PATH / "story_table.json")})
TECH_BUFF_TABLE = TechBuffTable.convert(read_json(GAMEDATA_PATH / "tech_buff_table.json"))
TIP_TABLE = TipTable.convert(read_json(GAMEDATA_PATH / "tip_table.json"))
TOKEN_TABLE = TokenTable.convert({"tokens": read_json(GAMEDATA_PATH / "token_table.json")})
UNIEQUIP_DATA = UniequipData.convert(read_json(GAMEDATA_PATH / "uniequip_data.json"))
UNIEQUIP_TABLE = UniEquipTable.convert(read_json(GAMEDATA_PATH / "uniequip_table.json"))
ZONE_TABLE = ZoneTable.convert(read_json(GAMEDATA_PATH / "zone_table.json"))
threading.Thread(target=lambda: asyncio.run(EXCEL.preload_table()), daemon=True).start()

View File

@ -33,9 +33,7 @@ async def get_role_img(uid: str):
# secretary_charId = secretary.charId
secretary_skinId = secretary.skinId.replace("@", "_")
secretary_char_img = (
Image.open(SKINPACK_PATH / f"{secretary_skinId}b.png").resize((768, 768)).convert("RGBA")
)
secretary_char_img = Image.open(SKINPACK_PATH / f"{secretary_skinId}b.png").resize((768, 768)).convert("RGBA")
char_info.paste(secretary_char_img, (0, -20), secretary_char_img)
# 放基础信息

View File

@ -3,8 +3,6 @@ import json
import random
import aiohttp
from msgspec import Struct, convert
from gsuid_core.aps import scheduler
from gsuid_core.bot import Bot
from gsuid_core.data_store import get_res_path
@ -12,6 +10,7 @@ from gsuid_core.logger import logger
from gsuid_core.models import Event
from gsuid_core.subscribe import gs_subscribe
from gsuid_core.sv import SV
from msgspec import Struct, convert
from ..arknightsuid_config import PREFIX
@ -44,9 +43,7 @@ async def check_update() -> UpdateCheckResult:
bool: if the resource version is updated
"""
async with aiohttp.ClientSession() as session:
async with session.get(
"https://ak-conf.hypergryph.com/config/prod/official/Android/version"
) as response:
async with session.get("https://ak-conf.hypergryph.com/config/prod/official/Android/version") as response:
data = json.loads(await response.text())
version = convert(data, VersionModel)
@ -58,19 +55,14 @@ async def check_update() -> UpdateCheckResult:
json.dump(data, f, indent=2)
logger.info("First time checking version")
return UpdateCheckResult(
version=version, old_version=None, client_updated=False, res_updated=False
)
return UpdateCheckResult(version=version, old_version=None, client_updated=False, res_updated=False)
else:
with open(version_path, encoding="utf-8") as f:
base_version_json = json.load(f)
base_version = convert(base_version_json, VersionModel)
if (
version.clientVersion != base_version.clientVersion
or version.resVersion != base_version.resVersion
):
if version.clientVersion != base_version.clientVersion or version.resVersion != base_version.resVersion:
with open(version_path, "w", encoding="utf-8") as f:
json.dump(data, f, indent=2)
@ -92,9 +84,7 @@ async def check_update() -> UpdateCheckResult:
@sv_server_check.on_command("取明日方舟最新版本")
async def get_latest_version(bot: Bot, ev: Event):
result = await check_update()
await bot.send(
f"clientVersion: {result.version.clientVersion}\nresVersion: {result.version.resVersion}"
)
await bot.send(f"clientVersion: {result.version.clientVersion}\nresVersion: {result.version.resVersion}")
@sv_server_check_sub.on_fullmatch(f"{PREFIX}订阅版本更新")

View File

@ -60,9 +60,7 @@ async def send_daily_sign():
try:
for bot_id in gss.active_bot:
for single in private_msg_list[qid]:
await gss.active_bot[bot_id].target_send(
single["msg"], "direct", qid, single["bot_id"], "", ""
)
await gss.active_bot[bot_id].target_send(single["msg"], "direct", qid, single["bot_id"], "", "")
except Exception as e:
logger.warning(f"[ARK每日全部签到] QQ {qid} 私聊推送失败!错误信息:{e}")
await asyncio.sleep(0.5)

View File

@ -1,8 +1,8 @@
import asyncio
import random
from collections.abc import Sequence
from copy import deepcopy
from datetime import datetime
from typing import Sequence
from gsuid_core.gss import gss
from gsuid_core.logger import logger

View File

@ -26,9 +26,7 @@ ark_skd_cred_add = SV("森空岛cred绑定")
# await bot.send(uid_list)
@sv_user_info.on_command(
(f"{PREFIX}绑定uid", f"{PREFIX}切换uid", f"{PREFIX}删除uid", f"{PREFIX}解绑uid")
)
@sv_user_info.on_command((f"{PREFIX}绑定uid", f"{PREFIX}切换uid", f"{PREFIX}删除uid", f"{PREFIX}解绑uid"))
async def send_link_uid_msg(bot: Bot, ev: Event):
await bot.logger.info("开始执行[绑定/解绑用户信息]")
qid = ev.user_id
@ -52,7 +50,7 @@ async def send_link_uid_msg(bot: Bot, ev: Event):
)
elif "切换" in ev.command:
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}成功!")
else:
return await bot.send(f"尚未绑定该ARK_UID{ark_uid}")

View File

@ -3,9 +3,7 @@ import re
from ..utils.ark_api import ark_skd_api
from ..utils.database.models import ArknightsBind, ArknightsPush, ArknightsUser
ERROR_HINT = (
"添加失败, 格式为: skd添加cred Cred 例如: skd添加cred VropL583Sb1hClS5buQ4nSASkDlL8tMT"
)
ERROR_HINT = "添加失败, 格式为: skd添加cred Cred 例如: skd添加cred VropL583Sb1hClS5buQ4nSASkDlL8tMT"
UID_HINT = "添加失败, 请先绑定明日方舟UID"

View File

@ -8,7 +8,7 @@ from gsuid_core.utils.image.convert import convert_img
from gsuid_core.utils.image.image_tools import draw_center_text_by_line
from PIL import Image, ImageDraw
from ..arknightsuid_resource.constants import CHARACTER_TABLE
from ..arknightsuid_resource.constants import EXCEL
from ..arknightsuid_wiki.draw_wiki_img import (
# draw_wiki,
get_equip_info,
@ -44,7 +44,7 @@ async def send_role_wiki_pic(bot: Bot, ev: Event):
logger.info(char_name)
char_id = None
for char_id_, char_info in CHARACTER_TABLE.chars.items():
for char_id_, char_info in EXCEL.CHARATER_TABLE.chars.items():
if char_info.name == char_name:
char_id = char_id_
break
@ -62,7 +62,7 @@ async def send_equip_wiki_pic(bot: Bot, ev: Event):
char_name = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text))
char_id = None
for char_id_, char_info in CHARACTER_TABLE.chars.items():
for char_id_, char_info in EXCEL.CHARATER_TABLE.chars.items():
if char_info.name == char_name:
char_id = char_id_
break

View File

@ -2,20 +2,13 @@ import asyncio
import re
from pathlib import Path
from pprint import pformat
from typing import Dict, Union
from gsuid_core.utils.colortext.ColorText import ColorTextGroup, split_ctg
from gsuid_core.utils.image.image_tools import draw_text_by_line
from jinja2 import Template
from PIL import Image, ImageDraw
from ..arknightsuid_resource.constants import (
BATTLE_EQUIP_TABLE,
CHARACTER_TABLE,
RANGE_TABLE,
SKILL_TABLE,
UNIEQUIP_TABLE,
)
from ..arknightsuid_resource.constants import EXCEL
from ..utils.fonts.source_han_sans import (
sans_font_24,
sans_font_34,
@ -92,7 +85,7 @@ def test_ctg(length: int, *params):
f_ = pformat(split_ctg(groups_, length)).split("\n")
def render_template(template_str: str, data: Dict[str, Union[float, Union[int, None]]]):
def render_template(template_str: str, data: dict[str, float | int | None]):
matches = re.finditer(r"\{([^}:]+)\}", template_str)
matches_1 = re.finditer(r"\{([^{}]+):([^{}]+)\}", template_str)
@ -132,15 +125,15 @@ async def get_equip_info(char_id: str):
im = ""
try:
char_equip_id_list = UNIEQUIP_TABLE.charEquip[char_id]
char_equip_id_list = EXCEL.UNIEQUIP_TABLE.charEquip[char_id]
except KeyError:
return "该干员没有模组"
for char_equip_id in char_equip_id_list:
equip_dict = UNIEQUIP_TABLE.equipDict[char_equip_id]
equip_dict = EXCEL.UNIEQUIP_TABLE.equipDict[char_equip_id]
uniequip_name = equip_dict.uniEquipName
try:
char_equip_phases = BATTLE_EQUIP_TABLE.equips[char_equip_id].phases
char_equip_phases = EXCEL.BATTLE_EQUIP_TABLE.equips[char_equip_id].phases
except KeyError:
continue
@ -173,9 +166,7 @@ async def get_equip_info(char_id: str):
blackboard_dict[blackboard_.key] = blackboard_.value
if additionalDescription:
additionalDescription = re.sub(r"<[^>]+>", "", additionalDescription)
additionalDescription = render_template(
additionalDescription, blackboard_dict
)
additionalDescription = render_template(additionalDescription, blackboard_dict)
additionalDescription = re.sub(r".000000", "", additionalDescription)
im += f"{additionalDescription}\n"
@ -202,9 +193,7 @@ async def get_equip_info(char_id: str):
blackboard_dict[blackboard_.key] = blackboard_.value
if additionalDescription and blackboard:
additionalDescription = re.sub(r"<[^>]+>", "", additionalDescription)
additionalDescription = render_template(
additionalDescription, blackboard_dict
)
additionalDescription = render_template(additionalDescription, blackboard_dict)
additionalDescription = re.sub(r".000000", "", additionalDescription)
im += f"{additionalDescription}\n"
@ -230,9 +219,7 @@ async def get_equip_info(char_id: str):
blackboard_dict[blackboard_.key] = blackboard_.value
if overrideDescripton and blackboard:
overrideDescripton = re.sub(r"<[^>]+>", "", overrideDescripton)
overrideDescripton = render_template(
overrideDescripton, blackboard_dict
)
overrideDescripton = render_template(overrideDescripton, blackboard_dict)
im += f"{overrideDescripton}\n"
else:
raise NotImplementedError
@ -247,20 +234,20 @@ async def get_equip_info(char_id: str):
async def get_wiki_info(char_id: str):
im = ""
character_data = CHARACTER_TABLE[char_id]
character_data = EXCEL.CHARATER_TABLE.chars[char_id]
char_name = character_data.name
im += f"干员名: {char_name}\n"
im += "-----------------\n"
char_rarity = character_data.rarity
char_rarity = character_data.rarity.value
im += f"星级: {char_rarity + 1!s}\n"
im += "-----------------\n"
profession = character_data.profession
profession = character_data.profession.name
im += f"职业: {profession_en_to_cn[profession]}\n"
char_position = character_data.position
im += f"攻击方式: {char_position_en_to_cn[char_position]}\n"
sub_profession_id = character_data.subProfessionId
sub_profession = UNIEQUIP_TABLE.subProfDict[sub_profession_id].subProfessionName
sub_profession = EXCEL.UNIEQUIP_TABLE.subProfDict[sub_profession_id].subProfessionName
im += f"子职业: {sub_profession}\n"
im += "-----------------\n"
nation_id = character_data.nationId
@ -301,7 +288,7 @@ async def get_wiki_info(char_id: str):
if potential.buff:
potential_add_attribute = potential.buff.attributes.attributeModifiers
if len(potential.buff.attributes.attributeModifiers) == 1:
potential_add_attribute_type = potential_add_attribute[0].attributeType
potential_add_attribute_type = potential_add_attribute[0].attributeType.value
potential_add_attribute_value = potential_add_attribute[0].value
potential_add_dict[potential_id] = (
potential_add_attribute_type,
@ -328,7 +315,7 @@ async def get_wiki_info(char_id: str):
im += "技能:\n"
for skill in skill_id_list:
skill_data = SKILL_TABLE.skills[skill]
skill_data = EXCEL.SKILL_TABLE.skills[skill]
skill_level_data = skill_data.levels[-1]
skill_name = skill_level_data.name
im += f"技能名: {skill_name}\n"
@ -362,15 +349,13 @@ async def get_wiki_info(char_id: str):
im += f"初始: {skill_sp_data.initSp} "
im += f"持续: {skill_duration!s}\n"
skill_blackboard_data = skill_level_data.blackboard
black_board_dict: dict[str, Union[Union[int, float], None]] = {}
black_board_dict: dict[str, int | float | None] = {}
for black_board in skill_blackboard_data:
black_board_dict[black_board.key] = black_board.value
if skill_description:
skill_description = skill_description.replace(":0.0", "")
skill_description = re.sub(r"<[^>]+>", "", skill_description)
skill_description = render_template(skill_description, black_board_dict).replace(
"--", "-"
)
skill_description = render_template(skill_description, black_board_dict).replace("--", "-")
last_skill_description = re.sub(r".000000", "", skill_description)
if "{" in last_skill_description:
raise NotImplementedError
@ -392,7 +377,7 @@ async def draw_wiki(char_id: str):
img.paste(vvan_img, (-700, -100), vvan_img)
img.paste(title_img, (0, -50), title_img)
character_data = CHARACTER_TABLE[char_id]
character_data = EXCEL.CHARATER_TABLE.chars[char_id]
char_name = character_data.name
draw.text(
@ -407,7 +392,7 @@ async def draw_wiki(char_id: str):
rarity_img = Image.open(TEXTURE2D_PATH / f"rarity_yellow_{char_rarity}.png")
img.paste(rarity_img, (960, 120), rarity_img)
profession = character_data.profession
profession = character_data.profession.name
profession_img = Image.open(TEXTURE2D_PATH / f"icon_{profession.lower()}.png")
img.paste(profession_img, (1100, 7050), profession_img)
@ -427,7 +412,7 @@ async def draw_wiki(char_id: str):
)
sub_profession_id = character_data.subProfessionId
sub_profession = UNIEQUIP_TABLE.subProfDict[sub_profession_id].subProfessionName
sub_profession = EXCEL.UNIEQUIP_TABLE.subProfDict[sub_profession_id].subProfessionName
bar_img_draw.text(
(360, 100),
sub_profession,
@ -589,7 +574,7 @@ async def draw_wiki(char_id: str):
range_id = char_phases_data.rangeId
attack_area_img = Image.open(TEXTURE2D_PATH / "attack_area.png")
if range_id:
range_data = RANGE_TABLE.range_[range_id]
range_data = EXCEL.RANGE_TABLE.range_[range_id]
grids = range_data.grids
area_0 = Image.open(TEXTURE2D_PATH / "area_0.png").resize((58, 58))
area_1 = Image.open(TEXTURE2D_PATH / "area_1.png")
@ -608,7 +593,7 @@ async def draw_wiki(char_id: str):
if potential.buff:
potential_add_attribute = potential.buff.attributes.attributeModifiers
if len(potential.buff.attributes.attributeModifiers) == 1:
potential_add_attribute_type = potential_add_attribute[0].attributeType
potential_add_attribute_type = potential_add_attribute[0].attributeType.value
potential_add_attribute_value = potential_add_attribute[0].value
potential_add_dict[potential_id] = (
potential_add_attribute_type,
@ -640,21 +625,19 @@ async def draw_wiki(char_id: str):
skill_bg = Image.open(TEXTURE2D_PATH / "skill_bg.png")
skill3_bar_bg = Image.open(TEXTURE2D_PATH / "skill3_bar.png")
skill_data = SKILL_TABLE.skills[skill]
skill_data = EXCEL.SKILL_TABLE.skills[skill]
skill_level_data = skill_data.levels[-1]
skill_name = skill_level_data.name
skill_description = skill_level_data.description
skill_sp_data = skill_level_data.spData
skill_duration = skill_level_data.duration
skill_blackboard_data = skill_level_data.blackboard
black_board_dict: dict[str, Union[Union[int, float], None]] = {}
black_board_dict: dict[str, int | float | None] = {}
for black_board in skill_blackboard_data:
black_board_dict[black_board.key] = black_board.value
if skill_description:
skill_description = re.sub(r"<[^>]+>", "", skill_description)
skill_description = render_template(skill_description, black_board_dict).replace(
"--", "-"
)
skill_description = render_template(skill_description, black_board_dict).replace("--", "-")
last_skill_description = re.sub(r".000000", "", skill_description)
if "{" in last_skill_description:
raise NotImplementedError

View File

@ -3,7 +3,7 @@ import hmac
import json
import time
from copy import deepcopy
from typing import Any, Dict, Literal, Tuple, Union, cast
from typing import Any, Literal, cast
from urllib.parse import urlparse
import msgspec
@ -31,7 +31,7 @@ ssl_verify = core_plugins_config.get_config("MhySSLVerify").data
# header["dId"] = await get_d_id()
# return header
_HEADER: Dict[str, str] = {
_HEADER: dict[str, str] = {
"User-Agent": "Skland/1.28.0 (com.hypergryph.skland; build:102800063; Android 35; ) Okhttp/4.11.0",
"Accept-Encoding": "gzip",
"Connection": "close",
@ -52,9 +52,7 @@ header_for_sign = {
}
def generate_signature(
token: str, path: str, body_or_query: str, dId: str = ""
) -> Tuple[str, Dict[str, str]]:
def generate_signature(token: str, path: str, body_or_query: str, dId: str = "") -> tuple[str, dict[str, str]]:
t = str(int(time.time()) - 2)
_token = token.encode("utf-8")
header_ca = header_for_sign.copy()
@ -71,7 +69,7 @@ def get_sign_header(
token: str,
url: str,
method: str,
body: Union[dict[Any, Any], None],
body: dict[Any, Any] | None,
old_header: dict[str, str],
):
h = old_header.copy()
@ -93,13 +91,13 @@ class TokenRefreshFailed(Exception):
class BaseArkApi:
proxy_url: Union[str, None] = proxy_url if proxy_url else None
proxy_url: str | None = proxy_url if proxy_url else None
async def _pass(
self,
gt: str,
ch: str,
) -> Tuple[Union[str, None], Union[str, None]]:
) -> tuple[str | None, str | None]:
_pass_api = core_plugins_config.get_config("_pass_API").data
if _pass_api:
data = await self._ark_request(
@ -119,15 +117,15 @@ class BaseArkApi:
async def get_game_player_info(
self,
uid: str,
) -> Union[int, ArknightsPlayerInfoModel]:
cred: Union[str, None] = await ArknightsUser.get_user_attr_by_uid(
) -> int | ArknightsPlayerInfoModel:
cred: str | None = await ArknightsUser.get_user_attr_by_uid(
uid=uid,
attr="cred",
)
if cred is None:
logger.info(f"cred is None {uid}")
return -60
token: Union[str, None] = await ArknightsUser.get_user_attr_by_uid(
token: str | None = await ArknightsUser.get_user_attr_by_uid(
uid=uid,
attr="token",
)
@ -165,14 +163,14 @@ class BaseArkApi:
else:
return msgspec.convert(unpack_data, type=ArknightsPlayerInfoModel)
async def skd_sign(self, uid: str) -> Union[int, ArknightsAttendanceModel]:
cred: Union[str, None] = await ArknightsUser.get_user_attr_by_uid(
async def skd_sign(self, uid: str) -> int | ArknightsAttendanceModel:
cred: str | None = await ArknightsUser.get_user_attr_by_uid(
uid=uid,
attr="cred",
)
if cred is None:
return -60
token: Union[str, None] = await ArknightsUser.get_user_attr_by_uid(
token: str | None = await ArknightsUser.get_user_attr_by_uid(
uid=uid,
attr="token",
)
@ -206,14 +204,14 @@ class BaseArkApi:
async def get_sign_info(
self,
uid: str,
) -> Union[int, ArknightsAttendanceCalendarModel]:
cred: Union[str, None] = await ArknightsUser.get_user_attr_by_uid(
) -> int | ArknightsAttendanceCalendarModel:
cred: str | None = await ArknightsUser.get_user_attr_by_uid(
uid=uid,
attr="cred",
)
if cred is None:
return -60
token: Union[str, None] = await ArknightsUser.get_user_attr_by_uid(
token: str | None = await ArknightsUser.get_user_attr_by_uid(
uid=uid,
attr="token",
)
@ -242,10 +240,10 @@ class BaseArkApi:
async def check_cred_valid(
self,
cred: Union[str, None] = None,
token: Union[str, None] = None,
uid: Union[str, None] = None,
) -> Union[bool, ArknightsUserMeModel]:
cred: str | None = None,
token: str | None = None,
uid: str | None = None,
) -> bool | ArknightsUserMeModel:
if uid is not None:
cred = (
cred
@ -282,14 +280,14 @@ class BaseArkApi:
unpack_data = self.unpack(raw_data)
return msgspec.convert(unpack_data, type=ArknightsUserMeModel)
def unpack(self, raw_data: Dict) -> Dict:
def unpack(self, raw_data: dict) -> dict:
try:
data = raw_data["data"]
return data
except KeyError:
return raw_data
async def refresh_token(self, cred: str, uid: Union[str, None] = None) -> str:
async def refresh_token(self, cred: str, uid: str | None = None) -> str:
header = deepcopy(_HEADER)
header["cred"] = cred
header["sign_enable"] = "false"
@ -312,11 +310,11 @@ class BaseArkApi:
self,
url: str,
method: Literal["GET", "POST"] = "GET",
header: Dict[str, Any] = _HEADER,
params: Union[Dict[str, Any], None] = None,
data: Union[Dict[str, Any], None] = None,
use_proxy: Union[bool, None] = False,
) -> Union[Dict, Union[int, None]]:
header: dict[str, Any] = _HEADER,
params: dict[str, Any] | None = None,
data: dict[str, Any] | None = None,
use_proxy: bool | None = False,
) -> dict | int | None:
logger.debug(f"ark_request {url} {method} {header} {params} {data} {use_proxy}")
try:
raw_data = await self._ark_request(
@ -347,11 +345,11 @@ class BaseArkApi:
self,
url: str,
method: Literal["GET", "POST"] = "GET",
header: Dict[str, Any] = _HEADER,
params: Union[Dict[str, Any], None] = None,
data: Union[Dict[str, Any], None] = None,
use_proxy: Union[bool, None] = False,
) -> Union[Dict, Union[int, None]]:
header: dict[str, Any] = _HEADER,
params: dict[str, Any] | None = None,
data: dict[str, Any] | None = None,
use_proxy: bool | None = False,
) -> dict | int | None:
async with ClientSession(
connector=TCPConnector(verify_ssl=ssl_verify),
) as client:

View File

@ -1,4 +1,5 @@
from typing import Dict, Literal, Optional, Sequence, Type, TypeVar, Union
from collections.abc import Sequence
from typing import Literal, TypeVar
from gsuid_core.utils.database.base_models import (
BaseModel,
@ -17,14 +18,14 @@ T_ARK_User = TypeVar("T_ARK_User", bound="ArknightsUser")
class ArknightsBind(Bind, table=True):
uid: Union[str, None] = Field(default=None, title="明日方舟UID")
uid: str | None = Field(default=None, title="明日方舟UID")
class ArknightsUser(User, table=True):
uid: Union[str, None] = Field(default=None, title="明日方舟UID")
skd_uid: Union[str, None] = Field(default=None, title="SKD用户ID")
cred: Union[str, None] = Field(default=None, title="SKD凭证")
token: Union[str, None] = Field(default=None, title="SKD Token")
uid: str | None = Field(default=None, title="明日方舟UID")
skd_uid: str | None = Field(default=None, title="SKD用户ID")
cred: str | None = Field(default=None, title="SKD凭证")
token: str | None = Field(default=None, title="SKD Token")
@classmethod
@with_session
@ -32,7 +33,7 @@ class ArknightsUser(User, table=True):
cls,
session: AsyncSession,
cred: str,
) -> Union[BaseModel, None]:
) -> BaseModel | None:
sql = select(cls).where(cls.cred == cred)
result = await session.execute(sql)
data = result.scalars().all()
@ -40,19 +41,19 @@ class ArknightsUser(User, table=True):
@classmethod
@with_session
async def get_all_user(cls: Type[T_ARK_User], session: AsyncSession) -> Sequence[T_ARK_User]:
async def get_all_user(cls: type[T_ARK_User], session: AsyncSession) -> Sequence[T_ARK_User]:
sql = select(cls).where(cls.cred is not None, cls.cred != "")
result = await session.execute(sql)
data: Sequence[T_ARK_User] = result.scalars().all()
return data
@classmethod
async def get_token_by_cred(cls, cred: str) -> Union[str, None]:
async def get_token_by_cred(cls, cred: str) -> str | None:
result = await cls.select_data_by_cred(cred)
return getattr(result, "token") if result else None
@classmethod
async def get_uid_by_cred(cls, cred: str) -> Union[str, None]:
async def get_uid_by_cred(cls, cred: str) -> str | None:
result = await cls.select_data_by_cred(cred)
return getattr(result, "uid") if result else None
@ -74,21 +75,21 @@ class ArknightsUser(User, table=True):
return not bool(retcode)
@classmethod
async def update_user_data(cls, uid: str, data: Dict = {}):
async def update_user_data(cls, uid: str, data: dict = {}):
return await cls.update_data_by_uid(uid, cls.bot_id, None, **data)
class ArknightsPush(Push, table=True):
uid: Union[str, None] = Field(default=None, title="明日方舟UID")
skd_uid: Union[str, None] = Field(default=None, title="森空岛用户ID")
ap_push: Union[bool, None] = Field(default=False, title="理智推送")
ap_value: Union[int, None] = Field(default=110, title="理智推送阈值")
ap_is_push: Union[bool, None] = Field(default=False, title="理智是否已经推送")
training_push: Union[bool, None] = Field(default=False, title="训练室推送")
training_value: Union[int, None] = Field(default=30, title="训练室推送阈值")
training_is_push: Union[bool, None] = Field(default=False, title="训练室是否已经推送")
version_push: Union[bool, None] = Field(default=False, title="版本更新推送")
version_is_push: Union[bool, None] = Field(default=False, title="版本更新是否已经推送")
uid: str | None = Field(default=None, title="明日方舟UID")
skd_uid: str | None = Field(default=None, title="森空岛用户ID")
ap_push: bool | None = Field(default=False, title="理智推送")
ap_value: int | None = Field(default=110, title="理智推送阈值")
ap_is_push: bool | None = Field(default=False, title="理智是否已经推送")
training_push: bool | None = Field(default=False, title="训练室推送")
training_value: int | None = Field(default=30, title="训练室推送阈值")
training_is_push: bool | None = Field(default=False, title="训练室是否已经推送")
version_push: bool | None = Field(default=False, title="版本更新推送")
version_is_push: bool | None = Field(default=False, title="版本更新是否已经推送")
@classmethod
async def insert_push_data(cls, bot_id: str, uid: str, skd_uid: str):
@ -106,9 +107,7 @@ class ArknightsPush(Push, table=True):
@classmethod
@with_session
async def base_select_data(
cls: Type[T_BaseIDModel], session: AsyncSession, **data
) -> Optional[T_BaseIDModel]:
async def base_select_data(cls: type[T_BaseIDModel], session: AsyncSession, **data) -> T_BaseIDModel | None:
stmt = select(cls)
for k, v in data.items():
stmt = stmt.where(getattr(cls, k) == v)
@ -117,7 +116,7 @@ class ArknightsPush(Push, table=True):
return data[0] if data else None
@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
if await cls.data_exist(uid=uid):
retcode = await cls.update_data_by_uid(
@ -138,7 +137,7 @@ class ArknightsPush(Push, table=True):
await cls.update_push_data(uid, {f"{mode}_is_push": status})
@classmethod
async def select_push_data(cls: Type[T_BaseIDModel], uid: str) -> Union[T_BaseIDModel, None]:
async def select_push_data(cls: type[T_BaseIDModel], uid: str) -> T_BaseIDModel | None:
return await cls.base_select_data(uid=uid)
@classmethod

View File

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

View File

@ -1,11 +1,10 @@
import json
from pathlib import Path
from typing import Dict
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.
"""
@ -17,7 +16,7 @@ def read_json(file_path: Path, **kwargs) -> Dict:
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.
"""

View File

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

View File

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

View File

@ -1,69 +0,0 @@
from collections.abc import Callable, Iterable, Iterator
from copy import copy, deepcopy
from typing import Any, Dict, Tuple, Type, TypeVar, Union
from msgspec import 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 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 __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,105 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class BGMBank(BaseStruct):
name: str
intro: Union[str, None]
loop: Union[str, None]
volume: float
crossfade: float
delay: float
fadeStyleId: Union[str, None] = None
class SoundFXBankSoundFX(BaseStruct):
asset: str
weight: float
important: bool
is2D: bool
delay: float
minPitch: float
maxPitch: float
minVolume: float
maxVolume: float
ignoreTimeScale: bool
class SoundFXBank(BaseStruct):
name: str
sounds: Union[List[SoundFXBankSoundFX], None]
maxSoundAllowed: int
popOldest: bool
customMixerGroup: Union[str, None]
loop: bool
class SoundFXCtrlBank(BaseStruct):
name: str
targetBank: str
ctrlStop: bool
ctrlStopFadetime: float
class SnapshotBank(BaseStruct):
name: str
targetSnapshot: str
hookSoundFxBank: str
delay: float
duration: float
targetFxBank: Union[str, None] = None
class BattleVoiceOption(BaseStruct):
voiceType: int
priority: int
overlapIfSamePriority: bool
cooldown: float
delay: float
class MusicData(BaseStruct):
id_: str = field(name="id")
name: str
bank: str
class BattleVoiceData(BaseStruct):
crossfade: float
minTimeDeltaForEnemyEncounter: float
minSpCostForImportantPassiveSkill: int
voiceTypeOptions: List[BattleVoiceOption]
class AudioDataDucking(BaseStruct):
bank: str
volume: float
fadeTime: float
delay: float
fadeStyleId: Union[str, None] = None
class AudioDataFadeStyle(BaseStruct):
styleName: str
fadeinTime: float
fadeoutTime: float
fadeinType: str
fadeoutType: str
class AudioData(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
bgmBanks: List[BGMBank]
soundFXBanks: List[SoundFXBank]
soundFXCtrlBanks: List[SoundFXCtrlBank]
snapshotBanks: List[SnapshotBank]
battleVoice: BattleVoiceData
musics: List[MusicData]
soundFxVoiceLang: Dict[str, Dict[str, Dict[str, str]]]
bankAlias: Dict[str, str]
duckings: List[AudioDataDucking]
fadeStyles: List[AudioDataFadeStyle]

View File

@ -1,83 +0,0 @@
from typing import Dict, List, Union
from ..common import BaseStruct
class CharacterDataUnlockCondition(BaseStruct):
phase: int
level: int
class Blackboard(BaseStruct):
key: str
value: Union[float, None] = None
valueStr: Union[str, None] = None
class TalentData(BaseStruct):
unlockCondition: CharacterDataUnlockCondition
requiredPotentialRank: int
prefabKey: Union[str, None]
name: Union[str, None]
description: Union[str, None]
rangeId: Union[str, None]
blackboard: List[Blackboard]
class EquipTalentData(TalentData):
displayRangeId: bool
upgradeDescription: str
talentIndex: int
tokenKey: Union[str, None] = None
class CharacterDataEquipTalentDataBundle(BaseStruct):
candidates: Union[List[EquipTalentData], None]
class CharacterDataTraitData(BaseStruct):
unlockCondition: CharacterDataUnlockCondition
requiredPotentialRank: int
blackboard: List[Blackboard]
overrideDescripton: Union[str, None]
prefabKey: Union[str, None]
rangeId: Union[str, None]
class CharacterDataEquipTraitData(BaseStruct):
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(BaseStruct):
candidates: Union[List[CharacterDataEquipTraitData], None]
class BattleUniEquipData(BaseStruct):
resKey: Union[str, None]
target: str
isToken: bool
addOrOverrideTalentDataBundle: CharacterDataEquipTalentDataBundle
overrideTraitDataBundle: CharacterDataEquipTraitDataBundle
class BattleEquipPerLevelPack(BaseStruct):
equipLevel: int
parts: List[BattleUniEquipData]
attributeBlackboard: List[Blackboard]
tokenAttributeBlackboard: Dict[str, List[Blackboard]]
class BattleEquipData(BaseStruct):
phases: List[BattleEquipPerLevelPack]
class BattleEquipTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
equips: Dict[str, BattleEquipData]

View File

@ -1,487 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class BuildingDataRoomUnlockCondCondItem(BaseStruct):
type_: str = field(name="type")
level: int
count: int
class BuildingDataRoomUnlockCond(BaseStruct):
id_: str = field(name="id")
number: Dict[str, BuildingDataRoomUnlockCondCondItem]
class GridPosition(BaseStruct):
row: int
col: int
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class BuildingDataRoomDataBuildCost(BaseStruct):
items: List[ItemBundle]
time: int
labor: int
class BuildingDataRoomDataPhaseData(BaseStruct):
overrideName: Union[str, None]
overridePrefabId: Union[str, None]
unlockCondId: str
buildCost: BuildingDataRoomDataBuildCost
electricity: int
maxStationedNum: int
manpowerCost: int
class BuildingDataRoomData(BaseStruct):
id_: str = field(name="id")
name: str
description: Union[str, None]
defaultPrefabId: str
canLevelDown: bool
maxCount: int
category: str
size: GridPosition
phases: List[BuildingDataRoomDataPhaseData]
class BuildingDataLayoutDataRoomSlot(BaseStruct):
id_: str = field(name="id")
cleanCostId: str
costLabor: int
provideLabor: int
size: GridPosition
offset: GridPosition
category: str
storeyId: str
class BuildingDataLayoutDataSlotCleanCostCountCost(BaseStruct):
items: List[ItemBundle]
class BuildingDataLayoutDataSlotCleanCost(BaseStruct):
id_: str = field(name="id")
number: Dict[str, BuildingDataLayoutDataSlotCleanCostCountCost]
class BuildingDataLayoutDataStoreyData(BaseStruct):
id_: str = field(name="id")
yOffset: int
unlockControlLevel: int
type_: str = field(name="type")
class BuildingDataLayoutData(BaseStruct):
id_: str = field(name="id")
slots: Dict[str, BuildingDataLayoutDataRoomSlot]
cleanCosts: Dict[str, BuildingDataLayoutDataSlotCleanCost]
storeys: Dict[str, BuildingDataLayoutDataStoreyData]
class BuildingDataPrefabInfo(BaseStruct):
id_: str = field(name="id")
blueprintRoomOverrideId: Union[str, None]
size: GridPosition
floorGridSize: GridPosition
backWallGridSize: GridPosition
obstacleId: Union[str, None]
class BuildingDataManufactPhase(BaseStruct, tag="BuildingDataManufactPhase"):
speed: Union[float, int]
outputCapacity: int
class BuildingDataShopPhase(BaseStruct, tag="BuildingDataShopPhase"):
counterNum: int
speed: Union[float, int]
moneyCapacity: int
class BuildingDataHirePhase(BaseStruct, tag="BuildingDataHirePhase"):
economizeRate: float
resSpeed: int
refreshTimes: int
class BuildingDataDormPhase(BaseStruct, tag="BuildingDataDormPhase"):
manpowerRecover: int
decorationLimit: int
class BuildingDataMeetingPhase(BaseStruct, tag="BuildingDataMeetingPhase"):
friendSlotInc: int
maxVisitorNum: int
gatheringSpeed: int
class BuildingDataTradingPhase(BaseStruct, tag="BuildingDataTradingPhase"):
orderSpeed: Union[float, int]
orderLimit: int
orderRarity: int
class BuildingDataWorkshopPhase(BaseStruct, tag="BuildingDataWorkshopPhase"):
manpowerFactor: Union[float, int]
class BuildingDataTrainingPhase(BaseStruct, tag="BuildingDataTrainingPhase"):
specSkillLvlLimit: int
class BuildingDataShopRoomBean(BaseStruct):
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(BaseStruct):
basicCostBuff: int
phases: None = None
class BuildingDataManufactRoomBean(BaseStruct):
basicSpeedBuff: float
phases: List[BuildingDataManufactPhase]
class BuildingDataHireRoomBean(BaseStruct):
basicSpeedBuff: float
phases: List[BuildingDataHirePhase]
class BuildingDataDormRoomBean(BaseStruct):
phases: List[BuildingDataDormPhase]
class BuildingDataMeetingRoomBean(BaseStruct):
basicSpeedBuff: float
phases: List[BuildingDataMeetingPhase]
class BuildingDataTradingRoomBean(BaseStruct):
basicSpeedBuff: float
phases: List[BuildingDataTradingPhase]
class BuildingDataWorkShopRoomBean(BaseStruct):
phases: List[BuildingDataWorkshopPhase]
class BuildingDataTrainingBean(BaseStruct):
basicSpeedBuff: float
phases: List[BuildingDataTrainingPhase]
class BuildingDataPowerRoomBean(BaseStruct):
basicSpeedBuff: float
phases: None = None
class CharacterDataUnlockCondition(BaseStruct):
phase: int
level: int
class BuildingDataBuildingBuffCharSlotSlotItem(BaseStruct):
buffId: str
cond: CharacterDataUnlockCondition
class BuildingDataBuildingBuffCharSlot(BaseStruct):
buffData: List[BuildingDataBuildingBuffCharSlotSlotItem]
class BuildingDataBuildingCharacter(BaseStruct):
charId: str
maxManpower: int
buffChar: List[BuildingDataBuildingBuffCharSlot]
class BuildingDataBuildingBuff(BaseStruct):
buffId: str
buffName: str
buffIcon: str
skillIcon: str
sortId: int
buffColor: str
textColor: str
buffCategory: str
roomType: str
description: str
class BuildingDataCustomDataFurnitureData(BaseStruct):
id_: str = field(name="id")
sortId: int
name: str
iconId: str
type_: str = field(name="type")
subType: str
location: str
category: str
validOnRotate: bool
enableRotate: bool
rarity: int
themeId: str
groupId: str
width: int
depth: int
height: int
comfort: int
usage: str
description: str
obtainApproach: str
processedProductId: str
processedProductCount: int
processedByProductPercentage: int
processedByProductGroup: List
canBeDestroy: bool
isOnly: int
quantity: int
musicId: str
interactType: Union[str, None] = None
class BuildingDataCustomDataThemeQuickSetupItem(BaseStruct):
furnitureId: str
pos0: int
pos1: int
dir_: int = field(name="dir")
class BuildingDataCustomDataThemeData(BaseStruct):
id_: str = field(name="id")
sortId: int
name: str
themeType: str
desc: str
quickSetup: List[BuildingDataCustomDataThemeQuickSetupItem]
groups: List[str]
furnitures: List[str]
class BuildingDataCustomDataGroupData(BaseStruct):
id_: str = field(name="id")
sortId: int
name: str
themeId: str
comfort: int
count: int
furniture: List[str]
class BuildingDataCustomDataFurnitureTypeData(BaseStruct):
type_: str = field(name="type")
name: str
class BuildingDataCustomDataFurnitureSubTypeData(BaseStruct):
subType: str
name: str
type_: str = field(name="type")
sortId: int
class BuildingDataCustomDataDormitoryDefaultFurnitureItem(BaseStruct):
furnitureId: str
xOffset: int
yOffset: int
defaultPrefabId: str
class BuildingDataCustomDataInteractItem(BaseStruct):
skinId: str
class BuildingDataCustomDataDiyUISortTemplateListDataDiyUISortTemplateData(
BaseStruct,
):
name: str
sequences: List[str]
stableSequence: str
stableSequenceOrder: str
class BuildingDataCustomDataDiyUISortTemplateListData(BaseStruct):
diyUIType: str
expandState: str
defaultTemplateIndex: int
defaultTemplateOrder: str
templates: List[BuildingDataCustomDataDiyUISortTemplateListDataDiyUISortTemplateData]
class BuildingDataCustomData(BaseStruct):
furnitures: Dict[str, BuildingDataCustomDataFurnitureData]
themes: Dict[str, BuildingDataCustomDataThemeData]
groups: Dict[str, BuildingDataCustomDataGroupData]
types: Dict[str, BuildingDataCustomDataFurnitureTypeData]
subTypes: Dict[str, BuildingDataCustomDataFurnitureSubTypeData]
defaultFurnitures: Dict[
str,
List[BuildingDataCustomDataDormitoryDefaultFurnitureItem],
]
interactGroups: Dict[str, List[BuildingDataCustomDataInteractItem]]
diyUISortTemplates: Dict[
str,
Dict[str, BuildingDataCustomDataDiyUISortTemplateListData],
]
class BuildingDataManufactFormulaUnlockRoom(BaseStruct):
roomId: str
roomLevel: int
roomCount: int
class BuildingDataManufactFormulaUnlockStage(BaseStruct):
stageId: str
rank: int
class BuildingDataManufactFormula(BaseStruct):
formulaId: str
itemId: str
count: int
weight: int
costPoint: int
formulaType: str
buffType: str
costs: List[ItemBundle]
requireRooms: List[BuildingDataManufactFormulaUnlockRoom]
requireStages: List[BuildingDataManufactFormulaUnlockStage]
class BuildingDataShopFormulaUnlockRoom(BaseStruct):
roomId: str
roomLevel: int
class BuildingDataShopFormula(BaseStruct):
formulaId: str
itemId: str
formulaType: str
costPoint: int
gainItem: ItemBundle
requireRooms: List[BuildingDataShopFormulaUnlockRoom]
class BuildingDataWorkshopExtraWeightItem(BaseStruct):
weight: int
itemId: str
itemCount: int
class BuildingDataWorkshopFormulaUnlockRoom(BaseStruct):
roomId: str
roomLevel: int
roomCount: int
class BuildingDataWorkshopFormulaUnlockStage(BaseStruct):
stageId: str
rank: int
class BuildingDataWorkshopFormula(BaseStruct):
sortId: int
formulaId: str
rarity: int
itemId: str
count: int
goldCost: int
apCost: int
formulaType: str
buffType: str
extraOutcomeRate: float
extraOutcomeGroup: List[BuildingDataWorkshopExtraWeightItem]
costs: List[ItemBundle]
requireRooms: List[BuildingDataWorkshopFormulaUnlockRoom]
requireStages: List[BuildingDataWorkshopFormulaUnlockStage]
class BuildingDataCreditFormulaValueModel(BaseStruct):
basic: int
addition: int
class BuildingDataCreditFormula(BaseStruct):
initiative: Dict
passive: Dict
class BuildingData(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
controlSlotId: str
meetingSlotId: str
initMaxLabor: int
laborRecoverTime: int
manufactInputCapacity: int
shopCounterCapacity: int
comfortLimit: int
creditInitiativeLimit: int
creditPassiveLimit: int
creditComfortFactor: int
creditGuaranteed: int
creditCeiling: int
manufactUnlockTips: str
shopUnlockTips: str
manufactStationBuff: float
comfortManpowerRecoverFactor: int
manpowerDisplayFactor: int
shopOutputRatio: Union[Dict[str, int], None]
shopStackRatio: Union[Dict[str, int], None]
basicFavorPerDay: int
humanResourceLimit: int
tiredApThreshold: int
processedCountRatio: int
trainingBonusMax: int
tradingStrategyUnlockLevel: int
tradingReduceTimeUnit: int
tradingLaborCostUnit: int
manufactReduceTimeUnit: int
manufactLaborCostUnit: int
laborAssistUnlockLevel: int
apToLaborUnlockLevel: int
apToLaborRatio: int
socialResourceLimit: int
socialSlotNum: int
furniDuplicationLimit: int
assistFavorReport: int
manufactManpowerCostByNum: List[int]
tradingManpowerCostByNum: List[int]
roomUnlockConds: Dict[str, BuildingDataRoomUnlockCond]
rooms: Dict[str, BuildingDataRoomData]
layouts: Dict[str, BuildingDataLayoutData]
prefabs: Dict[str, BuildingDataPrefabInfo]
controlData: BuildingDataControlRoomBean
manufactData: BuildingDataManufactRoomBean
shopData: BuildingDataShopRoomBean
hireData: BuildingDataHireRoomBean
dormData: BuildingDataDormRoomBean
meetingData: BuildingDataMeetingRoomBean
tradingData: BuildingDataTradingRoomBean
workshopData: BuildingDataWorkShopRoomBean
trainingData: BuildingDataTrainingBean
powerData: BuildingDataPowerRoomBean
chars: Dict[str, BuildingDataBuildingCharacter]
buffs: Dict[str, BuildingDataBuildingBuff]
workshopBonus: Dict[str, List[str]]
customData: BuildingDataCustomData
manufactFormulas: Dict[str, BuildingDataManufactFormula]
shopFormulas: Dict[str, BuildingDataShopFormula]
workshopFormulas: Dict[str, BuildingDataWorkshopFormula]
creditFormula: BuildingDataCreditFormula
goldItems: Dict[str, int]
assistantUnlock: List[int]

View File

@ -1,159 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class CampaignDataBreakRewardLadder(BaseStruct):
killCnt: int
breakFeeAdd: int
rewards: List[ItemBundle]
class WeightItemBundle(BaseStruct):
id_: str = field(name="id")
type_: str = field(name="type")
dropType: str
count: int
weight: int
class StageDataDisplayRewards_(BaseStruct):
type_: str = field(name="type")
id_: str = field(name="id")
dropType: int
class StageDataDisplayDetailRewards_(StageDataDisplayRewards_):
occPercent: int
GetPercent: float
CannotGetPercent: float
class CampaignDataCampaignDropInfo(BaseStruct):
firstPassRewards: Union[List[ItemBundle], None]
passRewards: Union[List[List[WeightItemBundle]], None]
displayDetailRewards: Union[List[StageDataDisplayDetailRewards_], None]
class CampaignDataDropLadder(BaseStruct):
killCnt: int
dropInfo: CampaignDataCampaignDropInfo
class CampaignDataGainLadder(BaseStruct):
killCnt: int
apFailReturn: int
favor: int
expGain: int
goldGain: int
displayDiamondShdNum: int
class StageDataDisplayRewards(BaseStruct):
type_: str = field(name="type")
id_: str = field(name="id")
dropType: int
class StageDataDisplayDetailRewards(BaseStruct):
occPercent: int
type_: str = field(name="type")
id_: str = field(name="id")
dropType: int
class CampaignDataDropGainInfo(BaseStruct):
dropLadders: List[CampaignDataDropLadder]
gainLadders: List[CampaignDataGainLadder]
displayRewards: List[StageDataDisplayRewards]
displayDetailRewards: List[StageDataDisplayDetailRewards]
class CampaignData(BaseStruct):
stageId: str
isSmallScale: int
breakLadders: List[CampaignDataBreakRewardLadder]
isCustomized: bool
dropGains: Dict[str, CampaignDataDropGainInfo]
class CampaignGroupData(BaseStruct):
groupId: str
activeCamps: List[str]
startTs: int
endTs: int
class CampaignRegionData(BaseStruct):
id_: str = field(name="id")
isUnknwon: int
class CampaignZoneData(BaseStruct):
id_: str = field(name="id")
name: str
regionId: str
templateId: str
class CampaignMissionData(BaseStruct):
id_: str = field(name="id")
sortId: int
param: List[str]
description: str
breakFeeAdd: int
class CampaignConstTable(BaseStruct):
systemPreposedStage: str
rotateStartTime: int
rotatePreposedStage: str
zoneUnlockStage: str
firstRotateRegion: str
sweepStartTime: int
class CampaignRotateOpenTimeData(BaseStruct):
groupId: str
stageId: str
mapId: str
unknownRegions: List[str]
duration: int
startTs: int
endTs: int
class CampaignTrainingOpenTimeData(BaseStruct):
groupId: str
stages: List[str]
startTs: int
endTs: int
class CampaignTrainingAllOpenTimeData(BaseStruct):
groupId: str
startTs: int
endTs: int
class CampaignTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
campaigns: Dict[str, CampaignData]
campaignGroups: Dict[str, CampaignGroupData]
campaignRegions: Dict[str, CampaignRegionData]
campaignZones: Dict[str, CampaignZoneData]
campaignMissions: Dict[str, CampaignMissionData]
stageIndexInZoneMap: Dict[str, int]
campaignConstTable: CampaignConstTable
campaignRotateStageOpenTimes: List[CampaignRotateOpenTimeData]
campaignTrainingStageOpenTimes: List[CampaignTrainingOpenTimeData]
campaignTrainingAllOpenTimes: List[CampaignTrainingAllOpenTimeData]

View File

@ -1,20 +0,0 @@
from typing import Dict, Union
from ..common import BaseStruct
class ChapterData(BaseStruct):
chapterId: str
chapterName: str
chapterName2: str
chapterIndex: int
preposedChapterId: Union[str, None]
startZoneId: str
endZoneId: str
chapterEndStageId: str
class ChapterTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
chapters: Dict[str, ChapterData]

View File

@ -1,28 +0,0 @@
from typing import Dict, List
from msgspec import field
from ..common import BaseStruct
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class SpCharMissionData(BaseStruct):
charId: str
missionId: str
sortId: int
condType: str
param: List[str]
rewards: List[ItemBundle]
class CharMetaTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
spCharGroups: Dict[str, List[str]]
spCharMissions: Dict[str, Dict[str, SpCharMissionData]]
spCharVoucherSkinTime: Dict[str, int]

View File

@ -1,200 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class CharPatchDataPatchInfo(BaseStruct):
tmplIds: List[str]
default: str
class CharacterDataUnlockCondition(BaseStruct):
phase: int
level: int
class Blackboard(BaseStruct):
key: str
value: Union[float, None] = None
valueStr: Union[str, None] = None
class CharacterDataTraitData(BaseStruct):
unlockCondition: CharacterDataUnlockCondition
requiredPotentialRank: int
blackboard: List[Blackboard]
overrideDescripton: Union[str, None]
prefabKey: Union[str, None]
rangeId: Union[str, None]
class CharacterDataTraitDataBundle(BaseStruct):
candidates: List[CharacterDataTraitData]
class AttributesData(BaseStruct):
maxHp: int
atk: int
def_: int = field(name="def")
magicResistance: float
cost: int
blockCnt: int
moveSpeed: float
attackSpeed: float
baseAttackTime: float
respawnTime: int
hpRecoveryPerSec: float
spRecoveryPerSec: float
maxDeployCount: int
maxDeckStackCnt: int
tauntLevel: int
massLevel: int
baseForceLevel: int
stunImmune: bool
silenceImmune: bool
sleepImmune: bool
frozenImmune: bool
levitateImmune: bool
disarmedCombatImmune: bool
class CharacterDataAttributesKeyFrame(BaseStruct):
level: int
data: AttributesData
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class CharacterDataPhaseData(BaseStruct):
characterPrefabKey: str
rangeId: Union[str, None]
maxLevel: int
attributesKeyFrames: List[CharacterDataAttributesKeyFrame]
evolveCost: Union[List[ItemBundle], None]
class CharacterDataMainSkillSpecializeLevelData(BaseStruct):
unlockCond: CharacterDataUnlockCondition
lvlUpTime: int
levelUpCost: Union[List[ItemBundle], None]
class CharacterDataMainSkill(BaseStruct):
skillId: Union[str, None]
overridePrefabKey: Union[str, None]
overrideTokenKey: Union[str, None]
levelUpCostCond: List[CharacterDataMainSkillSpecializeLevelData]
unlockCond: CharacterDataUnlockCondition
class TalentData(BaseStruct):
unlockCondition: CharacterDataUnlockCondition
requiredPotentialRank: int
prefabKey: str
name: Union[str, None]
description: Union[str, None]
rangeId: Union[str, None]
blackboard: List[Blackboard]
displayRange: bool
class CharacterDataTalentDataBundle(BaseStruct):
candidates: Union[List[TalentData], None]
class AttributeModifierDataAttributeModifier(BaseStruct):
attributeType: int
formulaItem: int
value: float
loadFromBlackboard: bool
fetchBaseValueFromSourceEntity: bool
class AttributeModifierData(BaseStruct):
abnormalFlags: Union[List[str], None]
abnormalImmunes: Union[List[str], None]
abnormalAntis: Union[List[str], None]
abnormalCombos: Union[List[str], None]
abnormalComboImmunes: Union[List[str], None]
attributeModifiers: List[AttributeModifierDataAttributeModifier]
class ExternalBuff(BaseStruct):
attributes: AttributeModifierData
class CharacterDataPotentialRank(BaseStruct):
type_: int = field(name="type")
description: str
buff: Union[ExternalBuff, None]
equivalentCost: Union[ItemBundle, None]
class CharacterDataSkillLevelCost(BaseStruct):
unlockCond: CharacterDataUnlockCondition
lvlUpCost: Union[List[ItemBundle], None]
class CharacterData(BaseStruct):
name: str
description: Union[str, None]
canUseGeneralPotentialItem: bool
canUseActivityPotentialItem: bool
potentialItemId: Union[str, None]
activityPotentialItemId: Union[str, None]
nationId: Union[str, None]
groupId: Union[str, None]
teamId: Union[str, None]
displayNumber: Union[str, None]
appellation: str
position: str
tagList: Union[List[str], None]
itemUsage: Union[str, None]
itemDesc: Union[str, None]
itemObtainApproach: Union[str, None]
isNotObtainable: bool
isSpChar: bool
maxPotentialLevel: int
rarity: int
profession: str
subProfessionId: str
trait: Union[CharacterDataTraitDataBundle, None]
phases: List[CharacterDataPhaseData]
skills: List[CharacterDataMainSkill]
talents: Union[List[CharacterDataTalentDataBundle], None]
potentialRanks: List[CharacterDataPotentialRank]
favorKeyFrames: Union[List[CharacterDataAttributesKeyFrame], None]
allSkillLvlup: List[CharacterDataSkillLevelCost]
minPowerId: str
maxPowerId: str
tokenKey: Union[str, None] = None
class CharPatchDataUnlockCondItem(BaseStruct):
stageId: str
completeState: int
class CharPatchDataUnlockCond(BaseStruct):
conds: List[CharPatchDataUnlockCondItem]
class CharPatchDataPatchDetailInfo(BaseStruct):
patchId: str
sortId: int
infoParam: str
class CharPatchTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
infos: Dict[str, CharPatchDataPatchInfo]
patchChars: Dict[str, CharacterData]
unlockConds: Dict[str, CharPatchDataUnlockCond]
patchDetailInfoList: Dict[str, CharPatchDataPatchDetailInfo]

View File

@ -1,184 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class CharacterDataUnlockCondition(BaseStruct):
phase: int
level: int
class Blackboard(BaseStruct):
key: str
value: Union[float, None] = None
valueStr: Union[str, None] = None
class CharacterDataTraitData(BaseStruct):
unlockCondition: CharacterDataUnlockCondition
requiredPotentialRank: int
blackboard: List[Blackboard]
overrideDescripton: Union[str, None]
prefabKey: Union[str, None]
rangeId: Union[str, None]
additionalDesc: str
class CharacterDataTraitDataBundle(BaseStruct):
candidates: List[CharacterDataTraitData]
class AttributesData(BaseStruct):
maxHp: int
atk: int
def_: int = field(name="def")
magicResistance: float
cost: int
blockCnt: int
moveSpeed: float
attackSpeed: float
baseAttackTime: float
respawnTime: int
hpRecoveryPerSec: float
spRecoveryPerSec: float
maxDeployCount: int
maxDeckStackCnt: int
tauntLevel: int
massLevel: int
baseForceLevel: int
stunImmune: bool
silenceImmune: bool
sleepImmune: bool
frozenImmune: bool
levitateImmune: bool
disarmedCombatImmune: bool
class CharacterDataAttributesKeyFrame(BaseStruct):
level: int
data: AttributesData
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class CharacterDataPhaseData(BaseStruct):
characterPrefabKey: str
rangeId: Union[str, None]
maxLevel: int
attributesKeyFrames: List[CharacterDataAttributesKeyFrame]
evolveCost: Union[List[ItemBundle], None]
class CharacterDataMainSkillSpecializeLevelData(BaseStruct):
unlockCond: CharacterDataUnlockCondition
lvlUpTime: int
levelUpCost: Union[List[ItemBundle], None]
class CharacterDataMainSkill(BaseStruct):
skillId: Union[str, None]
overridePrefabKey: Union[str, None]
overrideTokenKey: Union[str, None]
levelUpCostCond: List[CharacterDataMainSkillSpecializeLevelData]
unlockCond: CharacterDataUnlockCondition
class TalentData(BaseStruct):
unlockCondition: CharacterDataUnlockCondition
requiredPotentialRank: int
prefabKey: str
name: Union[str, None]
description: Union[str, None]
rangeId: Union[str, None]
blackboard: List[Blackboard]
displayRange: bool
tokenKey: Union[str, None] = None
class CharacterDataTalentDataBundle(BaseStruct):
candidates: Union[List[TalentData], None]
class AttributeModifierDataAttributeModifier(BaseStruct):
attributeType: int
formulaItem: int
value: float
loadFromBlackboard: bool
fetchBaseValueFromSourceEntity: bool
class AttributeModifierData(BaseStruct):
abnormalFlags: Union[List[str], None]
abnormalImmunes: Union[List[str], None]
abnormalAntis: Union[List[str], None]
abnormalCombos: Union[List[str], None]
abnormalComboImmunes: Union[List[str], None]
attributeModifiers: List[AttributeModifierDataAttributeModifier]
class ExternalBuff(BaseStruct):
attributes: AttributeModifierData
class CharacterDataPotentialRank(BaseStruct):
type_: int = field(name="type")
description: str
buff: Union[ExternalBuff, None]
equivalentCost: Union[ItemBundle, None]
class CharacterDataSkillLevelCost(BaseStruct):
unlockCond: CharacterDataUnlockCondition
lvlUpCost: Union[List[ItemBundle], None]
class CharacterData(BaseStruct):
name: str
description: Union[str, None]
canUseGeneralPotentialItem: bool
canUseActivityPotentialItem: bool
potentialItemId: Union[str, None]
activityPotentialItemId: Union[str, None]
nationId: Union[str, None]
groupId: Union[str, None]
teamId: Union[str, None]
displayNumber: Union[str, None]
appellation: str
position: str
tagList: Union[List[str], None]
itemUsage: Union[str, None]
itemDesc: Union[str, None]
itemObtainApproach: Union[str, None]
isNotObtainable: bool
isSpChar: bool
maxPotentialLevel: int
rarity: int
profession: str
subProfessionId: str
trait: Union[CharacterDataTraitDataBundle, None]
phases: List[CharacterDataPhaseData]
skills: List[CharacterDataMainSkill]
talents: Union[List[CharacterDataTalentDataBundle], None]
potentialRanks: List[CharacterDataPotentialRank]
favorKeyFrames: Union[List[CharacterDataAttributesKeyFrame], None]
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(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
chars: Dict[str, CharacterData]
def __getitem__(self, key: str) -> CharacterData:
return self.chars[key]

View File

@ -1,66 +0,0 @@
from typing import List, Union
from msgspec import field
from ..common import BaseStruct
class RuneDataSelector(BaseStruct):
professionMask: Union[int, str]
buildableMask: int
charIdFilter: Union[List[str], None]
enemyIdFilter: Union[List[str], None]
enemyIdExcludeFilter: Union[List[str], None]
enemyLevelTypeFilter: Union[List[str], None]
skillIdFilter: Union[List[str], None]
tileKeyFilter: Union[List[str], None]
groupTagFilter: Union[List[str], None]
filterTagFilter: Union[List[str], None]
filterTagExcludeFilter: Union[List[str], None]
subProfessionExcludeFilter: Union[List[str], None]
mapTagFilter: Union[List[str], None]
class Blackboard(BaseStruct):
key: str
value: Union[float, None] = None
valueStr: Union[str, None] = None
class RuneData(BaseStruct):
key: str
selector: RuneDataSelector
blackboard: List[Blackboard]
class RuneTablePackedRuneData(BaseStruct):
id_: str = field(name="id")
points: float
mutexGroupKey: Union[str, None]
description: str
runes: List[RuneData]
class CharmItemData(BaseStruct):
id_: str = field(name="id")
sort: int
name: str
icon: str
itemUsage: str
itemDesc: str
itemObtainApproach: str
rarity: int
desc: str
price: int
specialObtainApproach: Union[str, None]
charmType: str
obtainInRandom: bool
dropStages: List[str]
runeData: RuneTablePackedRuneData
charmEffect: str
class CharmTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
charmList: List[CharmItemData]

View File

@ -1,70 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class CharWordUnlockParam(BaseStruct):
valueStr: Union[str, None]
valueInt: int
class CharWordData(BaseStruct):
charWordId: str
wordKey: str
charId: str
voiceId: str
voiceText: str
voiceTitle: str
voiceIndex: int
voiceType: str
unlockType: str
unlockParam: List[CharWordUnlockParam]
lockDescription: Union[str, None]
placeType: str
voiceAsset: str
class VoiceLangInfoData(BaseStruct):
wordkey: str
voiceLangType: str
cvName: List[str]
voicePath: Union[str, None] = None
class VoiceLangData(BaseStruct):
wordkeys: List[str]
charId: str
dict_: Dict[str, VoiceLangInfoData] = field(name="dict")
class VoiceLangTypeData(BaseStruct):
name: str
groupType: str
class VoiceLangGroupData(BaseStruct):
name: str
members: List[str]
class NewVoiceTimeData(BaseStruct):
timestamp: int
charSet: List[str]
class CharwordTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
charWords: Dict[str, CharWordData]
voiceLangDict: Dict[str, VoiceLangData]
defaultLangType: str
newTagList: List[str]
voiceLangTypeDict: Dict[str, VoiceLangTypeData]
voiceLangGroupTypeDict: Dict[str, VoiceLangGroupData]
charDefaultTypeDict: Dict[str, str]
startTimeWithTypeDict: Dict[str, List[NewVoiceTimeData]]
displayGroupTypeList: List[str]
displayTypeList: List[str]
playVoiceRange: str

View File

@ -1,43 +0,0 @@
from typing import Dict, List
from msgspec import field
from ..common import BaseStruct
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class MonthlySignInData(BaseStruct):
itemId: str
itemType: str
count: int
class MonthlySignInGroupData(BaseStruct):
groupId: str
title: str
description: str
signStartTime: int
signEndTime: int
items: List[MonthlySignInData]
class MonthlyDailyBonusGroup(BaseStruct):
groupId: str
startTime: int
endTime: int
items: List[ItemBundle]
imgId: str
backId: str
class CheckinTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
groups: Dict[str, MonthlySignInGroupData]
monthlySubItem: Dict[str, List[MonthlyDailyBonusGroup]]
currentMonthlySubId: str

View File

@ -1,258 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class ClimbTowerSingleTowerDataClimbTowerTaskRewardData(BaseStruct):
levelNum: int
rewards: List[ItemBundle]
class ClimbTowerSingleTowerData(BaseStruct):
id_: str = field(name="id")
sortId: int
stageNum: int
name: str
subName: str
desc: str
towerType: str
levels: List[str]
hardLevels: Union[List[str], None]
taskInfo: Union[
List[ClimbTowerSingleTowerDataClimbTowerTaskRewardData],
None,
]
preTowerId: Union[str, None]
medalId: Union[str, None]
hiddenMedalId: Union[str, None]
hardModeMedalId: Union[str, None]
bossId: Union[str, None]
cardId: Union[str, None]
curseCardIds: List[str]
dangerDesc: str
hardModeDesc: Union[str, None]
class WeightItemBundle(BaseStruct):
id_: str = field(name="id")
type_: str = field(name="type")
dropType: str
count: int
weight: int
class StageDataDisplayRewards(BaseStruct):
type_: str = field(name="type")
id_: str = field(name="id")
dropType: int
class StageDataDisplayDetailRewards(BaseStruct):
occPercent: int
type_: str = field(name="type")
id_: str = field(name="id")
dropType: int
class ClimbTowerDropDisplayInfo(BaseStruct):
itemId: str
type_: int = field(name="type")
maxCount: int
minCount: int
class ClimbTowerLevelDropInfo(BaseStruct):
displayRewards: Union[List[StageDataDisplayRewards], None]
displayDetailRewards: Union[List[StageDataDisplayDetailRewards], None]
passRewards: Union[List[List[WeightItemBundle]], None] = None
displayDropInfo: Union[Dict[str, ClimbTowerDropDisplayInfo], None] = None
class ClimbTowerSingleLevelData(BaseStruct):
id_: str = field(name="id")
levelId: str
towerId: str
layerNum: int
code: str
name: str
desc: str
levelType: str
loadingPicId: str
dropInfo: ClimbTowerLevelDropInfo
class ClimbTowerTacticalBuffData(BaseStruct):
id_: str = field(name="id")
desc: str
profession: str
isDefaultActive: bool
sortId: int
buffType: str
class RuneDataSelector(BaseStruct):
professionMask: Union[int, str]
buildableMask: int
charIdFilter: Union[List[str], None]
enemyIdFilter: Union[List[str], None]
enemyIdExcludeFilter: Union[List[str], None]
enemyLevelTypeFilter: Union[List[str], None]
skillIdFilter: Union[List[str], None]
tileKeyFilter: Union[List[str], None]
groupTagFilter: Union[List[str], None]
filterTagFilter: Union[List[str], None]
filterTagExcludeFilter: Union[List[str], None]
subProfessionExcludeFilter: Union[List[str], None]
mapTagFilter: Union[List[str], None]
class Blackboard(BaseStruct):
key: str
value: Union[float, None] = None
valueStr: Union[str, None] = None
class RuneData(BaseStruct):
key: str
selector: RuneDataSelector
blackboard: List[Blackboard]
class RuneTablePackedRuneData(BaseStruct):
id_: str = field(name="id")
points: float
mutexGroupKey: Union[str, None]
description: str
runes: List[RuneData]
class ClimbTowerMainCardData(BaseStruct):
id_: str = field(name="id")
type_: str = field(name="type")
linkedTowerId: Union[str, None]
sortId: int
name: str
desc: str
subCardIds: List[str]
runeData: RuneTablePackedRuneData
trapIds: List[str]
class ClimbTowerSubCardData(BaseStruct):
id_: str = field(name="id")
mainCardId: str
sortId: int
name: str
desc: str
runeData: RuneTablePackedRuneData
trapIds: List[str]
class ClimbTowerCurseCardData(BaseStruct):
id_: str = field(name="id")
towerIdList: List[str]
name: str
desc: str
trapId: str
class ClimbTowerSeasonInfoData(BaseStruct):
id_: str = field(name="id")
name: str
startTs: int
endTs: int
towers: List[str]
seasonCards: List[str]
seasonColor: str
class ClimbTowerDetailConst(BaseStruct):
unlockLevelId: str
unlockModuleNumRequirement: int
lowerItemId: str
lowerItemLimit: int
higherItemId: str
higherItemLimit: int
initCharCount: int
charRecruitTimes: int
charRecruitChoiceCount: int
subcardStageSort: int
assistCharLimit: int
firstClearTaskDesc: str
subCardObtainDesc: str
subGodCardUnlockDesc: str
recruitStageSort: Union[List[int], None] = None
class ClimbTowerRewardInfo(BaseStruct):
stageSort: int
lowerItemCount: int
higherItemCount: int
class MissionDisplayRewards(BaseStruct):
type_: str = field(name="type")
id_: str = field(name="id")
count: int
class MissionData(BaseStruct):
id_: str = field(name="id")
sortId: int
description: str
type_: str = field(name="type")
itemBgType: str
preMissionIds: Union[List[str], None]
template: str
templateType: str
param: List[str]
unlockCondition: Union[str, None]
unlockParam: Union[List[str], None]
missionGroup: str
toPage: Union[str, None]
periodicalPoint: int
rewards: Union[List[MissionDisplayRewards], None]
backImagePath: Union[str, None]
foldId: Union[str, None]
haveSubMissionToUnlock: bool
class ClimbTowerMissionData(MissionData):
bindGodCardId: Union[str, None]
missionBkg: str
class MissionGroup(BaseStruct):
id_: str = field(name="id")
title: Union[str, None]
type_: str = field(name="type")
preMissionGroup: Union[str, None]
period: Union[List[int], None]
rewards: List[MissionDisplayRewards]
missionIds: List[str]
startTs: int
endTs: int
class ClimbTowerTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
towers: Dict[str, ClimbTowerSingleTowerData]
levels: Dict[str, ClimbTowerSingleLevelData]
tacticalBuffs: Dict[str, ClimbTowerTacticalBuffData]
mainCards: Dict[str, ClimbTowerMainCardData]
subCards: Dict[str, ClimbTowerSubCardData]
curseCards: Dict[str, ClimbTowerCurseCardData]
seasonInfos: Dict[str, ClimbTowerSeasonInfoData]
detailConst: ClimbTowerDetailConst
rewardInfoList: List[ClimbTowerRewardInfo]
missionData: Dict[str, ClimbTowerMissionData]
missionGroup: Dict[str, MissionGroup]

View File

@ -1,39 +0,0 @@
from typing import List
from ..common import BaseStruct
class MeetingClueDataClueData(BaseStruct):
clueId: str
clueName: str
clueType: str
number: int
class MeetingClueDataClueTypeData(BaseStruct):
clueType: str
clueNumber: int
class MeetingClueDataReceiveTimeBonus(BaseStruct):
receiveTimes: int
receiveBonus: int
class ClueData(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
clues: List[MeetingClueDataClueData]
clueTypes: List[MeetingClueDataClueTypeData]
receiveTimeBonus: List[MeetingClueDataReceiveTimeBonus]
inventoryLimit: int
outputBasicBonus: int
outputOperatorsBonus: int
cluePointLimit: int
expiredDays: int
transferBonus: int
recycleBonus: int
expiredBonus: int
communicationDuration: int
initiatorBonus: int
participantsBonus: int

View File

@ -1,49 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class StringKeyFrames(BaseStruct):
level: int
data: str
class CrisisClientDataSeasonInfo(BaseStruct):
seasonId: str
startTs: int
endTs: int
name: str
crisisRuneCoinUnlockItem: ItemBundle
permBgm: str
medalGroupId: Union[str, None]
bgmHardPoint: int
permBgmHard: Union[str, None]
class CrisisMapRankInfo(BaseStruct):
rewards: List[ItemBundle]
unlockPoint: int
class CrisisTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
seasonInfo: List[CrisisClientDataSeasonInfo]
meta: str
unlockCoinLv3: int
hardPointPerm: int
hardPointTemp: int
voiceGrade: int
crisisRuneCoinUnlockItemTitle: str
crisisRuneCoinUnlockItemDesc: str
tempAppraise: Union[List[StringKeyFrames], None] = None # Removed in 2.1.21
permAppraise: Union[List[StringKeyFrames], None] = None # Removed in 2.1.21
mapRankInfo: Union[Dict[str, CrisisMapRankInfo], None] = None # Removed in 2.1.21

View File

@ -1,53 +0,0 @@
from enum import Enum
from typing import Dict
from msgspec import field
from ..common import BaseStruct
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class StringKeyFrames(BaseStruct):
level: int
data: str
class CrisisV2ConstData(BaseStruct):
sysStartTime: int
blackScoreThreshold: int
redScoreThreshold: int
detailBkgRedThreshold: int
voiceGrade: int
seasonButtonUnlockInfo: int
shopCoinId: str
hardBgmSwitchScore: int
stageId: str
hideTodoWhenStageFinish: bool
class appraiseType(Enum):
RANK_D = "RANK_D"
RANK_C = "RANK_C"
RANK_B = "RANK_B"
RANK_A = "RANK_A"
RANK_S = "RANK_S"
RANK_SS = "RANK_SS"
RANK_SSS = "RANK_SSS"
class CrisisV2ScoreLevelToAppraiseData(BaseStruct):
appraiseType: appraiseType
class CrisisV2Table(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
seasonInfoDataMap: Dict
scoreLevelToAppraiseDataMap: Dict[str, CrisisV2ScoreLevelToAppraiseData]
constData: CrisisV2ConstData
battleCommentRuneData: Dict

View File

@ -1,93 +0,0 @@
from typing import Dict, List
from msgspec import field
from ..common import BaseStruct
class PlayerAvatarPerData(BaseStruct):
avatarId: str
avatarType: str
avatarIdSort: int
avatarIdDesc: str
avatarItemName: str
avatarItemDesc: str
avatarItemUsage: str
obtainApproach: str
class PlayerAvatarGroupData(BaseStruct):
avatarType: str
typeName: str
avatarIdList: List[str]
class PlayerAvatarData(BaseStruct):
defaultAvatarId: str
avatarList: List[PlayerAvatarPerData]
avatarTypeData: Dict[str, PlayerAvatarGroupData]
class HomeBackgroundSingleData(BaseStruct):
bgId: str
bgType: str
bgSortId: int
bgStartTime: int
bgName: str
bgMusicId: str
bgDes: str
bgUsage: str
obtainApproach: str
unlockDesList: List[str]
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]
isLimitObtain: bool
hideWhenLimit: bool
class ThemeLimitInfo(BaseStruct):
startTime: int
endTime: int
invalidObtainDesc: str
class HomeBackgroundThemeLimitData(BaseStruct):
id_: str = field(name="id")
limitInfos: List[ThemeLimitInfo]
class HomeBackgroundData(BaseStruct):
defaultBackgroundId: str
defaultThemeId: str
homeBgDataList: List[HomeBackgroundSingleData]
themeList: List[HomeBackgroundThemeData]
themeLimitData: Dict[str, HomeBackgroundThemeLimitData]
defaultBgMusicId: str
themeStartTime: int
# class
# class NameCardV2Data(BaseStruct):
# fixedModuleData: Dict[str, Dict[str, str]]
# removableModuleData: Dict[str, RemovableModule]
# skinData: Dict[str, NameCardV2DataSkinData]
# consts: NameCardV2DataConsts
class DisplayMetaTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
playerAvatarData: PlayerAvatarData
homeBackgroundData: HomeBackgroundData
# nameCardV2Data: NameCardV2Data

View File

@ -1,61 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class EnemyHandBookDataAbilty(BaseStruct):
text: str
textFormat: str
class EnemyHandBookData(BaseStruct):
enemyId: str
enemyIndex: str
enemyTags: Union[List[str], None]
sortId: int
name: str
enemyLevel: str
description: str
attackType: Union[str, None]
ability: Union[str, None]
isInvalidKilled: bool
overrideKillCntInfos: Dict[str, int]
hideInHandbook: bool
abilityList: Union[List[EnemyHandBookDataAbilty], None]
linkEnemies: Union[List[str], None]
damageType: Union[List[str], None]
invisibleDetail: bool
hideInStage: Union[bool, None] = None
class EnemyHandbookLevelInfoDataRangePair(BaseStruct):
min_: float = field(name="min")
max_: float = field(name="max")
class EnemyHandbookLevelInfoData(BaseStruct):
classLevel: str
attack: EnemyHandbookLevelInfoDataRangePair
def_: EnemyHandbookLevelInfoDataRangePair = field(name="def")
magicRes: EnemyHandbookLevelInfoDataRangePair
maxHP: EnemyHandbookLevelInfoDataRangePair
moveSpeed: EnemyHandbookLevelInfoDataRangePair
attackSpeed: EnemyHandbookLevelInfoDataRangePair
enemyDamageRes: EnemyHandbookLevelInfoDataRangePair
enemyRes: EnemyHandbookLevelInfoDataRangePair
class EnemyHandbookRaceData(BaseStruct):
id_: str = field(name="id")
raceName: str
sortId: int
class EnemyHandbookTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
levelInfoList: List[EnemyHandbookLevelInfoData]
enemyData: Dict[str, EnemyHandBookData]
raceData: Dict[str, EnemyHandbookRaceData]

View File

@ -1,21 +0,0 @@
from typing import List
from ..common import BaseStruct
class FavorData(BaseStruct):
favorPoint: int
percent: int
battlePhase: int
class FavorDataFrames(BaseStruct):
level: int
data: FavorData
class FavorTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
maxFavor: int
favorFrames: List[FavorDataFrames]

View File

@ -1,165 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class GachaDataLinkageTenGachaTkt(BaseStruct):
itemId: str
endTime: int
gachaPoolId: str
class GachaDataLimitTenGachaTkt(BaseStruct):
itemId: str
endTime: int
class GachaDataFreeLimitGachaData(BaseStruct):
poolId: str
openTime: int
endTime: int
freeCount: int
class GachaDataCarouselData(BaseStruct):
poolId: str
index: int
startTime: int
endTime: int
spriteId: str
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class GachaDataRecruitRange(BaseStruct):
rarityStart: int
rarityEnd: int
class PotentialMaterialConverterConfig(BaseStruct):
items: Dict[str, ItemBundle]
class RecruitPoolRecruitTime(BaseStruct):
timeLength: int
recruitPrice: int
accumRate: Union[float, None] = None
class RecruitConstantsData(BaseStruct):
tagPriceList: Dict[str, int]
maxRecruitTime: int
rarityWeights: None = None
recruitTimeFactorList: None = None
class RecruitPool(BaseStruct):
recruitTimeTable: List[RecruitPoolRecruitTime]
recruitConstants: RecruitConstantsData
recruitCharacterList: None = None
maskTypeWeightTable: None = None
class NewbeeGachaPoolClientData(BaseStruct):
gachaPoolId: str
gachaIndex: int
gachaPoolName: str
gachaPoolDetail: str
gachaPrice: int
gachaTimes: int
gachaOffset: Union[str, None] = None
firstOpenDay: Union[int, None] = None
reOpenDay: Union[int, None] = None
gachaPoolItems: None = None
signUpEarliestTime: Union[int, None] = None
class GachaPoolClientData(BaseStruct):
CDPrimColor: Union[str, None]
CDSecColor: Union[str, None]
endTime: int
gachaIndex: int
gachaPoolDetail: Union[str, None]
gachaPoolId: str
gachaPoolName: str
gachaPoolSummary: str
gachaRuleType: str
guarantee5Avail: int
guarantee5Count: int
LMTGSID: Union[str, None]
openTime: int
dynMeta: Union[Dict[str, object], None] = None
linkageParam: Union[Dict[str, object], None] = None
linkageRuleId: Union[str, None] = None
class GachaTag(BaseStruct):
tagId: int
tagName: str
tagGroup: int
class SpecialRecruitPoolSpecialRecruitCostData(BaseStruct):
itemCosts: ItemBundle
recruitPrice: int
timeLength: int
class SpecialRecruitPool(BaseStruct):
endDateTime: int
order: int
recruitId: str
recruitTimeTable: List[SpecialRecruitPoolSpecialRecruitCostData]
startDateTime: int
tagId: int
tagName: str
CDPrimColor: Union[str, None]
CDSecColor: Union[str, None]
LMTGSID: Union[str, None]
gachaRuleType: str
class GachaDataFesGachaPoolRelateItem(BaseStruct):
rarityRank5ItemId: str
rarityRank6ItemId: str
class GachaNormalItem(BaseStruct):
itemId: str
endTime: int
gachaPoolId: str
isTen: bool
class GachaTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
gachaTags: List[GachaTag]
carousel: List[GachaDataCarouselData]
classicPotentialMaterialConverter: PotentialMaterialConverterConfig
dicRecruit6StarHint: Union[Dict[str, str], None]
normalGachaItem: List[GachaNormalItem]
fesGachaPoolRelateItem: Union[
Dict[str, GachaDataFesGachaPoolRelateItem],
None,
]
freeGacha: List[GachaDataFreeLimitGachaData]
gachaPoolClient: List[GachaPoolClientData]
limitTenGachaItem: List[GachaDataLimitTenGachaTkt]
linkageTenGachaItem: List[GachaDataLinkageTenGachaTkt]
newbeeGachaPoolClient: List[NewbeeGachaPoolClientData]
potentialMaterialConverter: PotentialMaterialConverterConfig
recruitDetail: str
recruitPool: RecruitPool
recruitRarityTable: Dict[str, GachaDataRecruitRange]
specialRecruitPool: List[SpecialRecruitPool]
specialTagRarityTable: Dict[str, List[int]]
gachaTagMaxValid: Union[int, None] = None
potentialMats: Union[Dict, None] = None
classicPotentialMats: Union[Dict, None] = None

View File

@ -1,124 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class GameDataConstsCharAssistRefreshTimeState(BaseStruct):
Hour: int
Minute: int
class TermDescriptionData(BaseStruct):
termId: str
termName: str
description: str
class GamedataConst(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
addedRewardDisplayZone: str
advancedGachaCrystalCost: int
announceWebBusType: str
apBuyCost: int
apBuyThreshold: int
assistBeUsedSocialPt: Dict[str, int]
attackMax: float
baseMaxFriendNum: int
buyApTimeNoLimitFlag: bool
characterExpMap: List[List[int]]
characterUpgradeCostMap: List[List[int]]
charAssistRefreshTime: List[GameDataConstsCharAssistRefreshTimeState]
charmEquipCount: int
commonPotentialLvlUpCount: int
completeCrystalBonus: int
completeGainBonus: float
continuousActionOpen: bool
creditLimit: int
dataVersion: str
defaultMinContinuousBattleTimes: int
defaultMaxContinuousBattleTimes: int
defCDPrimColor: str
defCDSecColor: str
defMax: float
diamondMaterialToShardExchangeRatio: int
diamondToShdRate: int
easyCrystalBonus: int
evolveGoldCost: List[List[int]]
friendAssistRarityLimit: List[int]
hardDiamondDrop: int
hpMax: float
initCampaignTotalFee: int
initCharIdList: List[str]
initPlayerDiamondShard: int
initPlayerGold: int
initRecruitTagList: List[int]
instFinDmdShdCost: int
isClassicGachaPoolFuncEnabled: bool
isClassicPotentialItemFuncEnabled: bool
isClassicQCShopEnabled: bool
isDynIllustEnabled: bool
isDynIllustStartEnabled: bool
isLMGTSEnabled: bool
isSandboxPermFuncEnabled: bool
isRoguelikeAvgAchieveFuncEnabled: bool
isRoguelikeTopicFuncEnabled: bool
legacyItemList: List[ItemBundle]
legacyTime: int
lMTGSDescConstOne: str
lMTGSDescConstTwo: str
LMTGSToEPGSRatio: int
mailBannerType: List[str]
mainlineCompatibleDesc: str
mainlineEasyDesc: str
mainlineNormalDesc: str
mainlineToughDesc: str
maxLevel: List[List[int]]
maxPlayerLevel: int
maxPracticeTicket: int
monthlySubRemainTimeLimitDays: int
monthlySubWarningTime: int
multiInComeByRank: List[str]
newBeeGiftEPGS: int
normalGachaUnlockPrice: List[int]
normalRecruitLockedString: List[str]
playerApMap: List[int]
playerApRegenSpeed: int
playerExpMap: List[int]
pullForces: List[float]
pullForceZeroIndex: int
pushForces: List[float]
pushForceZeroIndex: int
recruitPoolVersion: int
rejectSpCharMission: int
reMax: float
replicateShopStartTime: int
requestSameFriendCD: int
resPrefVersion: str
richTextStyles: Dict[str, str]
storyReviewUnlockItemLackTip: str
termDescriptionDict: Dict[str, TermDescriptionData]
UnlimitSkinOutOfTime: int
useAssistSocialPt: int
useAssistSocialPtMaxCount: int
v006RecruitTimeStep1Refresh: int
v006RecruitTimeStep2Check: int
v006RecruitTimeStep2Flush: int
voucherDiv: int
voucherSkinDesc: str
voucherSkinRedeem: int
weeklyOverrideDesc: str
TSO: int
classicProtectChar: List[str]
isVoucherClassicItemDistinguishable: Union[bool, None] = None
operatorRecordsStartTime: Union[int, None] = None
subProfessionDamageTypePairs: Union[Dict[str, int], None] = None
crisisUnlockStage: Union[str, None] = None # Removed in 2.1.21

View File

@ -1,132 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class HandbookUnlockParam(BaseStruct):
unlockType: int
unlockParam1: str
unlockParam2: Union[str, None]
unlockParam3: Union[str, None]
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class HandbookStageTimeData(BaseStruct):
timestamp: int
charSet: List[str]
class HandbookStoryStageData(BaseStruct):
charId: str
code: str
description: str
levelId: str
loadingPicId: str
name: str
picId: str
rewardItem: List[ItemBundle]
stageGetTime: int
stageId: str
stageNameForShow: str
unlockParam: List[HandbookUnlockParam]
zoneId: str
zoneNameForShow: str
class HandbookDisplayCondition(BaseStruct):
charId: str
conditionCharId: str
type_: str = field(name="type")
class HandbookTeamMission(BaseStruct):
id_: str = field(name="id")
sort: int
powerId: str
powerName: str
item: ItemBundle
favorPoint: int
class NPCUnlock(BaseStruct):
unLockType: int
unLockParam: str
unLockString: Union[str, None] = None
class NPCData(BaseStruct):
appellation: str
cv: str
designerList: Union[List[str], None]
displayNumber: str
groupId: Union[str, None]
illustList: List[str]
name: str
nationId: str
npcId: str
npcShowAudioInfoFlag: bool
profession: str
resType: str
teamId: None
unlockDict: Dict[str, NPCUnlock]
minPowerId: str
class HandbookAvgData(BaseStruct):
storyId: str
storySetId: str
storySort: int
storyCanShow: bool
storyIntro: str
storyInfo: str
storyTxt: str
class HandbookAvgGroupData(BaseStruct):
storySetId: str
storySetName: str
sortId: int
storyGetTime: int
rewardItem: List[ItemBundle]
unlockParam: List[HandbookUnlockParam]
avgList: List[HandbookAvgData]
charId: str
class HandbookStoryData(BaseStruct):
storyText: str
unLockType: int
unLockParam: str
unLockString: str
class HandBookStoryViewData(BaseStruct):
stories: List[HandbookStoryData]
storyTitle: str
unLockorNot: bool
class HandbookInfoData(BaseStruct):
charID: str
infoName: str
storyTextAudio: List[HandBookStoryViewData]
handbookAvgList: List[HandbookAvgGroupData]
isLimited: Union[bool, None] = None
class HandbookInfoTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
handbookDict: Dict[str, HandbookInfoData]
npcDict: Dict[str, NPCData]
teamMissionList: Dict[str, HandbookTeamMission]
handbookDisplayConditionList: Dict[str, HandbookDisplayCondition]
handbookStageData: Dict[str, HandbookStoryStageData]
handbookStageTime: List[HandbookStageTimeData]

View File

@ -1,45 +0,0 @@
from typing import List, Union
from ..common import BaseStruct
class HandBookInfoTextViewDataInfoTextAudio(BaseStruct):
infoText: str
audioName: str
class StoryTextAudioInfoListItem(BaseStruct):
storyText: Union[str, None]
storyTitle: Union[str, None]
class StoryTextAudioItem(BaseStruct):
stories: List[StoryTextAudioInfoListItem]
unLockorNot: bool
unLockType: int
unLockParam: str
unLockString: str
class HandBookInfoTextViewData(BaseStruct):
infoList: List[HandBookInfoTextViewDataInfoTextAudio]
unLockorNot: bool
unLockType: int
unLockParam: str
unLockLevel: int
unLockLevelAdditive: int
unLockString: str
class CharHandbook(BaseStruct):
charID: str
drawName: str
infoName: str
infoTextAudio: List[HandBookInfoTextViewData]
storyTextAudio: List[StoryTextAudioItem]
class HandbookTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
char_102_texas: CharHandbook

View File

@ -1,20 +0,0 @@
from typing import Dict
from ..common import BaseStruct
class HandbookTeam(BaseStruct):
powerId: str
orderNum: int
powerLevel: int
powerName: str
powerCode: str
color: str
isLimited: bool
isRaw: bool
class HandbookTeamTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
team: Dict[str, HandbookTeam]

View File

@ -1,115 +0,0 @@
from typing import ClassVar, Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class ItemDataStageDropInfo(BaseStruct):
stageId: str
occPer: str
class ItemDataBuildingProductInfo(BaseStruct):
roomType: str
formulaId: str
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class FavorCharacterInfo(BaseStruct):
itemId: str
charId: str
favorAddAmt: int
class ActivityPotentialCharacterInfo(BaseStruct):
charId: str
class FullPotentialCharacterInfo(BaseStruct):
itemId: str
ts: int
class ItemPackInfo(BaseStruct):
packId: str
content: List[ItemBundle]
class UniCollectionInfo(BaseStruct):
uniCollectionItemId: str
uniqueItem: List[ItemBundle]
class ApSupplyFeature(BaseStruct):
id_: str = field(name="id")
ap: int
hasTs: bool
class ExpItemFeature(BaseStruct):
id_: str = field(name="id")
gainExp: int
class ItemDataVoucherRelateInfo(BaseStruct):
voucherId: str
voucherItemType: str
class ItemData(BaseStruct):
itemId: str
name: str
rarity: int
iconId: str
sortId: int
classifyType: str
itemType: str
stageDropList: ClassVar[List[Union[ItemDataStageDropInfo, None]]] = []
buildingProductList: ClassVar[List[Union[ItemDataBuildingProductInfo, None]]] = []
voucherRelateList: ClassVar[List[Union[ItemDataVoucherRelateInfo, None]]] = []
overrideBkg: Union[str, None] = None
usage: Union[str, None] = None
description: Union[str, None] = None
stackIconId: Union[str, None] = None
obtainApproach: Union[str, None] = None
hideInItemGet: Union[bool, None] = None
class CharVoucherItemFeature(BaseStruct):
displayType: int
id_: str = field(name="id")
class ServerItemReminderMailData(BaseStruct):
content: str
sender: str
title: str
class ServerItemReminderInfo(BaseStruct):
paidItemIdList: List[str]
paidReminderMail: ServerItemReminderMailData
class ItemTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
activityPotentialCharacters: Dict[str, ActivityPotentialCharacterInfo]
apSupplies: Dict[str, ApSupplyFeature]
expItems: Dict[str, ExpItemFeature]
favorCharacters: Dict[str, FavorCharacterInfo]
fullPotentialCharacters: Dict[str, FullPotentialCharacterInfo]
itemPackInfos: Dict[str, ItemPackInfo]
items: Dict[str, ItemData]
itemTimeLimit: Dict[str, int]
potentialItems: Dict[str, Dict[str, str]]
uniCollectionInfo: Dict[str, UniCollectionInfo]
uniqueInfo: Dict[str, int]
reminderInfo: Union[ServerItemReminderInfo, None] = None
charVoucherItems: Union[Dict[str, CharVoucherItemFeature], None] = None

View File

@ -1,67 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class MedalExpireTime(BaseStruct):
start: int
end: int
type_: str = field(name="type")
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class MedalGroupData(BaseStruct):
groupId: str
groupName: str
groupDesc: str
medalId: List[str]
sortId: int
groupBackColor: str
groupGetTime: int
sharedExpireTimes: Union[List[MedalExpireTime], None]
class MedalRewardGroupData(BaseStruct):
groupId: str
slotId: int
itemList: List[ItemBundle]
class MedalTypeData(BaseStruct):
medalGroupId: str
sortId: int
medalName: str
groupData: List[MedalGroupData]
class MedalPerData(BaseStruct):
medalId: Union[str, None]
medalName: Union[str, None]
medalType: Union[str, None]
slotId: Union[int, None]
preMedalIdList: Union[List[str], None]
rarity: int
template: Union[str, None]
unlockParam: List[str]
getMethod: Union[str, None]
description: Union[str, None]
advancedMedal: Union[str, None]
originMedal: Union[str, None]
displayTime: int
expireTimes: List[MedalExpireTime]
medalRewardGroup: List[MedalRewardGroupData]
isHidden: Union[bool, None] = None
class MedalTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
medalList: List[MedalPerData]
medalTypeData: Dict[str, MedalTypeData]

View File

@ -1,102 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class MissionDisplayRewards(BaseStruct):
type_: str = field(name="type")
id_: str = field(name="id")
count: int
class DailyMissionGroupInfoperiodInfo(BaseStruct):
missionGroupId: str
period: List[int]
rewardGroupId: str
class DailyMissionGroupInfo(BaseStruct):
endTime: int
periodList: List[DailyMissionGroupInfoperiodInfo]
startTime: int
tagState: Union[str, None]
class MissionWeeklyRewardConf(BaseStruct):
beginTime: int
endTime: int
groupId: str
id_: str = field(name="id")
periodicalPointCost: int
type_: str = field(name="type")
sortIndex: int
rewards: List[MissionDisplayRewards]
class MissionDailyRewardConf(BaseStruct):
groupId: str
id_: str = field(name="id")
periodicalPointCost: int
type_: str = field(name="type")
sortIndex: int
rewards: List[MissionDisplayRewards]
class MissionGroup(BaseStruct):
id_: str = field(name="id")
title: Union[str, None]
type_: str = field(name="type")
preMissionGroup: Union[str, None]
period: Union[List[int], None]
rewards: Union[List[MissionDisplayRewards], None]
missionIds: List[str]
startTs: int
endTs: int
class MissionData(BaseStruct):
id_: str = field(name="id")
sortId: int
description: str
type_: str = field(name="type")
itemBgType: str
preMissionIds: Union[List[str], None]
template: str
templateType: str
param: List[str]
unlockCondition: Union[str, None]
unlockParam: Union[List[str], None]
missionGroup: str
toPage: None
periodicalPoint: int
rewards: Union[List[MissionDisplayRewards], None]
backImagePath: Union[str, None]
foldId: Union[str, None]
haveSubMissionToUnlock: bool
class CrossAppShareMissions(BaseStruct):
shareMissionId: str
missionType: str
relateActivityId: Union[str, None]
startTime: int
endTime: int
limitCount: int
condTemplate: Union[str, None]
condParam: List[Union[str, None]]
rewardsList: Union[List[str], None]
class MissionTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
missions: Dict[str, MissionData]
missionGroups: Dict[str, MissionGroup]
periodicalRewards: Dict[str, MissionDailyRewardConf]
weeklyRewards: Dict[str, MissionWeeklyRewardConf]
dailyMissionGroupInfo: Dict[str, DailyMissionGroupInfo]
dailyMissionPeriodInfo: List[DailyMissionGroupInfo]
crossAppShareMissions: Dict[str, CrossAppShareMissions]
crossAppShareMissionConst: Dict[str, str]

View File

@ -1,279 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class RewardItem(BaseStruct):
type_: str = field(name="type")
id_: str = field(name="id")
count: int
sortId: int
class ItemBundle(BaseStruct):
type_: str = field(name="type")
id_: str = field(name="id")
count: int
class MissionDisplayRewards(BaseStruct):
type_: str = field(name="type")
id_: str = field(name="id")
count: int
class OpenServerItemData(BaseStruct):
itemId: str
itemType: str
count: int
class ReturnIntroData(BaseStruct):
sort: int
pubTime: int
image: str
class ReturnCheckinData(BaseStruct):
isImportant: bool
checkinRewardItems: List[ItemBundle]
class ReturnLongTermTaskData(BaseStruct):
id_: str = field(name="id")
sortId: int
template: str
param: List[str]
desc: str
rewards: List[MissionDisplayRewards]
playPoint: int
class ReturnDailyTaskData(BaseStruct):
groupId: str
id_: str = field(name="id")
groupSortId: int
taskSortId: int
template: str
param: List[str]
desc: str
rewards: List[MissionDisplayRewards]
playPoint: int
class ReturnConst(BaseStruct):
startTime: int
systemTab_time: int
afkDays: int
unlockLv: int
unlockLevel: str
juniorClear: bool
ifvisitor: bool
permMission_time: int
needPoints: int
defaultIntro: str
pointId: str
class ReturnData(BaseStruct):
constData: ReturnConst
onceRewards: List[ItemBundle]
intro: List[ReturnIntroData]
returnDailyTaskDic: Dict[str, List[ReturnDailyTaskData]]
returnLongTermTaskList: List[ReturnLongTermTaskData]
creditsList: List[ItemBundle]
checkinRewardList: List[ReturnCheckinData]
class OpenServerConst(BaseStruct):
firstDiamondShardMailCount: int
initApMailEndTs: int
class TotalCheckinData(BaseStruct):
order: int
item: OpenServerItemData
colorId: int
class ChainLoginData(BaseStruct):
order: int
item: OpenServerItemData
colorId: int
class MissionData(BaseStruct):
id_: str = field(name="id")
sortId: int
description: str
type_: str = field(name="type")
itemBgType: str
preMissionIds: None
template: str
templateType: str
param: List[str]
unlockCondition: None
unlockParam: None
missionGroup: str
toPage: None
periodicalPoint: int
rewards: List[ItemBundle]
backImagePath: None
foldId: None
haveSubMissionToUnlock: bool
class MissionGroup(BaseStruct):
id_: str = field(name="id")
title: None
type_: str = field(name="type")
preMissionGroup: None
period: None
rewards: None
missionIds: List[str]
startTs: int
endTs: int
class OpenServerData(BaseStruct):
openServerMissionGroup: MissionGroup
openServerMissionData: List[MissionData]
checkInData: List[TotalCheckinData]
chainLoginData: List[ChainLoginData]
class OpenServerScheduleItem(BaseStruct):
id_: str = field(name="id")
startTs: int
endTs: int
totalCheckinDescption: str
chainLoginDescription: str
charImg: str
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__ = "24-02-02-10-18-07-831ad8"
schedule: List[OpenServerScheduleItem]
dataMap: Dict[str, OpenServerData]
constant: OpenServerConst
playerReturn: ReturnData
playerReturnV2: ReturnDataV2
newbieCheckInPackageList: List[OpenServerNewbieCheckInPackage]

View File

@ -1,28 +0,0 @@
from typing import Dict, List
from ..common import BaseStruct
class PlayerAvatarGroupData(BaseStruct):
avatarType: str
typeName: str
avatarIdList: List[str]
class PlayerAvatarPerData(BaseStruct):
avatarId: str
avatarType: str
avatarIdSort: int
avatarIdDesc: str
avatarItemName: str
avatarItemDesc: str
avatarItemUsage: str
obtainApproach: str
class PlayerAvatarTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
avatarList: List[PlayerAvatarPerData]
avatarTypeData: Dict[str, PlayerAvatarGroupData]
defaultAvatarId: str

View File

@ -1,30 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class GridPosition(BaseStruct):
row: int
col: int
class ObscuredRect(BaseStruct):
m_xMin: float
m_yMin: float
m_width: float
m_height: float
class Stage(BaseStruct):
id_: str = field(name="id")
direction: int
grids: List[GridPosition]
boundingBoxes: Union[List[ObscuredRect], None] = None
class RangeTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
range_: Dict[str, Stage]

View File

@ -1,26 +0,0 @@
from typing import Dict, List
from msgspec import field
from ..common import BaseStruct
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class ReplicateData(BaseStruct):
item: ItemBundle
replicateTokenItem: ItemBundle
class ReplicateList(BaseStruct):
replicateList: List[ReplicateData]
class ReplicateTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
replicate: Dict[str, ReplicateList]

View File

@ -1,454 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class StageDataDisplayRewards(BaseStruct):
type_: str = field(name="type")
id_: str = field(name="id")
dropType: int
class Blackboard(BaseStruct):
key: str
value: Union[float, None] = None
valueStr: Union[str, None] = None
class Act17sideDataChoiceNodeOptionData(BaseStruct):
canRepeat: bool
eventId: str
des: str
unlockDes: Union[str, None]
class StageDataDisplayDetailRewards(BaseStruct):
occPercent: int
type_: str = field(name="type")
id_: str = field(name="id")
dropType: int
CannotGetPercent: Union[float, None] = None
GetPercent: Union[float, None] = None
class StageDataConditionDesc(BaseStruct):
stageId: str
completeState: int
class Act17sideDataConstData(BaseStruct):
techTreeUnlockEventId: str
class Act17sideDataZoneData(BaseStruct):
zoneId: str
unlockPlaceId: Union[str, None]
unlockText: str
class Act17sideDataMainlineData(BaseStruct):
mainlineId: str
nodeId: Union[str, None]
sortId: int
missionSort: str
zoneId: str
mainlineDes: str
focusNodeId: Union[str, None]
class Act17sideDataMainlineChapterData(BaseStruct):
chapterId: str
chapterDes: str
chapterIcon: str
unlockDes: str
id_: str = field(name="id")
class RunesSelector(BaseStruct):
professionMask: int
buildableMask: int
charIdFilter: Union[List[str], None]
enemyIdFilter: Union[List[str], None]
enemyIdExcludeFilter: Union[List[str], None]
enemyLevelTypeFilter: Union[List[str], None]
skillIdFilter: Union[List[str], None]
tileKeyFilter: Union[List[str], None]
groupTagFilter: Union[List[str], None]
filterTagFilter: Union[List[str], None]
filterTagExcludeFilter: Union[List[str], None]
subProfessionExcludeFilter: Union[List[str], None]
mapTagFilter: Union[List[str], None]
class TechTreeBranchRunes(BaseStruct):
key: str
selector: RunesSelector
blackboard: List[Blackboard]
class BranchRuneData(BaseStruct):
id_: str = field(name="id")
points: float
mutexGroupKey: None
description: str
runes: List[TechTreeBranchRunes]
class Act17sideDataTechTreeBranchData(BaseStruct):
techTreeBranchId: str
techTreeId: str
techTreeBranchName: str
techTreeBranchIcon: str
techTreeBranchDesc: str
runeData: BranchRuneData
class Act17sideDataTechTreeData(BaseStruct):
techTreeId: str
sortId: int
techTreeName: str
defaultBranchId: str
lockDes: str
class Act17sideDataArchiveItemUnlockData(BaseStruct):
itemId: str
itemType: str
unlockCondition: str
nodeId: Union[str, None]
stageParam: str
chapterId: Union[str, None]
class Act17sideDataEventData(BaseStruct):
eventId: str
eventTitle: str
eventDesList: List[str]
eventPic: Union[str, None] = None
eventSpecialPic: Union[str, None] = None
class Act17sideDataChoiceNodeData(BaseStruct):
nodeId: str
isDisposable: bool
choiceName: str
choiceDesList: List[str]
cancelDes: str
choiceNum: int
optionList: List[Act17sideDataChoiceNodeOptionData]
choicePic: Union[str, None] = None
choiceSpecialPic: Union[str, None] = None
class Act17sideDataTechNodeData(BaseStruct):
nodeId: str
techTreeId: str
techTreeName: str
techPic: None
techSpecialPic: str
endEventId: str
confirmDes: str
techDesList: List[str]
missionIdList: List[None]
class Act17sideDataEventNodeData(BaseStruct):
nodeId: str
eventId: str
endEventId: str
class Act17sideDataTreasureNodeData(BaseStruct):
nodeId: str
treasureId: str
treasureName: str
treasurePic: Union[str, None]
treasureSpecialPic: None
endEventId: str
confirmDes: str
treasureDesList: List[str]
missionIdList: List[str]
rewardList: List[ItemBundle]
treasureType: str
class Act17sideDataBattleNodeData(BaseStruct):
nodeId: str
stageId: str
class Act17sideDataStoryNodeData(BaseStruct):
nodeId: str
storyId: str
storyKey: str
storyName: str
storyPic: Union[str, None]
confirmDes: str
storyDesList: List[str]
class Act17sideDataLandmarkNodeData(BaseStruct):
nodeId: str
landmarkId: str
landmarkName: str
landmarkPic: Union[str, None]
landmarkSpecialPic: str
landmarkDesList: List[str]
class Act17sideDataNodeInfoData(BaseStruct):
nodeId: str
nodeType: str
sortId: int
placeId: str
isPointPlace: bool
chapterId: str
trackPointType: str
class Act17sideDataPlaceData(BaseStruct):
placeId: str
placeDesc: str
lockEventId: Union[str, None]
zoneId: str
class Act17sideData(BaseStruct):
archiveItemUnlockDataMap: Dict[str, Act17sideDataArchiveItemUnlockData]
battleNodeDataMap: Dict[str, Act17sideDataBattleNodeData]
choiceNodeDataMap: Dict[str, Act17sideDataChoiceNodeData]
constData: Act17sideDataConstData
eventDataMap: Dict[str, Act17sideDataEventData]
eventNodeDataMap: Dict[str, Act17sideDataEventNodeData]
landmarkNodeDataMap: Dict[str, Act17sideDataLandmarkNodeData]
mainlineChapterDataMap: Dict[str, Act17sideDataMainlineChapterData]
mainlineDataMap: Dict[str, Act17sideDataMainlineData]
nodeInfoDataMap: Dict[str, Act17sideDataNodeInfoData]
placeDataMap: Dict[str, Act17sideDataPlaceData]
storyNodeDataMap: Dict[str, Act17sideDataStoryNodeData]
techNodeDataMap: Dict[str, Act17sideDataTechNodeData]
techTreeBranchDataMap: Dict[str, Act17sideDataTechTreeBranchData]
techTreeDataMap: Dict[str, Act17sideDataTechTreeData]
treasureNodeDataMap: Dict[str, Act17sideDataTreasureNodeData]
zoneDataList: List[Act17sideDataZoneData]
class RuneDataSelector(BaseStruct):
buildableMask: int
professionMask: int
charIdFilter: Union[List[str], None]
enemyIdFilter: Union[List[str], None]
enemyIdExcludeFilter: Union[List[str], None]
enemyLevelTypeFilter: Union[List[str], None]
skillIdFilter: Union[List[str], None]
tileKeyFilter: Union[List[str], None]
groupTagFilter: Union[List[str], None]
filterTagFilter: Union[List[str], None]
filterTagExcludeFilter: Union[List[str], None]
subProfessionExcludeFilter: Union[List[str], None]
mapTagFilter: Union[List[str], None]
class RuneData(BaseStruct):
blackboard: List[Blackboard]
key: str
selector: RuneDataSelector
m_inited: Union[bool, None] = None
class RuneTablePackedRuneData(BaseStruct):
description: str
id_: str = field(name="id")
points: float
runes: List[RuneData]
mutexGroupKey: Union[str, None] = None
class Act25SideDataBattlePerformanceData(BaseStruct):
itemDesc: str
itemId: str
itemIcon: str
itemName: str
itemTechType: str
runeData: RuneTablePackedRuneData
sortId: int
class ActivityCustomDataAct25sideCustomData(BaseStruct):
battlePerformanceData: Dict[str, Act25SideDataBattlePerformanceData]
class ActivityCustomDataAct20sideCustomData(BaseStruct):
zoneAdditionDataMap: Dict[str, str]
residentCartDatas: Dict[str, Dict[str, str]]
class Act21SideDataZoneAddtionData(BaseStruct):
zoneId: str
unlockText: str
stageUnlockText: Union[str, None]
entryId: str
class Act21SideDataConstData(BaseStruct):
lineConnectZone: str
class ActivityCustomDataAct21sideCustomData(BaseStruct):
zoneAdditionDataMap: Dict[str, Act21SideDataZoneAddtionData]
constData: Act21SideDataConstData
class ActivityCustomData(BaseStruct):
TYPE_ACT17SIDE: Dict[str, Act17sideData]
TYPE_ACT25SIDE: Dict[str, ActivityCustomDataAct25sideCustomData]
TYPE_ACT20SIDE: Dict[str, ActivityCustomDataAct20sideCustomData]
TYPE_ACT21SIDE: Dict[str, ActivityCustomDataAct21sideCustomData]
class RetroTrailRuleData(BaseStruct):
title: List[str]
desc: List[str]
class WeightItemBundle(BaseStruct):
count: int
dropType: str
id_: str = field(name="id")
type_: str = field(name="type")
weight: int
class StageDataStageDropInfo(BaseStruct):
displayRewards: List[StageDataDisplayRewards]
displayDetailRewards: List[StageDataDisplayDetailRewards]
firstPassRewards: Union[List[ItemBundle], None] = None
firstCompleteRewards: Union[List[ItemBundle], None] = None
passRewards: Union[List[List[WeightItemBundle]], None] = None
completeRewards: Union[List[List[WeightItemBundle]], None] = None
class StageData(BaseStruct, kw_only=False):
stageType: str
difficulty: str
performanceStageFlag: str
diffGroup: str
unlockCondition: List[StageDataConditionDesc]
stageId: str
levelId: Union[str, None]
zoneId: str
code: str
name: str
description: str
hardStagedId: Union[str, None]
dangerLevel: Union[str, None]
dangerPoint: float
loadingPicId: str
canPractice: bool
canBattleReplay: bool
apCost: int
apFailReturn: int
etItemId: str
etCost: int
etFailReturn: int
etButtonStyle: None
apProtectTimes: int
diamondOnceDrop: int
practiceTicketCost: int
dailyStageDifficulty: int
expGain: int
goldGain: int
loseExpGain: int
loseGoldGain: int
passFavor: int
completeFavor: int
slProgress: int
displayMainItem: None
hilightMark: bool
bossMark: bool
isPredefined: bool
isHardPredefined: bool
isSkillSelectablePredefined: bool
isStoryOnly: bool
appearanceStyle: int
stageDropInfo: StageDataStageDropInfo
startButtonOverrideId: None
isStagePatch: bool
mainStageId: str
canUseTech: Union[bool, None] = None
canUseCharm: Union[bool, None] = None
canUseBattlePerformance: Union[bool, None] = None
class RetroTrailRewardItem(BaseStruct):
trailRewardId: str
starCount: int
rewardItem: ItemBundle
class RetroTrailData(BaseStruct):
retroId: str
trailStartTime: int
trailRewardList: List[RetroTrailRewardItem]
stageList: List[str]
relatedChar: str
relatedFullPotentialItemId: None
themeColor: str
fullPotentialItemId: str
class RetroActData(BaseStruct):
retroId: str
type_: int = field(name="type")
linkedActId: List[str]
startTime: int
trailStartTime: int
index: int
name: str
detail: str
haveTrail: bool
customActId: Union[str, None]
customActType: str
class StageValidInfo(BaseStruct):
startTs: int
endTs: int
class RetroStageOverrideInfo(BaseStruct):
apCost: int
apFailReturn: int
completeFavor: int
dropInfo: StageDataStageDropInfo
expGain: int
goldGain: int
passFavor: int
zoneId: str
class RetroTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
customData: ActivityCustomData
initRetroCoin: int
retroActList: Dict[str, RetroActData]
retroCoinMax: int
retroCoinPerWeek: int
retroDetail: str
retroPreShowTime: int
retroTrailList: Dict[str, RetroTrailData]
retroUnlockCost: int
ruleData: RetroTrailRuleData
stageList: Dict[str, StageData]
stageValidInfo: Dict[str, StageValidInfo]
zoneToRetro: Dict[str, str]
stages: Union[Dict[str, RetroStageOverrideInfo], None] = None

View File

@ -1,206 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class Blackboard(BaseStruct):
key: str
value: Union[float, None] = None
valueStr: Union[str, None] = None
class RoguelikeBuff(BaseStruct):
key: str
blackboard: List[Blackboard]
class RoguelikeOuterBuff(BaseStruct):
level: int
name: str
iconId: str
description: str
usage: str
key: str
blackboard: List[Blackboard]
buffId: Union[str, None] = None
class RoguelikeOutBuffData(BaseStruct):
id_: str = field(name="id")
buffs: Dict[str, RoguelikeOuterBuff]
class RoguelikeEndingData(BaseStruct):
id_: str = field(name="id")
backgroundId: str
name: str
description: str
priority: int
unlockItemId: Union[str, None]
changeEndingDesc: None
class RoguelikeModeData(BaseStruct):
id_: str = field(name="id")
name: str
canUnlockItem: int
scoreFactor: float
itemPools: List[str]
difficultyDesc: str
ruleDesc: str
sortId: int
unlockMode: str
color: str
class RoguelikeChoiceSceneData(BaseStruct):
id_: str = field(name="id")
title: str
description: str
background: str
class RoguelikeChoiceData(BaseStruct):
id_: str = field(name="id")
title: str
description: Union[str, None]
type_: str = field(name="type")
nextSceneId: Union[str, None]
icon: Union[str, None]
param: Dict[str, object]
class RoguelikeZoneData(BaseStruct):
id_: str = field(name="id")
name: str
description: str
endingDescription: str
backgroundId: str
subIconId: str
class RoguelikeStageData(BaseStruct):
id_: str = field(name="id")
linkedStageId: str
levelId: str
code: str
name: str
loadingPicId: str
description: str
eliteDesc: Union[str, None]
isBoss: int
isElite: int
difficulty: str
class RoguelikeRelicFeature(BaseStruct):
id_: str = field(name="id")
buffs: List[RoguelikeBuff]
class RoguelikeUpgradeTicketFeature(BaseStruct):
id_: str = field(name="id")
profession: int
rarity: int
professionList: List[str]
rarityList: List[int]
class RoguelikeRecruitTicketFeature(BaseStruct):
id_: str = field(name="id")
profession: int
rarity: int
professionList: List[str]
rarityList: List[int]
extraEliteNum: int
extraFreeRarity: List[Union[int, None]]
extraCharIds: List[str]
class RelicStableUnlockParam(BaseStruct):
unlockCondDetail: str
unlockCnt: int
class RoguelikeItemData(BaseStruct):
id_: str = field(name="id")
name: str
description: Union[str, None]
usage: str
obtainApproach: str
iconId: str
type_: str = field(name="type")
rarity: str
value: int
sortId: int
unlockCond: Union[str, None]
unlockCondDesc: Union[str, None]
unlockCondParams: List[Union[str, None]]
stableUnlockCond: Union[RelicStableUnlockParam, None]
class RoguelikeItemTable(BaseStruct):
items: Dict[str, RoguelikeItemData]
recruitTickets: Dict[str, RoguelikeRecruitTicketFeature]
upgradeTickets: Dict[str, RoguelikeUpgradeTicketFeature]
relics: Dict[str, RoguelikeRelicFeature]
class RoguelikeConstTableEventTypeData(BaseStruct):
name: str
description: str
class RoguelikeConstTableCharUpgradeData(BaseStruct):
evolvePhase: int
skillLevel: int
skillSpecializeLevel: int
class RoguelikeConstTableRecruitData(BaseStruct):
recruitPopulation: int
upgradePopulation: int
class RoguelikeConstTablePlayerLevelData(BaseStruct):
exp: int
populationUp: int
squadCapacityUp: int
battleCharLimitUp: int
class RoguelikeConstTable(BaseStruct):
playerLevelTable: Dict[str, RoguelikeConstTablePlayerLevelData]
recruitPopulationTable: Dict[str, RoguelikeConstTableRecruitData]
charUpgradeTable: Dict[str, RoguelikeConstTableCharUpgradeData]
eventTypeTable: Dict[str, RoguelikeConstTableEventTypeData]
shopDialogs: List[str]
shopRelicDialogs: List[str]
shopTicketDialogs: List[str]
mimicEnemyIds: List[str]
clearZoneScores: List[int]
moveToNodeScore: int
clearNormalBattleScore: int
clearEliteBattleScore: int
clearBossBattleScore: int
gainRelicScore: int
gainCharacterScore: int
unlockRelicSpecialScore: int
squadCapacityMax: int
bossIds: List[str]
class RoguelikeTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
constTable: RoguelikeConstTable
itemTable: RoguelikeItemTable
stages: Dict[str, RoguelikeStageData]
zones: Dict[str, RoguelikeZoneData]
choices: Dict[str, RoguelikeChoiceData]
choiceScenes: Dict[str, RoguelikeChoiceSceneData]
modes: Dict[str, RoguelikeModeData]
endings: Dict[str, RoguelikeEndingData]
outBuffs: Dict[str, RoguelikeOutBuffData]

File diff suppressed because it is too large Load Diff

View File

@ -1,880 +0,0 @@
from typing import Dict, List, Union
from ..common import BaseStruct
class HomeEntryDisplayData(BaseStruct):
displayId: str
topicId: str
startTs: int
endTs: int
class SandboxPermBasicData(BaseStruct):
topicId: str
topicTemplate: str
topicName: str
topicStartTime: int
fullStoredTime: int
sortId: int
priceItemId: str
templateShopId: str
homeEntryDisplayData: List[HomeEntryDisplayData]
webBusType: str
medalGroupId: str
class SandboxV2NodeData(BaseStruct):
minDistance: float
class UnityEngineVector2(BaseStruct):
x: float
y: float
class SandboxV2MapZoneData(BaseStruct):
zoneId: str
hasBorder: bool
center: Union[UnityEngineVector2, None] = None
vertices: Union[List[UnityEngineVector2], None] = None
triangles: Union[List[List[int]], None] = None
class SandboxV2MapConfig(BaseStruct):
isRift: bool
isGuide: bool
cameraBoundMin: UnityEngineVector2
cameraBoundMax: UnityEngineVector2
cameraMaxNormalizedZoom: float
backgroundId: str
class SandboxV2MapData(BaseStruct):
nodes: Dict[str, SandboxV2NodeData]
zones: Dict[str, SandboxV2MapZoneData]
mapConfig: SandboxV2MapConfig
centerNodeId: str
monthModeNodeId: Union[str, None]
class SandboxV2ItemTrapData(BaseStruct):
itemId: str
trapId: str
trapPhase: int
trapLevel: int
skillIndex: int
skillLevel: int
buildingLevel: int
updatedItemId: Union[str, None]
minLevelItemId: str
baseItemName: str
itemType: str
itemTag: str
class SandboxV2ItemTrapTagData(BaseStruct):
tag: str
tagName: str
tagPic: str
sortId: int
class SandboxV2BuildingItemData(BaseStruct):
itemId: str
itemRarity: int
class SandboxV2CraftItemData(BaseStruct):
itemId: str
type: int
buildingUnlockDesc: str
materialItems: Dict[str, int]
upgradeItems: Union[Dict[str, int], None]
withdrawRatio: int
repairCost: int
craftGroupId: str
recipeLevel: int
isHidden: Union[bool, None] = None
class SandboxV2LivestockData(BaseStruct):
livestockItemId: str
shinyLivestockItemId: str
livestockEnemyId: str
class SandboxV2CraftGroupData(BaseStruct):
items: List[str]
class SandboxV2AlchemyMaterialData(BaseStruct):
itemId: str
count: int
class SandboxV2AlchemyRecipeData(BaseStruct):
recipeId: str
materials: List[SandboxV2AlchemyMaterialData]
itemId: str
onceAlchemyRatio: int
recipeLevel: int
unlockDesc: str
class SandboxV2DrinkMatData(BaseStruct):
id: str
type: str
count: int
class SandboxV2FoodMatData(BaseStruct):
id: str
type: str
sortId: int
attribute: Union[str, None] = None
buffDesc: Union[str, None] = None
class SandboxV2FoodRecipeData(BaseStruct):
foodId: str
mats: List[str]
class SandboxV2FoodData(BaseStruct):
id: str
attributes: List[str]
duration: int
itemName: str
itemUsage: str
sortId: int
enhancedUsage: Union[str, None] = None
generalName: Union[str, None] = None
enhancedName: Union[str, None] = None
recipes: Union[List[SandboxV2FoodRecipeData], None] = None
class SandboxV2NodeTypeData(BaseStruct):
nodeType: str
name: str
iconId: str
class SandboxV2NodeUpgradeData(BaseStruct):
nodeUpgradeId: str
name: str
description: str
upgradeDesc: str
upgradeTips: str
itemType: str
itemTag: str
itemCnt: int
itemRarity: int
class SandboxV2WeatherData(BaseStruct):
weatherId: str
name: str
weatherLevel: int
weatherType: str
weatherTypeName: str
weatherIconId: str
functionDesc: str
description: str
buffId: Union[str, None]
class SandboxV2StageData(BaseStruct):
stageId: str
levelId: str
code: str
name: str
description: str
actionCost: int
actionCostEnemyRush: int
class SandboxV2ZoneData(BaseStruct):
zoneId: str
zoneName: str
displayName: bool
appellation: Union[str, None]
class SandboxV2NodeBuffData(BaseStruct):
runeId: str
name: str
description: str
extra: str
iconId: str
class SandboxV2RewardItemConfigData(BaseStruct):
rewardItem: str
rewardType: str
class SandboxV2RewardData(BaseStruct):
rewardList: List[SandboxV2RewardItemConfigData]
class SandboxV2RewardCommonConfig(BaseStruct):
rewardItemId: str
rewardItemType: str
count: int
class SandboxV2RewardConfigGroupData(BaseStruct):
stageMapPreviewRewardDict: Dict[str, SandboxV2RewardData]
stageDetailPreviewRewardDict: Dict[str, SandboxV2RewardData]
trapRewardDict: Dict[str, SandboxV2RewardCommonConfig]
enemyRewardDict: Dict[str, SandboxV2RewardCommonConfig]
unitPreviewRewardDict: Dict[str, SandboxV2RewardData]
stageRewardDict: Dict[str, SandboxV2RewardData]
rushPreviewRewardDict: Dict[str, SandboxV2RewardData]
class SandboxV2FloatIconData(BaseStruct):
picId: str
picName: Union[str, None]
class SandboxV2EnemyRushTypeData(BaseStruct):
type: str
description: str
sortId: int
class SandboxV2BattleRushEnemyConfig(BaseStruct):
enemyKey: str
branchId: str
count: int
interval: float
preDelay: float
class SandboxV2BattleRushEnemyGroupConfig(BaseStruct):
enemyGroupKey: str
enemy: List[SandboxV2BattleRushEnemyConfig]
dynamicEnemy: List[str]
class RushEnemyDBRef(BaseStruct):
id: str
level: int
class SandboxV2BattleRushEnemyData(BaseStruct):
rushEnemyGroupConfigs: Dict[str, List[SandboxV2BattleRushEnemyGroupConfig]]
rushEnemyDbRef: List[RushEnemyDBRef]
class SandboxV2GameConst(BaseStruct):
mainMapId: str
baseTrapId: str
portableTrapId: str
doorTrapId: str
mineTrapId: str
neutralBossEnemyId: List[str]
nestTrapId: str
shopNpcName: str
daysBetweenAssessment: int
portableConstructUnlockLevel: int
outpostConstructUnlockLevel: int
maxEnemyCountSameTimeInRush: int
maxSaveCnt: int
firstSeasonDuration: int
seasonTransitionLoop: List[str]
seasonDurationLoop: List[int]
firstSeasonStartAngle: float
seasonTransitionAngleLoop: List[float]
seasonAngle: float
battleItemDesc: str
foodDesc: str
multipleSurvivalDayDesc: str
multipleTips: str
techProgressScore: int
otherEnemyRushName: str
surviveDayText: str
survivePeriodText: str
surviveScoreText: str
actionPointScoreText: str
nodeExploreDesc: str
dungeonExploreDesc: str
nodeCompleteDesc: str
noRiftDungeonDesc: str
baseRushedDesc: str
riftBaseDesc: str
riftBaseRushedDesc: str
dungeonTriggeredGuideQuestList: List[str]
class ItemBundle(BaseStruct):
id: str
count: int
type: str
class SandboxV2BasicConst(BaseStruct):
staminaItemId: str
goldItemId: str
dimensioncoinItemId: str
alwaysShowItemIdsConstruct: List[str]
alwaysShowItemIds: List[str]
bagBottomBarResType: List[str]
failedCookFood: str
maxFoodDuration: int
drinkCostOnce: int
drinkMakeLimit: int
specialMatWater: str
enhancedSubFoodmat: str
enhancedDuration: int
workbenchMakeLimit: int
logisticsPosLimit: int
logisticsUnlockLevel: int
logisticsDrinkCost: int
logisticsEvacuateTips: str
logisticsEvacuateWarning: str
baseRepairCost: int
portRepairCost: int
unitFenceLimit: int
cageId: str
fenceId: str
monthlyRushEntryText1: Union[str, None]
monthlyEntryUnlockText: str
monthlyEntryRiftText: str
monthlyRushIntro: str
monthlyCoin: ItemBundle
charRarityColorList: List[str]
squadCharCapacity: int
totalSquadCnt: int
toolboxCapacity: int
toolCntLimitInSquad: int
miniSquadCharCapacity: int
miniSquadDrinkCost: int
normalSquadDrinkCost: int
emptySquadDrinkCost: int
achieveTypeAll: str
constructModeBgmHome: str
battleBgmCollect: str
battleBgmHunt: str
battleBgmEnemyRush: str
battleBgmBossRush: str
imgLoadingNormalName: str
imgLoadingBaseName: str
imgUnloadingBaseName: str
class SandboxV2RiftConst(BaseStruct):
refreshRate: int
randomDungeonId: str
subTargetRewardId: str
dungeonSeasonId: str
fixedDungeonTypeName: str
randomDungeonTypeName: str
noTeamDescription: str
noTeamName: str
noTeamBackgroundId: str
noTeamSmallIconId: str
noTeamBigIconId: str
messengerEnemyId: str
riftRushEnemyGroupLimit: int
riftRushSpawnCd: int
class SandboxV2DevelopmentConst(BaseStruct):
techPointsTotal: int
class TipData(BaseStruct):
tip: str
weight: float
category: str
class RuneDataSelector(BaseStruct):
professionMask: int
buildableMask: int
charIdFilter: Union[List[str], None] = None
enemyIdFilter: Union[List[str], None] = None
enemyIdExcludeFilter: Union[List[str], None] = None
enemyLevelTypeFilter: Union[List[str], None] = None
skillIdFilter: Union[List[str], None] = None
tileKeyFilter: Union[List[str], None] = None
groupTagFilter: Union[List[str], None] = None
filterTagFilter: Union[List[str], None] = None
filterTagExcludeFilter: Union[List[str], None] = None
subProfessionExcludeFilter: Union[List[str], None] = None
mapTagFilter: Union[List[str], None] = None
class BlackboardDataPair(BaseStruct):
key: str
value: Union[float, None] = None
valueStr: Union[str, None] = None
class RuneData(BaseStruct):
key: str
selector: RuneDataSelector
blackboard: List[BlackboardDataPair]
class PackedRuneData(BaseStruct):
id: str
points: float
mutexGroupKey: Union[str, None]
description: str
runes: List[RuneData]
class LegacyInLevelRuneData(BaseException):
difficultyMask: int
key: str
professionMask: int
buildableMask: int
blackboard: List[BlackboardDataPair]
class SandboxV2QuestData(BaseStruct):
questId: str
questLine: str
questTitle: Union[str, None]
questDesc: Union[str, None]
questTargetDesc: Union[str, None]
isDisplay: bool
questRouteType: str
questLineType: str
questRouteParam: Union[str, None]
showProgressIndex: int
class SandboxV2NpcData(BaseStruct):
npcId: str
trapId: str
npcType: str
dialogIds: Dict[str, str]
npcLocation: Union[List[int], None]
npcOrientation: int
picId: str
picName: str
showPic: bool
reactSkillIndex: int
class SandboxV2DialogData(BaseStruct):
dialogId: str
avgId: str
class SandboxV2QuestLineData(BaseStruct):
questLineId: str
questLineTitle: str
questLineType: str
questLineBadgeType: int
questLineDesc: str
sortId: int
class SandboxV2GuideQuestData(BaseStruct):
questId: str
storyId: str
triggerKey: str
class SandboxV2DevelopmentData(BaseStruct):
techId: str
techType: str
positionX: int
positionY: int
frontNodeId: Union[str, None]
nextNodeIds: Union[List[str], None]
limitBaseLevel: int
tokenCost: int
techName: str
techIconId: str
nodeTitle: str
rawDesc: str
canBuffReserch: bool
class SandboxV2EventData(BaseStruct):
eventId: str
type: str
iconId: str
iconName: Union[str, None]
enterSceneId: str
class SandboxV2EventSceneData(BaseStruct):
eventSceneId: str
title: str
desc: str
choiceIds: List[str]
class SandboxV2EventChoiceData(BaseStruct):
choiceId: str
type: str
costAction: int
title: str
desc: str
expeditionId: Union[str, None]
class SandboxV2ExpeditionData(BaseStruct):
expeditionId: str
desc: str
effectDesc: str
costAction: int
costDrink: int
charCnt: int
profession: int
professions: List[str]
minEliteRank: int
duration: int
class SandboxV2EventEffectData(BaseStruct):
eventEffectId: str
buffId: str
duration: int
desc: str
class SandboxV2ShopGoodData(BaseStruct):
goodId: str
itemId: str
count: int
coinType: str
value: int
class SandboxV2ShopDialogData(BaseStruct):
seasonDialogs: Dict[str, List[str]]
afterBuyDialogs: List[str]
shopEmptyDialogs: List[str]
class SandboxV2LogisticsData(BaseStruct):
id: str
desc: str
noBuffDesc: str
iconId: str
profession: str
sortId: int
levelParams: List[str]
class SandboxV2LogisticsCharData(BaseStruct):
levelUpperLimit: int
charUpperLimit: int
class SandboxV2MonthRushData(BaseStruct):
monthlyRushId: str
startTime: int
endTime: int
isLast: bool
sortId: int
rushGroupKey: str
monthlyRushName: str
monthlyRushDes: str
weatherId: str
nodeId: str
conditionGroup: str
conditionDesc: str
rewardItemList: List[ItemBundle]
class SandboxV2RiftParamData(BaseStruct):
id: str
desc: str
iconId: str
bkColor: str
class SandboxV2RiftSubTargetData(BaseStruct):
id: str
name: str
desc: str
class SandboxV2RiftMainTargetData(BaseStruct):
id: str
title: str
desc: str
storyDesc: str
targetDayCount: int
targetType: str
questIconId: Union[str, None]
questIconName: Union[str, None]
class SandboxV2RiftGlobalEffectData(BaseStruct):
id: str
desc: str
class SandboxV2FixedRiftData(BaseStruct):
riftId: str
riftName: str
rewardGroupId: str
class SandboxV2RiftTeamBuffData(BaseStruct):
teamId: str
teamName: str
buffLevel: int
buffDesc: str
teamSmallIconId: str
teamBigIconId: str
teamDesc: str
teamBgId: str
class SandboxV2RiftDifficultyData(BaseStruct):
id: str
desc: str
difficultyLevel: int
rewardGroupId: str
class SandboxV2ArchiveQuestAvgData(BaseStruct):
avgId: str
avgName: str
class SandboxV2ArchiveQuestCgData(BaseStruct):
cgId: str
cgTitle: str
cgDesc: str
cgPath: str
class SandboxV2ArchiveQuestZoneData(BaseStruct):
zoneId: str
zoneName: str
zoneBgPicId: str
zoneNameIdEn: str
class SandboxV2ArchiveQuestData(BaseStruct):
id: str
sortId: int
questType: str
name: str
desc: str
avgDataList: List[SandboxV2ArchiveQuestAvgData]
cgDataList: List[SandboxV2ArchiveQuestCgData]
npcPicIdList: List[str]
zoneData: SandboxV2ArchiveQuestZoneData
class SandboxV2ArchiveAchievementData(BaseStruct):
id: str
achievementType: List[str]
raritySortId: int
sortId: int
name: str
desc: str
class SandboxV2ArchiveAchievementTypeData(BaseStruct):
achievementType: str
name: str
sortId: int
class SandboxV2ArchiveQuestTypeData(BaseStruct):
type: str
name: str
iconId: str
class SandboxV2ArchiveMusicUnlockData(BaseStruct):
musicId: str
unlockCondDesc: Union[str, None]
class SandboxV2BaseUpdateCondition(BaseStruct):
desc: str
limitCond: str
param: List[str]
class SandboxV2BaseUpdateFunctionPreviewDetailData(BaseStruct):
funcId: str
unlockType: str
typeTitle: str
desc: str
icon: str
darkMode: bool
sortId: int
displayType: str
class SandboxV2BaseFunctionPreviewData(BaseStruct):
previewId: str
previewValue: int
detailData: SandboxV2BaseUpdateFunctionPreviewDetailData
class SandboxV2BaseUpdateData(BaseStruct):
baseLevelId: str
baseLevel: int
conditions: List[SandboxV2BaseUpdateCondition]
items: Dict[str, int]
previewDatas: List[SandboxV2BaseFunctionPreviewData]
scoreFactor: str
portableRepairCost: int
entryCount: int
repairCost: int
class SandboxV2DevelopmentLineSegmentData(BaseStruct):
fromNodeId: str
passingNodeIds: List[str]
fromAxisPosX: int
fromAxisPosY: int
toAxisPosX: int
toAxisPosY: int
lineStyle: int
unlockBasementLevel: int
class SandboxV2BuildingNodeScoreData(BaseStruct):
nodeId: str
sortId: int
limitScore: int
class SandboxV2SeasonData(BaseStruct):
seasonType: str
name: str
functionDesc: str
description: str
color: str
class SandboxV2ConfirmIconData(BaseStruct):
iconType: str
iconPicId: str
class SandboxV2TutorialRepoCharData(BaseStruct):
instId: int
charId: str
evolvePhase: int
level: int
favorPoint: int
potentialRank: int
mainSkillLv: int
specSkillList: List[int]
class SandboxV2TutorialBasicConst(BaseStruct):
trainingQuestList: List[str]
class SandboxV2TutorialData(BaseStruct):
charRepoData: Dict[str, SandboxV2TutorialRepoCharData]
questData: Dict[str, SandboxV2QuestData]
guideQuestData: Dict[str, SandboxV2GuideQuestData]
questLineData: Dict[str, SandboxV2QuestLineData]
basicConst: SandboxV2TutorialBasicConst
class SandboxV2Data(BaseStruct):
mapData: Dict[str, SandboxV2MapData]
itemTrapData: Dict[str, SandboxV2ItemTrapData]
itemTrapTagData: Dict[str, SandboxV2ItemTrapTagData]
buildingItemData: Dict[str, SandboxV2BuildingItemData]
craftItemData: Dict[str, SandboxV2CraftItemData]
livestockProduceData: Dict[str, SandboxV2LivestockData]
craftGroupData: Dict[str, SandboxV2CraftGroupData]
alchemyRecipeData: Dict[str, SandboxV2AlchemyRecipeData]
drinkMatData: Dict[str, SandboxV2DrinkMatData]
foodMatData: Dict[str, SandboxV2FoodMatData]
foodData: Dict[str, SandboxV2FoodData]
nodeTypeData: Dict[str, SandboxV2NodeTypeData]
nodeUpgradeData: Dict[str, SandboxV2NodeUpgradeData]
weatherData: Dict[str, SandboxV2WeatherData]
stageData: Dict[str, SandboxV2StageData]
zoneData: Dict[str, SandboxV2ZoneData]
nodeBuffData: Dict[str, SandboxV2NodeBuffData]
rewardConfigData: SandboxV2RewardConfigGroupData
floatIconData: Dict[str, SandboxV2FloatIconData]
enemyRushTypeData: Dict[str, SandboxV2EnemyRushTypeData]
rushEnemyData: SandboxV2BattleRushEnemyData
gameConst: SandboxV2GameConst
basicConst: SandboxV2BasicConst
riftConst: SandboxV2RiftConst
developmentConst: SandboxV2DevelopmentConst
battleLoadingTips: List[TipData]
runeDatas: Dict[str, PackedRuneData]
itemRuneList: Union[Dict[str, List[LegacyInLevelRuneData]], None]
questData: Dict[str, SandboxV2QuestData]
npcData: Dict[str, SandboxV2NpcData]
dialogData: Dict[str, SandboxV2DialogData]
questLineData: Dict[str, SandboxV2QuestLineData]
questLineStoryData: Dict[str, str]
guideQuestData: Dict[str, SandboxV2GuideQuestData]
developmentData: Dict[str, SandboxV2DevelopmentData]
eventData: Dict[str, SandboxV2EventData]
eventSceneData: Dict[str, SandboxV2EventSceneData]
eventChoiceData: Dict[str, SandboxV2EventChoiceData]
expeditionData: Dict[str, SandboxV2ExpeditionData]
eventEffectData: Dict[str, SandboxV2EventEffectData]
shopGoodData: Dict[str, SandboxV2ShopGoodData]
shopDialogData: SandboxV2ShopDialogData
logisticsData: List[SandboxV2LogisticsData]
logisticsCharMapping: Dict[str, Dict[str, List[SandboxV2LogisticsCharData]]]
materialKeywordData: Dict[str, str]
monthRushData: List[SandboxV2MonthRushData]
riftTerrainParamData: Dict[str, SandboxV2RiftParamData]
riftClimateParamData: Dict[str, SandboxV2RiftParamData]
riftEnemyParamData: Dict[str, SandboxV2RiftParamData]
riftSubTargetData: Dict[str, SandboxV2RiftSubTargetData]
riftMainTargetData: Dict[str, SandboxV2RiftMainTargetData]
riftGlobalEffectData: Dict[str, SandboxV2RiftGlobalEffectData]
fixedRiftData: Dict[str, SandboxV2FixedRiftData]
riftTeamBuffData: Dict[str, List[SandboxV2RiftTeamBuffData]]
riftDifficultyData: Dict[str, SandboxV2RiftDifficultyData]
riftRewardDisplayData: Dict[str, List[str]]
enemyReplaceData: Dict[str, Dict[str, str]]
archiveQuestData: Dict[str, SandboxV2ArchiveQuestData]
achievementData: Dict[str, SandboxV2ArchiveAchievementData]
achievementTypeData: Dict[str, SandboxV2ArchiveAchievementTypeData]
archiveQuestTypeData: Dict[str, SandboxV2ArchiveQuestTypeData]
archiveMusicUnlockData: Dict[str, SandboxV2ArchiveMusicUnlockData]
baseUpdate: List[SandboxV2BaseUpdateData]
developmentLineSegmentDatas: List[SandboxV2DevelopmentLineSegmentData]
buildingNodeScoreData: Dict[str, SandboxV2BuildingNodeScoreData]
seasonData: Dict[str, SandboxV2SeasonData]
confirmIconData: List[SandboxV2ConfirmIconData]
shopUpdateTimeData: List[int]
tutorialData: SandboxV2TutorialData
class SandboxPermDetailData(BaseStruct):
SANDBOX_V2: Dict[str, SandboxV2Data]
class SandboxPermItemData(BaseStruct):
itemId: str
itemType: str
itemName: str
itemUsage: str
itemDesc: str
itemRarity: int
sortId: int
obtainApproach: str
class SandboxPermTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
basicInfo: Dict[str, SandboxPermBasicData]
detail: SandboxPermDetailData
itemData: Dict[str, SandboxPermItemData]

View File

@ -1,404 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class SandboxMapConstTable(BaseStruct):
directionNames: List[str]
homeNodeStageId: str
homeRushStageCode: str
homeRushStageName: str
homeRushDesc: str
crazyRevengeRushGroup: str
homeBuildModeBGM: str
class SandboxBaseConstTable(BaseStruct):
cookRegularCostItemId: str
cookRegularCostItemIdCnt: int
squadTabNameList: List[str]
charRarityColorList: List[str]
sumFoodLimitedCount: int
sumBuildingLimitedCount: int
sumTacticalLimitedCount: int
sumFoodMatLimitedCount: int
sumBuildingMatLimitedCount: int
sumStaminaPotLimitedCount: int
sumGoldLimitedCount: int
itemLimitedCount: int
blackBoxSlotCnt: int
scoutNodeUpgradeId: str
battleNodeUpgradeId: str
staminaPotCostOnce: int
staminaPotItemId: str
staminapotRedMinCnt: int
staminapotYellowMinCnt: int
staminapotGreenMinCnt: int
staminapotMaxPercentCnt: int
staminaPotActionPoint: int
goldItemId: str
toolboxSlotCapacity: int
toolboxSlotCnt: int
teamPopulationLimit: int
researchInformationDesc: str
settleFailDesc: str
settleAbortDesc: str
settleSucDesc: str
class TipData(BaseStruct):
tip: str
weight: Union[int, float]
category: str
class SandboxFoodProduceData(BaseStruct):
itemId: str
mainMaterialItems: List[str]
buffId: str
unlockDesc: str
class SandboxFoodmatBuffData(BaseStruct):
itemId: str
buffId: Union[str, None]
buffDesc: Union[str, None]
matType: str
sortId: int
class SandboxFoodStaminaData(BaseStruct):
itemId: str
potCnt: int
foodStaminaCnt: int
class SandboxBuildProduceData(BaseStruct):
itemProduceId: str
itemId: str
itemTypeText: str
materialItems: Dict[str, int]
class SandboxBuildGoldRatioData(BaseStruct):
itemId: str
ratio: int
effectDesc: str
class SandboxBuildingItemData(BaseStruct):
itemId: str
itemSubType: str
itemRarity: int
class SandboxBuildProduceUnlockData(BaseStruct):
itemId: str
buildingEffectDesc: str
buildingItemDesc: str
buildingUnlockDesc: str
class SandboxCraftItemData(BaseStruct):
itemId: str
sortId: int
getFrom: str
npcId: Union[str, None]
notObtainedDesc: str
itemType: str
class SandboxItemTrapData(BaseStruct):
itemId: str
trapId: str
trapPhase: int
trapLevel: int
skillIndex: int
skillLevel: int
class SandboxDevelopmentData(BaseStruct):
buffId: str
positionX: int
positionY: int
frontNodeId: Union[str, None]
nextNodeIds: Union[List[str], None]
buffLimitedId: str
tokenCost: int
canBuffResearch: bool
buffResearchDesc: Union[str, None]
buffName: str
buffIconId: str
nodeTitle: str
buffEffectDesc: str
class SandboxDevelopmentLimitData(BaseStruct):
buffLimitedId: str
positionX: int
buffCostLimitedCount: int
class SandboxItemToastData(BaseStruct):
itemType: str
toastDesc: str
color: str
class SandboxDevelopmentLineSegmentData(BaseStruct):
fromNodeId: str
passingNodeIds: List[str]
fromAxisPosX: int
fromAxisPosY: int
toAxisPosX: int
toAxisPosY: int
class SandboxRewardItemConfigData(BaseStruct):
rewardItem: str
rewardType: str
class SandboxRewardData(BaseStruct):
rewardList: List[SandboxRewardItemConfigData]
class SandboxRewardCommonConfig(BaseStruct):
rewardItemId: str
rewardItemType: str
count: int
dropType: Union[int, None] = None
class SandboxTrapRewardConfigData(SandboxRewardCommonConfig):
dropType: int
class SandboxRewardConfigGroupData(BaseStruct):
stagePreviewRewardDict: Dict[str, SandboxRewardData]
stageDefaultPreviewRewardDict: Dict[str, SandboxRewardData]
rushPreviewRewardDict: Dict[str, SandboxRewardData]
stageRewardDict: Dict[str, SandboxRewardData]
rushRewardDict: Dict[str, SandboxRewardData]
trapRewardDict: Dict[str, SandboxRewardCommonConfig]
enemyRewardDict: Dict[str, SandboxRewardCommonConfig]
keyWordData: Dict[str, str]
class SandboxStaminaData(BaseStruct):
levelUpperLimit: int
staminaUpperLimit: int
class SandboxNodeTypeData(BaseStruct):
nodeType: str
name: str
subName: str
iconId: str
class SandboxNodeUpgradeData(BaseStruct):
nodeUpdradeId: str
name: str
description: str
upgradeDesc: str
itemType: str
itemSubType: str
itemCnt: int
itemRarity: int
class SandboxWeatherData(BaseStruct):
weatherId: str
weatherType: str
weatherLevel: int
name: str
description: str
weatherTypeName: str
weatherTypeIconId: str
functionDesc: str
buffId: str
class SandboxStageData(BaseStruct):
stageId: str
levelId: str
code: str
name: str
loadingPicId: str
description: str
actionCost: int
powerCost: int
class SandboxEventData(BaseStruct):
eventSceneId: str
hasThumbtack: bool
class SandboxEventSceneData(BaseStruct):
choiceSceneId: str
type_: str = field(name="type")
title: str
description: str
choices: List[str]
class SandboxEventChoiceData(BaseStruct):
choiceId: str
type_: str = field(name="type")
costAction: int
finishScene: bool
title: str
description: str
class SandboxEventTypeData(BaseStruct):
eventType: str
iconId: str
class SandboxMissionData(BaseStruct):
missionId: str
desc: str
effectDesc: Union[str, None]
costAction: int
charCnt: int
professionIds: List[str]
profession: int
costStamina: int
class SandboxUnitData(BaseStruct):
id_: str = field(name="id")
name: str
class SandboxDailyDescTemplateData(BaseStruct):
type_: str = field(name="type")
templateDesc: List[str]
class RushEnemyConfig(BaseStruct):
enemyKey: str
branchId: str
count: int
interval: Union[int, float]
class RushEnemyGroupConfig(BaseStruct):
enemyGroupKey: str
weight: int
enemy: List[RushEnemyConfig]
dynamicEnemy: List[str]
class RushEnemyGroupRushEnemyDBRef(BaseStruct):
id_: str = field(name="id")
level: int
class RushEnemyGroup(BaseStruct):
rushEnemyGroupConfigs: Dict[str, List[RushEnemyGroupConfig]]
rushEnemyDbRef: List[RushEnemyGroupRushEnemyDBRef]
class RuneDataSelector(BaseStruct):
professionMask: int
buildableMask: int
charIdFilter: Union[List[str], None]
enemyIdFilter: Union[List[str], None]
enemyIdExcludeFilter: Union[List[str], None]
skillIdFilter: Union[List[str], None]
tileKeyFilter: Union[List[str], None]
groupTagFilter: Union[List[str], None]
filterTagFilter: Union[List[str], None]
subProfessionExcludeFilter: Union[List[str], None]
class Blackboard(BaseStruct):
key: str
value: Union[Union[int, float], None] = None
valueStr: Union[str, None] = None
class RuneData(BaseStruct):
key: str
selector: RuneDataSelector
blackboard: List[Blackboard]
class RuneTablePackedRuneData(BaseStruct):
id_: str = field(name="id")
points: Union[int, float]
mutexGroupKey: Union[str, None]
description: str
runes: List[RuneData]
class LegacyInLevelRuneData(BaseStruct):
difficultyMask: int
key: str
professionMask: int
buildableMask: int
blackboard: List[Blackboard]
class SandboxActTable(BaseStruct):
mapConstTable: SandboxMapConstTable
baseConstTable: SandboxBaseConstTable
battleLoadingTips: List[TipData]
foodProduceDatas: Dict[str, SandboxFoodProduceData]
foodmatDatas: Dict[str, SandboxFoodmatBuffData]
foodmatBuffDatas: Dict[str, SandboxFoodmatBuffData]
foodStaminaDatas: Dict[str, SandboxFoodStaminaData]
buildProduceDatas: Dict[str, SandboxBuildProduceData]
buildGoldRatioDatas: List[SandboxBuildGoldRatioData]
buildingItemDatas: Dict[str, SandboxBuildingItemData]
buildProduceUnlockDatas: Dict[str, SandboxBuildProduceUnlockData]
craftItemDatas: Dict[str, SandboxCraftItemData]
itemTrapDatas: Dict[str, SandboxItemTrapData]
trapDeployLimitDatas: Dict[str, int]
developmentDatas: Dict[str, SandboxDevelopmentData]
developmentLimitDatas: Dict[str, SandboxDevelopmentLimitData]
itemToastDatas: Dict[str, SandboxItemToastData]
developmentLineSegmentDatas: List[SandboxDevelopmentLineSegmentData]
rewardConfigDatas: SandboxRewardConfigGroupData
charStaminaMapping: Dict[str, Dict[str, List[SandboxStaminaData]]]
nodeTypeDatas: Dict[str, SandboxNodeTypeData]
nodeUpgradeDatas: Dict[str, SandboxNodeUpgradeData]
weatherDatas: Dict[str, SandboxWeatherData]
stageDatas: Dict[str, SandboxStageData]
eventDatas: Dict[str, SandboxEventData]
eventSceneDatas: Dict[str, SandboxEventSceneData]
eventChoiceDatas: Dict[str, SandboxEventChoiceData]
eventTypeDatas: Dict[str, SandboxEventTypeData]
missionDatas: Dict[str, SandboxMissionData]
unitData: Dict[str, SandboxUnitData]
dailyDescTemplateDatas: Dict[str, SandboxDailyDescTemplateData]
rushAvgDict: Dict[str, str]
rushEnemyGroup: RushEnemyGroup
runeDatas: Dict[str, RuneTablePackedRuneData]
itemRuneList: Dict[str, List[LegacyInLevelRuneData]]
class SandboxItemData(BaseStruct):
itemId: str
itemType: str
itemName: str
itemUsage: str
itemDesc: str
itemRarity: int
sortId: int
recommendTypeList: Union[List[str], None]
recommendPriority: int
obtainApproach: str
class SandboxTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
sandboxActTables: Dict[str, SandboxActTable]
itemDatas: Dict[str, SandboxItemData]

View File

@ -1,161 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class ShopRecommendData(BaseStruct):
imgId: str
slotIndex: int
cmd: str
param1: Union[str, None]
param2: Union[str, None]
skinId: Union[str, None]
class ShopRecommendGroup(BaseStruct):
recommendGroup: List[int]
dataList: List[ShopRecommendData]
class ShopKeeperWord(BaseStruct):
id_: str = field(name="id")
text: str
class ShopRecommendTemplateNormalGiftParam(BaseStruct):
showStartTs: int
showEndTs: int
goodId: str
giftPackageName: str
price: int
logoId: str
color: str
haveMark: bool
availCount: int
class ShopRecommendTemplateNormalSkinParam(BaseStruct):
showStartTs: int
showEndTs: int
skinIds: List[str]
skinGroupName: str
brandIconId: str
colorBack: str
colorText: str
text: str
class ShopRecommendTemplateNormalFurnParam(BaseStruct):
showStartTs: int
showEndTs: int
furnPackId: str
isNew: bool
isPackSell: bool
count: int
colorBack: str
colorText: str
actId: Union[str, None] = None
class ShopRecommendTemplateReturnSkinParam(BaseStruct):
showStartTs: int
showEndTs: int
class ShopRecommendTemplateParam(BaseStruct):
normalGiftParam: Union[ShopRecommendTemplateNormalGiftParam, None] = None
normalSkinParam: Union[ShopRecommendTemplateNormalSkinParam, None] = None
normalFurnParam: Union[ShopRecommendTemplateNormalFurnParam, None] = None
returnSkinParam: Union[ShopRecommendTemplateReturnSkinParam, None] = None
class ShopRecommendItem(BaseStruct):
tagId: str
displayType: str
tagName: str
itemTag: str
orderNum: int
startDatetime: int
endDatetime: int
groupList: List[ShopRecommendGroup]
tagWord: ShopKeeperWord
templateType: str
templateParam: Union[ShopRecommendTemplateParam, None]
class ShopCreditUnlockItem(BaseStruct):
sortId: int
unlockNum: int
charId: str
class ShopCreditUnlockGroup(BaseStruct):
id_: str = field(name="id")
index: str
startDateTime: int
charDict: List[ShopCreditUnlockItem]
class ShopClientDataShopKeeperData(BaseStruct):
welcomeWords: List[ShopKeeperWord]
clickWords: List[ShopKeeperWord]
class ShopCarouselDataItem(BaseStruct):
spriteId: str
startTime: int
endTime: int
cmd: str
param1: Union[str, None]
skinId: str
furniId: str
class ShopCarouselData(BaseStruct):
items: List[ShopCarouselDataItem]
class ChooseShopRelation(BaseStruct):
goodId: str
optionList: List[str]
class ShopClientGPData(BaseStruct):
goodId: str
displayName: str
condTrigPackageType: str
class LMTGSShopSchedule(BaseStruct):
gachaPoolId: str
LMTGSId: str
iconColor: str
iconBackColor: str
startTime: int
endTime: int
storeTextColor: Union[str, None] = None
class LMTGSShopOverlaySchedule(BaseStruct):
gachaPoolId1: str
gachaPoolId2: str
picId: str
class ShopClientTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
recommendList: List[ShopRecommendItem]
creditUnlockGroup: Dict[str, ShopCreditUnlockGroup]
shopKeeperData: ShopClientDataShopKeeperData
carousels: List[ShopCarouselData]
chooseShopRelations: List[ChooseShopRelation]
shopUnlockDict: Dict[str, str]
extraQCShopRule: List[str]
repQCShopRule: List[str]
shopGPDataDict: Dict[str, ShopClientGPData]
shopMonthlySubGoodId: str
ls: List[LMTGSShopSchedule]
os: List[LMTGSShopOverlaySchedule]

View File

@ -1,51 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class SpData(BaseStruct):
spType: int
levelUpCost: Union[List[ItemBundle], None]
maxChargeTime: int
spCost: int
initSp: int
increment: Union[int, float]
class Blackboard(BaseStruct):
key: str
value: Union[Union[int, float], None] = None
valueStr: Union[str, None] = None
class SkillDataBundleLevelData(BaseStruct):
name: str
rangeId: Union[str, None]
description: Union[str, None]
skillType: int
durationType: int
spData: SpData
prefabId: Union[str, None]
duration: Union[int, float]
blackboard: List[Blackboard]
class SkillDataBundle(BaseStruct):
skillId: str
iconId: Union[str, None]
hidden: bool
levels: List[SkillDataBundleLevelData]
class SkillTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
skills: Dict[str, SkillDataBundle]

View File

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

View File

@ -1,263 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class StageDataConditionDesc(BaseStruct):
stageId: str
completeState: int
class StageDataDisplayRewards(BaseStruct):
type_: str = field(name="type")
id_: str = field(name="id")
dropType: int
class StageDataDisplayDetailRewards(BaseStruct):
occPercent: int
type_: str = field(name="type")
id_: str = field(name="id")
dropType: int
class StageDataStageDropInfo(BaseStruct):
firstPassRewards: None
firstCompleteRewards: None
passRewards: None
completeRewards: None
displayRewards: List[StageDataDisplayRewards]
displayDetailRewards: List[StageDataDisplayDetailRewards]
class ExtraCondition(BaseStruct):
index: int
template: str
unlockParam: List[str]
class ProgressInfo(BaseStruct):
progressType: str
descList: Union[Dict[str, str], None]
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class ExtraInfo(BaseStruct):
stageId: str
rewards: List[ItemBundle]
progressInfo: ProgressInfo
class StageData(BaseStruct):
stageType: str
difficulty: str
performanceStageFlag: str
diffGroup: str
unlockCondition: List[StageDataConditionDesc]
stageId: str
levelId: Union[str, None]
zoneId: str
code: str
name: Union[str, None]
description: Union[str, None]
hardStagedId: Union[str, None]
dangerLevel: Union[str, None]
dangerPoint: Union[int, float]
loadingPicId: str
canPractice: bool
canBattleReplay: bool
apCost: int
apFailReturn: int
etItemId: Union[str, None]
etCost: int
etFailReturn: int
etButtonStyle: Union[str, None]
apProtectTimes: int
diamondOnceDrop: int
practiceTicketCost: int
dailyStageDifficulty: int
expGain: int
goldGain: int
loseExpGain: int
loseGoldGain: int
passFavor: int
completeFavor: int
slProgress: int
displayMainItem: Union[str, None]
hilightMark: bool
bossMark: bool
isPredefined: bool
isHardPredefined: bool
isSkillSelectablePredefined: bool
isStoryOnly: bool
appearanceStyle: int
stageDropInfo: StageDataStageDropInfo
startButtonOverrideId: Union[str, None]
isStagePatch: bool
mainStageId: Union[str, None]
canContinuousBattle: Union[bool, None] = None
canUseCharm: Union[bool, 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(BaseStruct):
stageId: str
activePackedRuneIds: List[str]
class RuneStageGroupData(BaseStruct):
groupId: str
activeRuneStages: List[RuneStageGroupDataRuneStageInst]
startTs: int
endTs: int
class MapThemeData(BaseStruct):
themeId: str
unitColor: str
buildableColor: Union[str, None]
themeType: Union[str, None]
trapTintColor: Union[str, None]
class TileAppendInfo(BaseStruct):
tileKey: str
name: str
description: str
isFunctional: bool
class WeeklyForceOpenTable(BaseStruct):
id_: str = field(name="id")
startTime: int
endTime: int
forceOpenList: List[str]
class TimelyDropTimeInfo(BaseStruct):
startTs: int
endTs: int
stagePic: Union[str, None]
dropPicId: Union[str, None]
stageUnlock: str
entranceDownPicId: Union[str, None]
entranceUpPicId: Union[str, None]
timelyGroupId: str
weeklyPicId: Union[str, None]
apSupplyOutOfDateDict: Dict[str, int]
class OverrideDropInfo(BaseStruct):
itemId: str
startTs: int
endTs: int
zoneRange: str
times: int
name: str
egName: str
desc1: str
desc2: str
desc3: str
dropTag: str
dropTypeDesc: str
dropInfo: Dict[str, StageDataStageDropInfo]
class TimelyDropInfo(BaseStruct):
dropInfo: Dict[str, StageDataStageDropInfo]
class StageValidInfo(BaseStruct):
startTs: int
endTs: int
class StageFogInfo(BaseStruct):
lockId: str
fogType: str
stageId: str
lockName: str
lockDesc: str
unlockItemId: str
unlockItemType: str
unlockItemNum: int
preposedStageId: str
preposedLockId: Union[str, None]
class StageStartCondRequireChar(BaseStruct):
charId: str
evolvePhase: int
class StageStartCond(BaseStruct):
requireChars: List[StageStartCondRequireChar]
excludeAssists: List[str]
isNotPass: bool
class StageDiffGroupTable(BaseStruct):
normalId: str
toughId: Union[str, None]
easyId: str
class StoryStageShowGroup(BaseStruct):
displayRecordId: str
stageId: str
accordingStageId: Union[str, None]
diffGroup: int
class SpecialBattleFinishStageData(BaseStruct):
stageId: str
skipAccomplishPerform: bool
class RecordRewardServerData(BaseStruct):
stageId: str
rewards: List[ItemBundle]
class ApProtectZoneInfoTimeRange(BaseStruct):
startTs: int
endTs: int
class ApProtectZoneInfo(BaseStruct):
zoneId: str
timeRanges: List[ApProtectZoneInfoTimeRange]
class StageTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
stages: Dict[str, StageData]
runeStageGroups: Dict[str, RuneStageGroupData]
mapThemes: Dict[str, MapThemeData]
tileInfo: Dict[str, TileAppendInfo]
forceOpenTable: Dict[str, WeeklyForceOpenTable]
timelyStageDropInfo: Dict[str, TimelyDropTimeInfo]
overrideDropInfo: Dict[str, OverrideDropInfo]
timelyTable: Dict[str, TimelyDropInfo]
stageValidInfo: Dict[str, StageValidInfo]
stageFogInfo: Dict[str, StageFogInfo]
stageStartConds: Dict[str, StageStartCond]
diffGroupTable: Dict[str, StageDiffGroupTable]
storyStageShowGroup: Dict[str, Dict[str, StoryStageShowGroup]]
specialBattleFinishStageData: Dict[str, SpecialBattleFinishStageData]
recordRewardData: Union[Dict[str, RecordRewardServerData], None]
apProtectZoneInfo: Dict[str, ApProtectZoneInfo]
actCustomStageDatas: Dict[str, Dict[str, str]]
spNormalStageIdFor4StarList: List[str]

View File

@ -1,236 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class MiniActTrialDataRuleData(BaseStruct):
ruleType: str
ruleText: str
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class MiniActTrialDataMiniActTrialRewardData(BaseStruct):
trialRewardId: str
orderId: int
actId: str
targetStoryCount: int
item: ItemBundle
class MiniActTrialDataMiniActTrialSingleData(BaseStruct):
actId: str
rewardStartTime: int
themeColor: str
rewardList: List[MiniActTrialDataMiniActTrialRewardData]
class MiniActTrialData(BaseStruct):
preShowDays: int
ruleDataList: List[MiniActTrialDataRuleData]
miniActTrialDataMap: Dict[str, MiniActTrialDataMiniActTrialSingleData]
class ActArchiveResDataPicArchiveResItemData(BaseStruct):
id_: str = field(name="id")
desc: str
assetPath: str
type_: str = field(name="type")
subType: Union[str, None]
picDescription: str
kvId: Union[str, None]
class ActArchiveResDataAudioArchiveResItemData(BaseStruct):
id_: str = field(name="id")
desc: str
name: str
class ActArchiveResDataAvgArchiveResItemData(BaseStruct):
id_: str = field(name="id")
desc: str
breifPath: Union[str, None]
contentPath: str
imagePath: str
rawBrief: Union[str, None]
titleIconPath: Union[str, None]
class ActArchiveResDataStoryArchiveResItemData(BaseStruct):
id_: str = field(name="id")
desc: str
date: Union[str, None]
pic: str
text: str
titlePic: Union[str, None]
class ActArchiveResDataNewsFormatData(BaseStruct):
typeId: str
typeName: str
typeLogo: str
typeMainLogo: str
typeMainSealing: str
class ActArchiveResDataActivityNewsLine(BaseStruct):
lineType: int
content: str
class ActArchiveResDataNewsArchiveResItemData(BaseStruct):
id_: str = field(name="id")
desc: str
newsType: str
newsFormat: ActArchiveResDataNewsFormatData
newsText: str
newsAuthor: str
paramP0: int
paramK: int
paramR: float
newsLines: List[ActArchiveResDataActivityNewsLine]
class ActArchiveResDataLandmarkArchiveResItemData(BaseStruct):
landmarkId: str
landmarkName: str
landmarkPic: str
landmarkDesc: str
landmarkEngName: str
class ActArchiveResDataLogArchiveResItemData(BaseStruct):
logId: str
logDesc: str
class ActArchiveResDataChallengeBookArchiveResItemData(BaseStruct):
storyId: str
titleName: str
storyName: str
textId: str
class ActArchiveResData(BaseStruct):
pics: Dict[str, ActArchiveResDataPicArchiveResItemData]
audios: Dict[str, ActArchiveResDataAudioArchiveResItemData]
avgs: Dict[str, ActArchiveResDataAvgArchiveResItemData]
stories: Dict[str, ActArchiveResDataStoryArchiveResItemData]
news: Dict[str, ActArchiveResDataNewsArchiveResItemData]
landmarks: Dict[str, ActArchiveResDataLandmarkArchiveResItemData]
logs: Dict[str, ActArchiveResDataLogArchiveResItemData]
challengeBooks: Dict[str, ActArchiveResDataChallengeBookArchiveResItemData]
class ActArchiveTimelineItemData(BaseStruct):
timelineId: str
timelineSortId: int
timelineTitle: str
timelineDes: str
picIdList: Union[List[str], None] = None
audioIdList: Union[List[str], None] = None
avgIdList: Union[List[str], None] = None
storyIdList: Union[List[str], None] = None
newsIdList: Union[List[str], None] = None
class ActArchiveTimelineData(BaseStruct):
timelineList: List[ActArchiveTimelineItemData]
class ActArchiveMusicItemData(BaseStruct):
musicId: str
musicSortId: int
class ActArchiveMusicData(BaseStruct):
musics: Dict[str, ActArchiveMusicItemData]
class ActArchivePicItemData(BaseStruct):
picId: str
picSortId: int
class ActArchivePicData(BaseStruct):
pics: Dict[str, ActArchivePicItemData]
class ActArchiveStoryItemData(BaseStruct):
storyId: str
storySortId: int
class ActArchiveStoryData(BaseStruct):
stories: Dict[str, ActArchiveStoryItemData]
class ActArchiveAvgItemData(BaseStruct):
avgId: str
avgSortId: int
class ActArchiveAvgData(BaseStruct):
avgs: Dict[str, ActArchiveAvgItemData]
class ActArchiveNewsItemData(BaseStruct):
newsId: str
newsSortId: int
class ActArchiveNewsData(BaseStruct):
news: Dict[str, ActArchiveNewsItemData]
class ActArchiveLandmarkItemData(BaseStruct):
landmarkId: str
landmarkSortId: int
class ActArchiveChapterLogData(BaseStruct):
chapterName: str
displayId: str
unlockDes: str
logs: List[str]
chapterIcon: str
class ActArchiveChallengeBookItemData(BaseStruct):
storyId: str
sortId: int
class ActArchiveChallengeBookData(BaseStruct):
stories: Dict[str, ActArchiveChallengeBookItemData]
class ActArchiveComponentData(BaseStruct):
pic: Union[ActArchivePicData, None] = None
timeline: Union[ActArchiveTimelineData, None] = None
music: Union[ActArchiveMusicData, None] = None
story: Union[ActArchiveStoryData, None] = None
avg: Union[ActArchiveAvgData, None] = None
news: Union[ActArchiveNewsData, None] = None
landmark: Union[Dict[str, ActArchiveLandmarkItemData], None] = None
log: Union[Dict[str, ActArchiveChapterLogData], None] = None
challengeBook: Union[ActArchiveChallengeBookData, None] = None
class ActArchiveComponentTable(BaseStruct):
components: Dict[str, ActArchiveComponentData]
class StoryReviewMetaTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
miniActTrialData: MiniActTrialData
actArchiveResData: ActArchiveResData
actArchiveData: ActArchiveComponentTable

View File

@ -1,65 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class StoryDataConditionStageCondition(BaseStruct):
stageId: str
minState: int
maxState: int
class StoryReviewInfoClientData(BaseStruct):
storyReviewType: int
storyId: str
storyGroup: str
storySort: int
storyDependence: Union[str, None]
storyCanShow: int
storyCode: Union[str, None]
storyName: str
storyPic: Union[str, None]
storyInfo: str
storyCanEnter: int
storyTxt: str
avgTag: str
unLockType: str
costItemType: str
costItemId: Union[str, None]
costItemCount: int
stageCount: int
requiredStages: Union[List[StoryDataConditionStageCondition], None]
class StoryReviewGroupClientData(BaseStruct):
id_: str = field(name="id")
name: str
entryType: str
actType: str
startTime: int
endTime: int
startShowTime: int
endShowTime: int
remakeStartTime: int
remakeEndTime: int
storyEntryPicId: Union[str, None]
storyPicId: Union[str, None]
storyMainColor: Union[str, None]
customType: int
storyCompleteMedalId: Union[str, None]
rewards: Union[List[ItemBundle], None]
infoUnlockDatas: List[StoryReviewInfoClientData]
class StoryReviewTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
storyreviewtable: Dict[str, StoryReviewGroupClientData]

View File

@ -1,51 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class StoryDataTrigger(BaseStruct):
type_: str = field(name="type")
key: Union[str, None]
useRegex: bool
class StoryDataConditionStageCondition(BaseStruct):
stageId: str
minState: int
maxState: int
class StoryDataCondition(BaseStruct):
minProgress: int
maxProgress: int
minPlayerLevel: int
requiredFlags: List[str]
excludedFlags: List[str]
requiredStages: List[StoryDataConditionStageCondition]
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class StoryData(BaseStruct):
id_: str = field(name="id")
needCommit: bool
repeatable: bool
disabled: bool
videoResource: bool
trigger: StoryDataTrigger
condition: Union[StoryDataCondition, None]
setProgress: int
setFlags: Union[List[str], None]
completedRewards: Union[List[ItemBundle], None]
class StoryTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
stories: Dict[str, StoryData]

View File

@ -1,40 +0,0 @@
from typing import List, Union
from msgspec import field
from ..common import BaseStruct
class RuneDataSelector(BaseStruct):
professionMask: int
buildableMask: int
charIdFilter: Union[List[str], None]
enemyIdFilter: Union[List[str], None]
skillIdFilter: Union[List[str], None]
tileKeyFilter: Union[List[str], None]
class Blackboard(BaseStruct):
key: str
value: Union[float, None] = None
valueStr: Union[str, None] = None
class RuneData(BaseStruct):
key: str
selector: RuneDataSelector
blackboard: List[Blackboard]
class PackedRuneData(BaseStruct):
id_: str = field(name="id")
points: float
mutexGroupKey: Union[str, None]
description: str
runes: List[RuneData]
class TechBuffTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
runes: List[PackedRuneData]

View File

@ -1,23 +0,0 @@
from typing import List
from ..common import BaseStruct
class TipData(BaseStruct):
tip: str
weight: float
category: str
class WorldViewTip(BaseStruct):
title: str
description: str
backgroundPicId: str
weight: float
class TipTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
tips: List[TipData]
worldViewTips: List[WorldViewTip]

View File

@ -1,176 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class CharacterDataUnlockCondition(BaseStruct):
phase: int
level: int
class Blackboard(BaseStruct):
key: str
value: Union[float, None] = None
valueStr: Union[str, None] = None
class CharacterDataTraitData(BaseStruct):
unlockCondition: CharacterDataUnlockCondition
requiredPotentialRank: int
blackboard: List[Blackboard]
overrideDescripton: Union[str, None]
prefabKey: Union[str, None]
rangeId: Union[str, None]
class CharacterDataTraitDataBundle(BaseStruct):
candidates: List[CharacterDataTraitData]
class AttributesData(BaseStruct):
maxHp: int
atk: int
def_: int = field(name="def")
magicResistance: float
cost: int
blockCnt: int
moveSpeed: float
attackSpeed: float
baseAttackTime: float
respawnTime: int
hpRecoveryPerSec: float
spRecoveryPerSec: float
maxDeployCount: int
maxDeckStackCnt: int
tauntLevel: int
massLevel: int
baseForceLevel: int
stunImmune: bool
silenceImmune: bool
sleepImmune: bool
frozenImmune: bool
levitateImmune: bool
disarmedCombatImmune: bool
class CharacterDataAttributesKeyFrame(BaseStruct):
level: int
data: AttributesData
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class CharacterDataPhaseData(BaseStruct):
characterPrefabKey: str
rangeId: Union[str, None]
maxLevel: int
attributesKeyFrames: List[CharacterDataAttributesKeyFrame]
evolveCost: Union[List[ItemBundle], None]
class CharacterDataMainSkillSpecializeLevelData(BaseStruct):
unlockCond: CharacterDataUnlockCondition
lvlUpTime: int
levelUpCost: Union[List[ItemBundle], None]
class CharacterDataMainSkill(BaseStruct):
skillId: Union[str, None]
overridePrefabKey: Union[str, None]
overrideTokenKey: Union[str, None]
levelUpCostCond: List[CharacterDataMainSkillSpecializeLevelData]
unlockCond: CharacterDataUnlockCondition
class TalentData(BaseStruct):
unlockCondition: CharacterDataUnlockCondition
requiredPotentialRank: int
prefabKey: str
name: Union[str, None]
description: Union[str, None]
rangeId: Union[str, None]
blackboard: List[Blackboard]
class CharacterDataTalentDataBundle(BaseStruct):
candidates: Union[List[TalentData], None]
class AttributeModifierDataAttributeModifier(BaseStruct):
attributeType: int
formulaItem: int
value: float
loadFromBlackboard: bool
fetchBaseValueFromSourceEntity: bool
class AttributeModifierData(BaseStruct):
abnormalFlags: Union[List[str], None]
abnormalImmunes: Union[List[str], None]
abnormalAntis: Union[List[str], None]
abnormalCombos: Union[List[str], None]
abnormalComboImmunes: Union[List[str], None]
attributeModifiers: List[AttributeModifierDataAttributeModifier]
class ExternalBuff(BaseStruct):
attributes: AttributeModifierData
class CharacterDataPotentialRank(BaseStruct):
type_: int = field(name="type")
description: str
buff: Union[ExternalBuff, None]
equivalentCost: Union[ItemBundle, None]
class CharacterDataSkillLevelCost(BaseStruct):
unlockCond: CharacterDataUnlockCondition
lvlUpCost: Union[List[ItemBundle], None]
class TokenCharacterData(BaseStruct):
name: str
description: Union[str, None]
canUseGeneralPotentialItem: bool
canUseActivityPotentialItem: bool
potentialItemId: Union[str, None]
activityPotentialItemId: Union[str, None]
nationId: Union[str, None]
groupId: Union[str, None]
teamId: Union[str, None]
displayNumber: Union[str, None]
appellation: str
position: str
tagList: Union[List[str], None]
itemUsage: Union[str, None]
itemDesc: Union[str, None]
itemObtainApproach: Union[str, None]
isNotObtainable: bool
isSpChar: bool
maxPotentialLevel: int
rarity: int
profession: str
subProfessionId: str
trait: Union[CharacterDataTraitDataBundle, None]
phases: List[CharacterDataPhaseData]
skills: Union[List[CharacterDataMainSkill], None]
talents: Union[List[CharacterDataTalentDataBundle], None]
potentialRanks: Union[List[CharacterDataPotentialRank], None]
favorKeyFrames: Union[List[CharacterDataAttributesKeyFrame], None]
allSkillLvlup: Union[List[CharacterDataSkillLevelCost], None]
minPowerId: str
maxPowerId: str
tokenKey: Union[str, None] = None
class TokenTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
tokens: Dict[str, TokenCharacterData]

View File

@ -1,67 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class UnlockCondition(BaseStruct):
phase: int
level: int
class TraitDescBundle(BaseStruct):
unlockCondition: UnlockCondition
requiredPotentialRank: int
overrideDescription: None
additiveDescription: str
class UniEquipData(BaseStruct):
uniEquipId: str
uniEquipName: str
uniEquipIcon: str
uniEquipDesc: str
typeIcon: str
typeName: str
showEvolvePhase: int
unlockEvolvePhase: int
charId: str
tmplId: None
showLevel: int
unlockLevel: int
unlockFavorPercent: int
missionList: List[str]
itemCost: Union[List[ItemBundle], None]
type_: str = field(name="type")
traitDescBundle: List[TraitDescBundle]
class UniEquipMissionData(BaseStruct):
template: Union[str, None]
desc: Union[str, None]
paramList: List[str]
uniEquipMissionId: str
uniEquipMissionSort: int
uniEquipId: str
class SubProfessionData(BaseStruct):
subProfessionId: str
subProfessionName: str
subProfessionCatagory: int
class UniequipData(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
equipDict: Dict[str, UniEquipData]
missionList: Dict[str, UniEquipMissionData]
subProfDict: Dict[str, SubProfessionData]
charEquip: Dict[str, List[str]]

View File

@ -1,70 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class UniEquipData(BaseStruct):
uniEquipId: str
uniEquipName: str
uniEquipIcon: str
uniEquipDesc: str
typeIcon: str
typeName1: str
typeName2: Union[str, None]
equipShiningColor: str
showEvolvePhase: int
unlockEvolvePhase: int
charId: str
tmplId: Union[str, None]
showLevel: int
unlockLevel: int
unlockFavorPoint: int
missionList: List[str]
itemCost: Union[Dict[str, List[ItemBundle]], None]
type_: str = field(name="type")
uniEquipGetTime: int
charEquipOrder: int
class UniEquipMissionData(BaseStruct):
template: str
desc: str
paramList: List[str]
uniEquipMissionId: str
uniEquipMissionSort: int
uniEquipId: str
jumpStageId: Union[str, None]
class SubProfessionData(BaseStruct):
subProfessionId: str
subProfessionName: str
subProfessionCatagory: int
class UniEquipTrack(BaseStruct):
charId: str
equipId: str
class UniEquipTimeInfo(BaseStruct):
timeStamp: int
trackList: List[UniEquipTrack]
class UniEquipTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
equipDict: Dict[str, UniEquipData]
missionList: Dict[str, UniEquipMissionData]
subProfDict: Dict[str, SubProfessionData]
charEquip: Dict[str, List[str]]
equipTrackDict: List[UniEquipTimeInfo]

View File

@ -1,112 +0,0 @@
from typing import Dict, List, Union
from msgspec import field
from ..common import BaseStruct
class ZoneData(BaseStruct):
zoneID: str
zoneIndex: int
type_: str = field(name="type")
zoneNameFirst: Union[str, None]
zoneNameSecond: Union[str, None]
zoneNameTitleCurrent: Union[str, None]
zoneNameTitleUnCurrent: Union[str, None]
zoneNameTitleEx: Union[str, None]
zoneNameThird: Union[str, None]
lockedText: Union[str, None]
canPreview: bool
class WeeklyZoneData(BaseStruct):
daysOfWeek: List[int]
type_: str = field(name="type")
class ZoneValidInfo(BaseStruct):
startTs: int
endTs: int
class MainlineZoneData(BaseStruct):
zoneId: str
chapterId: str
preposedZoneId: Union[str, None]
zoneIndex: int
startStageId: str
endStageId: str
mainlneBgName: str
recapId: str
recapPreStageId: str
buttonName: str
buttonStyle: str
spoilAlert: bool
zoneOpenTime: int
diffGroup: List[int]
class ItemBundle(BaseStruct):
id_: str = field(name="id")
count: int
type_: str = field(name="type")
class RecordRewardInfo(BaseStruct):
bindStageId: str
stageDiff1: int
stageDiff: int
picRes: Union[str, None]
textPath: Union[str, None]
textDesc: Union[str, None]
recordReward: Union[List[ItemBundle], None]
class ZoneRecordData(BaseStruct):
recordId: str
zoneId: str
recordTitleName: str
preRecordId: Union[str, None]
nodeTitle1: Union[str, None]
nodeTitle2: Union[str, None]
rewards: List[RecordRewardInfo]
class ZoneRecordUnlockData(BaseStruct):
noteId: str
zoneId: str
initialName: str
finalName: Union[str, None]
accordingExposeId: Union[str, None]
initialDes: str
finalDes: Union[str, None]
remindDes: Union[str, None]
class ZoneRecordGroupData(BaseStruct):
zoneId: str
records: List[ZoneRecordData]
unlockData: ZoneRecordUnlockData
class ZoneRecordMissionData(BaseStruct):
missionId: str
recordStageId: str
templateDesc: str
desc: str
class ZoneMetaData(BaseStruct):
ZoneRecordMissionData: Dict[str, ZoneRecordMissionData]
class ZoneTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8"
zones: Dict[str, ZoneData]
weeklyAdditionInfo: Dict[str, WeeklyZoneData]
zoneValidInfo: Dict[str, ZoneValidInfo]
mainlineAdditionInfo: Dict[str, MainlineZoneData]
zoneRecordGroupedData: Dict[str, ZoneRecordGroupData]
zoneRecordRewardData: Dict[str, List[str]]
zoneMetaData: ZoneMetaData

View File

@ -1,5 +1,3 @@
from typing import Dict, List, Union
from msgspec import Struct, field
@ -37,17 +35,17 @@ class ArknightsAttendanceAwardResource(Struct):
name: str
rarity: int
sortId: int
otherSource: List[str]
otherSource: list[str]
classifyType: str
stageDropList: List[ArknightsAttendanceStageDropListItem]
buildingProductList: List[ArknightsAttendanceBuildingProductListItem]
stageDropList: list[ArknightsAttendanceStageDropListItem]
buildingProductList: list[ArknightsAttendanceBuildingProductListItem]
class ArknightsAttendanceCalendarModel(Struct):
currentTs: str
calendar: List[ArknightsAttendanceCalendar]
records: List[Union[ArknightsAttendanceRecord, None]]
resourceInfoMap: Dict[str, ArknightsAttendanceAwardResource]
calendar: list[ArknightsAttendanceCalendar]
records: list[ArknightsAttendanceRecord | None]
resourceInfoMap: dict[str, ArknightsAttendanceAwardResource]
################
@ -61,7 +59,7 @@ class ArknightsAttendanceAward(Struct):
class ArknightsAttendanceModel(Struct):
ts: str
awards: List[ArknightsAttendanceAward]
awards: list[ArknightsAttendanceAward]
resourceInfoMap: dict
@ -116,7 +114,7 @@ class UserGameStatus(Struct):
charCnt: int
furnitureCnt: int
skinCnt: int
avatar: Union[UserGameStatusAvatar, None] = None
avatar: UserGameStatusAvatar | None = None
class UserMeInfoRts(Struct):
@ -137,7 +135,7 @@ class UserMeInfo(Struct):
avatar: str
backgroundCode: int
isCreator: bool
creatorIdentifiers: List[str]
creatorIdentifiers: list[str]
status: int
operationStatus: int
identity: int
@ -152,7 +150,7 @@ class UserMeInfo(Struct):
class ArknightsUserMeModel(Struct, omit_defaults=True):
user: UserMeInfo
userRts: UserMeInfoRts
userSanctionList: List[str]
userSanctionList: list[str]
gameStatus: UserGameStatus
moderator: UserMeModerator
userInfoApply: UserMeInfoApply
@ -180,7 +178,7 @@ class PlayerManufactureFormulaInfo(Struct):
count: int
weight: int
costPoint: int
costs: Union[List[PlayerManufactureFormulaCostsInfo], None] = None
costs: list[PlayerManufactureFormulaCostsInfo] | None = None
class PlayerEquipmentInfo(Struct):
@ -188,9 +186,9 @@ class PlayerEquipmentInfo(Struct):
name: str
typeIcon: str
shiningColor: str
desc: Union[str, None] = None
typeName1: Union[str, None] = None
typeName2: Union[str, None] = None
desc: str | None = None
typeName1: str | None = None
typeName2: str | None = None
class PlayerCampaignZoneInfo(Struct):
@ -221,8 +219,8 @@ class PlayerTowerInfo(Struct):
name: str
subName: str
picUrl: str
hasHard: Union[bool, None] = None
stageNum: Union[int, None] = None
hasHard: bool | None = None
stageNum: int | None = None
class PlayerZoneInfo(Struct):
@ -238,9 +236,9 @@ class PlayerActivityInfo(Struct):
rewardEndTime: int
isReplicate: bool
type_: str = field(name="type")
dropItemIds: List[str]
shopGoodItemIds: List[str]
favorUpList: List[str]
dropItemIds: list[str]
shopGoodItemIds: list[str]
favorUpList: list[str]
picUrl: str
@ -257,13 +255,13 @@ class PlayerSkinInfo(Struct):
displayTagId: str
name: str
charId: str
brandName: Union[str, None] = None
brandCapitalName: Union[str, None] = None
illustId: Union[str, None] = None
dynIllustId: Union[str, None] = None
avatarId: Union[str, None] = None
portraitId: Union[str, None] = None
skinGroupId: Union[str, None] = None
brandName: str | None = None
brandCapitalName: str | None = None
illustId: str | None = None
dynIllustId: str | None = None
avatarId: str | None = None
portraitId: str | None = None
skinGroupId: str | None = None
class PlayerCharInfo(Struct):
@ -287,14 +285,14 @@ class ActivityZone(Struct):
zoneReplicaId: str
clearedStage: int
totalStage: int
stageStatus: Union[List[ActivityZoneStageStatus], None] = None
stageStatus: list[ActivityZoneStageStatus] | None = None
class PlayerActivity(Struct):
actId: str
actReplicaId: str
zones: List[ActivityZone]
type_: Union[str, None] = field(name="type", default=None)
zones: list[ActivityZone]
type_: str | None = field(name="type", default=None)
class RewoardItem(Struct):
@ -316,12 +314,12 @@ class RogueRecord(Struct):
rogueId: str
relicCnt: int
bank: BankItem
mission: Union[RewoardItem, None] = None
clearTime: Union[int, None] = None
mission: RewoardItem | None = None
clearTime: int | None = None
class PlayerRogue(Struct):
records: List[RogueRecord]
records: list[RogueRecord]
class TowerReward(Struct):
@ -333,14 +331,14 @@ class TowerReward(Struct):
class TowerRecord(Struct):
towerId: str
best: int
hasHard: Union[bool, None] = None
stageNum: Union[int, None] = None
unlockHard: Union[bool, None] = None
hardBest: Union[int, None] = None
hasHard: bool | None = None
stageNum: int | None = None
unlockHard: bool | None = None
hardBest: int | None = None
class PlayerTower(Struct):
records: List[TowerRecord]
records: list[TowerRecord]
reward: TowerReward
@ -355,7 +353,7 @@ class CampaignRecord(Struct):
class PlayerCampaign(Struct):
records: List[CampaignRecord]
records: list[CampaignRecord]
reward: CampaignReward
@ -368,8 +366,8 @@ class PlayerRecruit(Struct):
startTs: int
finishTs: int
state: int
duration: Union[int, None] = None
selectTags: Union[List[RecruitTag], None] = None
duration: int | None = None
selectTags: list[RecruitTag] | None = None
class BuildingTrainingTrainee(Struct):
@ -390,7 +388,7 @@ class BuildingClue(Struct):
received: int
dailyReward: bool
needReceive: int
board: List[str]
board: list[str]
sharing: bool
shareCompleteTime: int
@ -418,7 +416,7 @@ class BuildingControl(Struct):
slotId: str
slotState: int
level: int
chars: List[BuildingChar]
chars: list[BuildingChar]
class BuildingCorridor(Struct):
@ -452,14 +450,14 @@ class BuildingTraining(Struct):
lastUpdateTime: int
remainSecs: int
slotState: int
trainee: Union[BuildingTrainingTrainee, None]
trainer: Union[BuildingTrainingTrainer, None]
trainee: BuildingTrainingTrainee | None
trainer: BuildingTrainingTrainer | None
class BuildingHire(Struct):
slotId: str
level: int
chars: List[BuildingChar]
chars: list[BuildingChar]
state: int
refreshCount: int
completeWorkTime: int
@ -469,7 +467,7 @@ class BuildingHire(Struct):
class BuildingMeeting(Struct):
slotId: str
level: int
chars: List[BuildingChar]
chars: list[BuildingChar]
clue: BuildingClue
lastUpdateTime: int
completeWorkTime: int
@ -478,7 +476,7 @@ class BuildingMeeting(Struct):
class BuildingDormitories(Struct):
slotId: str
level: int
chars: List[BuildingChar]
chars: list[BuildingChar]
comfort: int
@ -491,7 +489,7 @@ class BuildingStockDelivery(Struct):
class BuildingStock(Struct):
instId: int
type_: str = field(name="type")
delivery: List[BuildingStockDelivery]
delivery: list[BuildingStockDelivery]
gain: BuildingStockDelivery
isViolated: bool
@ -499,18 +497,18 @@ class BuildingStock(Struct):
class BuildingTradings(Struct):
slotId: str
level: int
chars: List[BuildingChar]
chars: list[BuildingChar]
completeWorkTime: int
lastUpdateTime: int
strategy: str
stock: List[BuildingStock]
stock: list[BuildingStock]
stockLimit: int
class BuildingManufactures(Struct):
slotId: str
level: int
chars: List[BuildingChar]
chars: list[BuildingChar]
completeWorkTime: int
lastUpdateTime: int
formulaId: str
@ -524,7 +522,7 @@ class BuildingManufactures(Struct):
class BuildingPower(Struct):
slotId: str
level: int
chars: List[BuildingChar]
chars: list[BuildingChar]
class BuildingTiredChar(Struct):
@ -538,19 +536,19 @@ class BuildingTiredChar(Struct):
class PlayerBuilding(Struct):
tiredChars: Union[List[BuildingTiredChar], None]
powers: Union[List[BuildingPower], None]
manufactures: Union[List[BuildingManufactures], None]
tradings: Union[List[BuildingTradings], None]
dormitories: Union[List[BuildingDormitories], None]
meeting: Union[BuildingMeeting, None]
hire: Union[BuildingHire, None]
tiredChars: list[BuildingTiredChar] | None
powers: list[BuildingPower] | None
manufactures: list[BuildingManufactures] | None
tradings: list[BuildingTradings] | None
dormitories: list[BuildingDormitories] | None
meeting: BuildingMeeting | None
hire: BuildingHire | None
labor: BuildingLabor
furniture: BuildingFurniture
elevators: List[BuildingElevator]
corridors: Union[List[BuildingCorridor], None]
elevators: list[BuildingElevator]
corridors: list[BuildingCorridor] | None
control: BuildingControl
training: Union[BuildingTraining, None] = None
training: BuildingTraining | None = None
class PlayerInfoSkin(Struct):
@ -576,8 +574,8 @@ class PlayerInfoChar(Struct):
evolvePhase: int
potentialRank: int
mainSkillLvl: int
skills: Union[List[PlayerInfoCharSkill], None]
equip: Union[List[PlayerInfoCharEquip], None]
skills: list[PlayerInfoCharSkill] | None
equip: list[PlayerInfoCharEquip] | None
favorPercent: int
defaultSkillId: str
gainTime: int
@ -599,14 +597,14 @@ class PlayerAssistChar(Struct):
skillId: str
mainSkillLvl: int
specializeLevel: int
equip: Union[PlayerAssistCharEquip, None]
equip: PlayerAssistCharEquip | None
class PlayerMedal(Struct):
type_: str = field(name="type")
template: str
templateMedalList: List[str]
customMedalLayout: List[Union[str, None]]
templateMedalList: list[str]
customMedalLayout: list[str | None]
total: int
@ -649,7 +647,7 @@ class PlayerStatus(Struct):
furnitureCnt: int
skinCnt: int
exp: PlayerStatusExp
avatar: Union[PlayerStatusAvatar, None] = None
avatar: PlayerStatusAvatar | None = None
class DisplayShowConfig(Struct):
@ -702,12 +700,12 @@ class PlayerSandboxList(Struct):
maxDay: int
maxDayChallenge: int
mainQuest: int
subQuest: List[Union[PlayerSandboxSubQuest, None]]
subQuest: list[PlayerSandboxSubQuest | None]
baseLv: int
unlockNode: int
enemyKill: int
createRift: int
fixRift: List[int]
fixRift: list[int]
picUrl: str
@ -715,35 +713,35 @@ class ArknightsPlayerInfoModel(Struct, omit_defaults=True, gc=False):
currentTs: int
showConfig: DisplayShowConfig
status: PlayerStatus
assistChars: List[PlayerAssistChar]
chars: List[PlayerInfoChar]
skins: List[PlayerInfoSkin]
assistChars: list[PlayerAssistChar]
chars: list[PlayerInfoChar]
skins: list[PlayerInfoSkin]
building: PlayerBuilding
recruit: List[PlayerRecruit]
recruit: list[PlayerRecruit]
campaign: PlayerCampaign
tower: PlayerTower
rogue: PlayerRogue
routine: PlayerRoutine
activity: List[PlayerActivity]
charInfoMap: Dict[str, PlayerCharInfo]
skinInfoMap: Dict[str, PlayerSkinInfo]
stageInfoMap: Dict[str, PlayerStageInfo]
activityInfoMap: Dict[str, PlayerActivityInfo]
towerInfoMap: Dict[str, PlayerTowerInfo]
rogueInfoMap: Dict[str, PlayerRogueInfo]
campaignInfoMap: Dict[str, PlayerCampaignInfo]
campaignZoneInfoMap: Dict[str, PlayerCampaignZoneInfo]
equipmentInfoMap: Dict[str, PlayerEquipmentInfo]
manufactureFormulaInfoMap: Dict[str, PlayerManufactureFormulaInfo]
charAssets: List[Union[str, None]]
skinAssets: List[Union[str, None]]
activityBannerList: Dict[str, List[PlayerActivityBannerList]]
bossRush: List[Union[PlayerBossRustList, None]]
bannerList: List[Union[PlayerBannerList, None]]
sandbox: List[Union[PlayerSandboxList, None]]
medal: Union[PlayerMedal, None] = None
zoneInfoMap: Union[Dict[str, PlayerZoneInfo], None] = None
medalInfoMap: Union[Dict[str, PlayerMedalInfo], None] = None
activity: list[PlayerActivity]
charInfoMap: dict[str, PlayerCharInfo]
skinInfoMap: dict[str, PlayerSkinInfo]
stageInfoMap: dict[str, PlayerStageInfo]
activityInfoMap: dict[str, PlayerActivityInfo]
towerInfoMap: dict[str, PlayerTowerInfo]
rogueInfoMap: dict[str, PlayerRogueInfo]
campaignInfoMap: dict[str, PlayerCampaignInfo]
campaignZoneInfoMap: dict[str, PlayerCampaignZoneInfo]
equipmentInfoMap: dict[str, PlayerEquipmentInfo]
manufactureFormulaInfoMap: dict[str, PlayerManufactureFormulaInfo]
charAssets: list[str | None]
skinAssets: list[str | None]
activityBannerList: dict[str, list[PlayerActivityBannerList]]
bossRush: list[PlayerBossRustList | None]
bannerList: list[PlayerBannerList | None]
sandbox: list[PlayerSandboxList | None]
medal: PlayerMedal | None = None
zoneInfoMap: dict[str, PlayerZoneInfo] | None = None
medalInfoMap: dict[str, PlayerMedalInfo] | None = None
################

215
pdm.lock generated
View File

@ -5,10 +5,10 @@
groups = ["default", "dev"]
strategy = []
lock_version = "4.5.0"
content_hash = "sha256:9d184cabd7da10f30ef3d9a026d1c594ded6b1ae21ef3a31b7278becd87cdb3f"
content_hash = "sha256:e7ff881ba70a1db89bad753a0cdfd1074e5c9bb4f1f618cab54b67656af27a9d"
[[metadata.targets]]
requires_python = "~=3.10"
requires_python = "~=3.11"
[[package]]
name = "annotated-types"
@ -25,18 +25,18 @@ files = [
[[package]]
name = "anyio"
version = "3.7.1"
requires_python = ">=3.7"
version = "4.8.0"
requires_python = ">=3.9"
summary = "High level compatibility layer for multiple asynchronous event loop implementations"
dependencies = [
"exceptiongroup; python_version < \"3.11\"",
"exceptiongroup>=1.0.2; python_version < \"3.11\"",
"idna>=2.8",
"sniffio>=1.1",
"typing-extensions; python_version < \"3.8\"",
"typing-extensions>=4.5; python_version < \"3.13\"",
]
files = [
{file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"},
{file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"},
{file = "anyio-4.8.0-py3-none-any.whl", hash = "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a"},
{file = "anyio-4.8.0.tar.gz", hash = "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a"},
]
[[package]]
@ -48,18 +48,6 @@ dependencies = [
"pycparser",
]
files = [
{file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"},
{file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"},
{file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"},
{file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"},
{file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"},
{file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"},
{file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"},
{file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"},
{file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"},
{file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"},
{file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"},
{file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"},
{file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"},
{file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"},
{file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"},
@ -99,75 +87,67 @@ files = [
[[package]]
name = "cryptography"
version = "44.0.0"
version = "44.0.2"
requires_python = "!=3.9.0,!=3.9.1,>=3.7"
summary = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
dependencies = [
"cffi>=1.12; platform_python_implementation != \"PyPy\"",
]
files = [
{file = "cryptography-44.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:84111ad4ff3f6253820e6d3e58be2cc2a00adb29335d4cacb5ab4d4d34f2a123"},
{file = "cryptography-44.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15492a11f9e1b62ba9d73c210e2416724633167de94607ec6069ef724fad092"},
{file = "cryptography-44.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831c3c4d0774e488fdc83a1923b49b9957d33287de923d58ebd3cec47a0ae43f"},
{file = "cryptography-44.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:761817a3377ef15ac23cd7834715081791d4ec77f9297ee694ca1ee9c2c7e5eb"},
{file = "cryptography-44.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3c672a53c0fb4725a29c303be906d3c1fa99c32f58abe008a82705f9ee96f40b"},
{file = "cryptography-44.0.0-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:4ac4c9f37eba52cb6fbeaf5b59c152ea976726b865bd4cf87883a7e7006cc543"},
{file = "cryptography-44.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ed3534eb1090483c96178fcb0f8893719d96d5274dfde98aa6add34614e97c8e"},
{file = "cryptography-44.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f3f6fdfa89ee2d9d496e2c087cebef9d4fcbb0ad63c40e821b39f74bf48d9c5e"},
{file = "cryptography-44.0.0-cp37-abi3-win32.whl", hash = "sha256:eb33480f1bad5b78233b0ad3e1b0be21e8ef1da745d8d2aecbb20671658b9053"},
{file = "cryptography-44.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:abc998e0c0eee3c8a1904221d3f67dcfa76422b23620173e28c11d3e626c21bd"},
{file = "cryptography-44.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:660cb7312a08bc38be15b696462fa7cc7cd85c3ed9c576e81f4dc4d8b2b31591"},
{file = "cryptography-44.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1923cb251c04be85eec9fda837661c67c1049063305d6be5721643c22dd4e2b7"},
{file = "cryptography-44.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:404fdc66ee5f83a1388be54300ae978b2efd538018de18556dde92575e05defc"},
{file = "cryptography-44.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:c5eb858beed7835e5ad1faba59e865109f3e52b3783b9ac21e7e47dc5554e289"},
{file = "cryptography-44.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f53c2c87e0fb4b0c00fa9571082a057e37690a8f12233306161c8f4b819960b7"},
{file = "cryptography-44.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:9e6fc8a08e116fb7c7dd1f040074c9d7b51d74a8ea40d4df2fc7aa08b76b9e6c"},
{file = "cryptography-44.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d2436114e46b36d00f8b72ff57e598978b37399d2786fd39793c36c6d5cb1c64"},
{file = "cryptography-44.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a01956ddfa0a6790d594f5b34fc1bfa6098aca434696a03cfdbe469b8ed79285"},
{file = "cryptography-44.0.0-cp39-abi3-win32.whl", hash = "sha256:eca27345e1214d1b9f9490d200f9db5a874479be914199194e746c893788d417"},
{file = "cryptography-44.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:708ee5f1bafe76d041b53a4f95eb28cdeb8d18da17e597d46d7833ee59b97ede"},
{file = "cryptography-44.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:37d76e6863da3774cd9db5b409a9ecfd2c71c981c38788d3fcfaf177f447b731"},
{file = "cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:f677e1268c4e23420c3acade68fac427fffcb8d19d7df95ed7ad17cdef8404f4"},
{file = "cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f5e7cb1e5e56ca0933b4873c0220a78b773b24d40d186b6738080b73d3d0a756"},
{file = "cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:8b3e6eae66cf54701ee7d9c83c30ac0a1e3fa17be486033000f2a73a12ab507c"},
{file = "cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:be4ce505894d15d5c5037167ffb7f0ae90b7be6f2a98f9a5c3442395501c32fa"},
{file = "cryptography-44.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:62901fb618f74d7d81bf408c8719e9ec14d863086efe4185afd07c352aee1d2c"},
{file = "cryptography-44.0.0.tar.gz", hash = "sha256:cd4e834f340b4293430701e772ec543b0fbe6c2dea510a5286fe0acabe153a02"},
]
[[package]]
name = "exceptiongroup"
version = "1.1.3"
requires_python = ">=3.7"
summary = "Backport of PEP 654 (exception groups)"
files = [
{file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"},
{file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"},
{file = "cryptography-44.0.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:efcfe97d1b3c79e486554efddeb8f6f53a4cdd4cf6086642784fa31fc384e1d7"},
{file = "cryptography-44.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29ecec49f3ba3f3849362854b7253a9f59799e3763b0c9d0826259a88efa02f1"},
{file = "cryptography-44.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc821e161ae88bfe8088d11bb39caf2916562e0a2dc7b6d56714a48b784ef0bb"},
{file = "cryptography-44.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3c00b6b757b32ce0f62c574b78b939afab9eecaf597c4d624caca4f9e71e7843"},
{file = "cryptography-44.0.2-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7bdcd82189759aba3816d1f729ce42ffded1ac304c151d0a8e89b9996ab863d5"},
{file = "cryptography-44.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:4973da6ca3db4405c54cd0b26d328be54c7747e89e284fcff166132eb7bccc9c"},
{file = "cryptography-44.0.2-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:4e389622b6927d8133f314949a9812972711a111d577a5d1f4bee5e58736b80a"},
{file = "cryptography-44.0.2-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:f514ef4cd14bb6fb484b4a60203e912cfcb64f2ab139e88c2274511514bf7308"},
{file = "cryptography-44.0.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1bc312dfb7a6e5d66082c87c34c8a62176e684b6fe3d90fcfe1568de675e6688"},
{file = "cryptography-44.0.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b721b8b4d948b218c88cb8c45a01793483821e709afe5f622861fc6182b20a7"},
{file = "cryptography-44.0.2-cp37-abi3-win32.whl", hash = "sha256:51e4de3af4ec3899d6d178a8c005226491c27c4ba84101bfb59c901e10ca9f79"},
{file = "cryptography-44.0.2-cp37-abi3-win_amd64.whl", hash = "sha256:c505d61b6176aaf982c5717ce04e87da5abc9a36a5b39ac03905c4aafe8de7aa"},
{file = "cryptography-44.0.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:8e0ddd63e6bf1161800592c71ac794d3fb8001f2caebe0966e77c5234fa9efc3"},
{file = "cryptography-44.0.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81276f0ea79a208d961c433a947029e1a15948966658cf6710bbabb60fcc2639"},
{file = "cryptography-44.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a1e657c0f4ea2a23304ee3f964db058c9e9e635cc7019c4aa21c330755ef6fd"},
{file = "cryptography-44.0.2-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6210c05941994290f3f7f175a4a57dbbb2afd9273657614c506d5976db061181"},
{file = "cryptography-44.0.2-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1c3572526997b36f245a96a2b1713bf79ce99b271bbcf084beb6b9b075f29ea"},
{file = "cryptography-44.0.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:b042d2a275c8cee83a4b7ae30c45a15e6a4baa65a179a0ec2d78ebb90e4f6699"},
{file = "cryptography-44.0.2-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:d03806036b4f89e3b13b6218fefea8d5312e450935b1a2d55f0524e2ed7c59d9"},
{file = "cryptography-44.0.2-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:c7362add18b416b69d58c910caa217f980c5ef39b23a38a0880dfd87bdf8cd23"},
{file = "cryptography-44.0.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8cadc6e3b5a1f144a039ea08a0bdb03a2a92e19c46be3285123d32029f40a922"},
{file = "cryptography-44.0.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6f101b1f780f7fc613d040ca4bdf835c6ef3b00e9bd7125a4255ec574c7916e4"},
{file = "cryptography-44.0.2-cp39-abi3-win32.whl", hash = "sha256:3dc62975e31617badc19a906481deacdeb80b4bb454394b4098e3f2525a488c5"},
{file = "cryptography-44.0.2-cp39-abi3-win_amd64.whl", hash = "sha256:5f6f90b72d8ccadb9c6e311c775c8305381db88374c65fa1a68250aa8a9cb3a6"},
{file = "cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:909c97ab43a9c0c0b0ada7a1281430e4e5ec0458e6d9244c0e821bbf152f061d"},
{file = "cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:96e7a5e9d6e71f9f4fca8eebfd603f8e86c5225bb18eb621b2c1e50b290a9471"},
{file = "cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:d1b3031093a366ac767b3feb8bcddb596671b3aaff82d4050f984da0c248b615"},
{file = "cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:04abd71114848aa25edb28e225ab5f268096f44cf0127f3d36975bdf1bdf3390"},
{file = "cryptography-44.0.2.tar.gz", hash = "sha256:c63454aa261a0cf0c5b4718349629793e9e634993538db841165b3df74f37ec0"},
]
[[package]]
name = "fastapi"
version = "0.115.6"
version = "0.115.11"
requires_python = ">=3.8"
summary = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
dependencies = [
"pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4",
"starlette<0.42.0,>=0.40.0",
"starlette<0.47.0,>=0.40.0",
"typing-extensions>=4.8.0",
]
files = [
{file = "fastapi-0.115.6-py3-none-any.whl", hash = "sha256:e9240b29e36fa8f4bb7290316988e90c381e5092e0cbe84e7818cc3713bcf305"},
{file = "fastapi-0.115.6.tar.gz", hash = "sha256:9ec46f7addc14ea472958a96aae5b5de65f39721a46aaf5705c480d9a8b76654"},
{file = "fastapi-0.115.11-py3-none-any.whl", hash = "sha256:32e1541b7b74602e4ef4a0260ecaf3aadf9d4f19590bba3e1bf2ac4666aa2c64"},
{file = "fastapi-0.115.11.tar.gz", hash = "sha256:cc81f03f688678b92600a65a5e618b93592c65005db37157147204d8924bf94f"},
]
[[package]]
name = "idna"
version = "3.4"
requires_python = ">=3.5"
version = "3.10"
requires_python = ">=3.6"
summary = "Internationalized Domain Names in Applications (IDNA)"
files = [
{file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
{file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
{file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"},
{file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"},
]
[[package]]
@ -176,13 +156,6 @@ version = "0.19.0"
requires_python = ">=3.9"
summary = "A fast serialization and validation library, with builtin support for JSON, MessagePack, YAML, and TOML."
files = [
{file = "msgspec-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d8dd848ee7ca7c8153462557655570156c2be94e79acec3561cf379581343259"},
{file = "msgspec-0.19.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0553bbc77662e5708fe66aa75e7bd3e4b0f209709c48b299afd791d711a93c36"},
{file = "msgspec-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe2c4bf29bf4e89790b3117470dea2c20b59932772483082c468b990d45fb947"},
{file = "msgspec-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00e87ecfa9795ee5214861eab8326b0e75475c2e68a384002aa135ea2a27d909"},
{file = "msgspec-0.19.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3c4ec642689da44618f68c90855a10edbc6ac3ff7c1d94395446c65a776e712a"},
{file = "msgspec-0.19.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2719647625320b60e2d8af06b35f5b12d4f4d281db30a15a1df22adb2295f633"},
{file = "msgspec-0.19.0-cp310-cp310-win_amd64.whl", hash = "sha256:695b832d0091edd86eeb535cd39e45f3919f48d997685f7ac31acb15e0a2ed90"},
{file = "msgspec-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa77046904db764b0462036bc63ef71f02b75b8f72e9c9dd4c447d6da1ed8f8e"},
{file = "msgspec-0.19.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:047cfa8675eb3bad68722cfe95c60e7afabf84d1bd8938979dd2b92e9e4a9551"},
{file = "msgspec-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e78f46ff39a427e10b4a61614a2777ad69559cc8d603a7c05681f5a595ea98f7"},
@ -219,7 +192,7 @@ files = [
[[package]]
name = "pydantic"
version = "2.10.4"
version = "2.10.6"
requires_python = ">=3.8"
summary = "Data validation using Python type hints"
dependencies = [
@ -228,8 +201,8 @@ dependencies = [
"typing-extensions>=4.12.2",
]
files = [
{file = "pydantic-2.10.4-py3-none-any.whl", hash = "sha256:597e135ea68be3a37552fb524bc7d0d66dcf93d395acd93a00682f1efcb8ee3d"},
{file = "pydantic-2.10.4.tar.gz", hash = "sha256:82f12e9723da6de4fe2ba888b5971157b3be7ad914267dea8f05f82b28254f06"},
{file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"},
{file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"},
]
[[package]]
@ -241,19 +214,6 @@ dependencies = [
"typing-extensions!=4.7.0,>=4.6.0",
]
files = [
{file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"},
{file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"},
{file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a"},
{file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5"},
{file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c"},
{file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7"},
{file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a"},
{file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236"},
{file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962"},
{file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9"},
{file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af"},
{file = "pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4"},
{file = "pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31"},
{file = "pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc"},
{file = "pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7"},
{file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15"},
@ -296,66 +256,71 @@ files = [
{file = "pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130"},
{file = "pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee"},
{file = "pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b"},
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e"},
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8"},
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3"},
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f"},
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133"},
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc"},
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50"},
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9"},
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151"},
{file = "pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39"},
]
[[package]]
name = "ruff"
version = "0.8.4"
version = "0.9.9"
requires_python = ">=3.7"
summary = "An extremely fast Python linter and code formatter, written in Rust."
files = [
{file = "ruff-0.8.4-py3-none-linux_armv6l.whl", hash = "sha256:58072f0c06080276804c6a4e21a9045a706584a958e644353603d36ca1eb8a60"},
{file = "ruff-0.8.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ffb60904651c00a1e0b8df594591770018a0f04587f7deeb3838344fe3adabac"},
{file = "ruff-0.8.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:6ddf5d654ac0d44389f6bf05cee4caeefc3132a64b58ea46738111d687352296"},
{file = "ruff-0.8.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e248b1f0fa2749edd3350a2a342b67b43a2627434c059a063418e3d375cfe643"},
{file = "ruff-0.8.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf197b98ed86e417412ee3b6c893f44c8864f816451441483253d5ff22c0e81e"},
{file = "ruff-0.8.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c41319b85faa3aadd4d30cb1cffdd9ac6b89704ff79f7664b853785b48eccdf3"},
{file = "ruff-0.8.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:9f8402b7c4f96463f135e936d9ab77b65711fcd5d72e5d67597b543bbb43cf3f"},
{file = "ruff-0.8.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4e56b3baa9c23d324ead112a4fdf20db9a3f8f29eeabff1355114dd96014604"},
{file = "ruff-0.8.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:736272574e97157f7edbbb43b1d046125fce9e7d8d583d5d65d0c9bf2c15addf"},
{file = "ruff-0.8.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5fe710ab6061592521f902fca7ebcb9fabd27bc7c57c764298b1c1f15fff720"},
{file = "ruff-0.8.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:13e9ec6d6b55f6da412d59953d65d66e760d583dd3c1c72bf1f26435b5bfdbae"},
{file = "ruff-0.8.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:97d9aefef725348ad77d6db98b726cfdb075a40b936c7984088804dfd38268a7"},
{file = "ruff-0.8.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ab78e33325a6f5374e04c2ab924a3367d69a0da36f8c9cb6b894a62017506111"},
{file = "ruff-0.8.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:8ef06f66f4a05c3ddbc9121a8b0cecccd92c5bf3dd43b5472ffe40b8ca10f0f8"},
{file = "ruff-0.8.4-py3-none-win32.whl", hash = "sha256:552fb6d861320958ca5e15f28b20a3d071aa83b93caee33a87b471f99a6c0835"},
{file = "ruff-0.8.4-py3-none-win_amd64.whl", hash = "sha256:f21a1143776f8656d7f364bd264a9d60f01b7f52243fbe90e7670c0dfe0cf65d"},
{file = "ruff-0.8.4-py3-none-win_arm64.whl", hash = "sha256:9183dd615d8df50defa8b1d9a074053891ba39025cf5ae88e8bcb52edcc4bf08"},
{file = "ruff-0.8.4.tar.gz", hash = "sha256:0d5f89f254836799af1615798caa5f80b7f935d7a670fad66c5007928e57ace8"},
{file = "ruff-0.9.9-py3-none-linux_armv6l.whl", hash = "sha256:628abb5ea10345e53dff55b167595a159d3e174d6720bf19761f5e467e68d367"},
{file = "ruff-0.9.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b6cd1428e834b35d7493354723543b28cc11dc14d1ce19b685f6e68e07c05ec7"},
{file = "ruff-0.9.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5ee162652869120ad260670706f3cd36cd3f32b0c651f02b6da142652c54941d"},
{file = "ruff-0.9.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3aa0f6b75082c9be1ec5a1db78c6d4b02e2375c3068438241dc19c7c306cc61a"},
{file = "ruff-0.9.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:584cc66e89fb5f80f84b05133dd677a17cdd86901d6479712c96597a3f28e7fe"},
{file = "ruff-0.9.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abf3369325761a35aba75cd5c55ba1b5eb17d772f12ab168fbfac54be85cf18c"},
{file = "ruff-0.9.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:3403a53a32a90ce929aa2f758542aca9234befa133e29f4933dcef28a24317be"},
{file = "ruff-0.9.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:18454e7fa4e4d72cffe28a37cf6a73cb2594f81ec9f4eca31a0aaa9ccdfb1590"},
{file = "ruff-0.9.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fadfe2c88724c9617339f62319ed40dcdadadf2888d5afb88bf3adee7b35bfb"},
{file = "ruff-0.9.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6df104d08c442a1aabcfd254279b8cc1e2cbf41a605aa3e26610ba1ec4acf0b0"},
{file = "ruff-0.9.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d7c62939daf5b2a15af48abbd23bea1efdd38c312d6e7c4cedf5a24e03207e17"},
{file = "ruff-0.9.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:9494ba82a37a4b81b6a798076e4a3251c13243fc37967e998efe4cce58c8a8d1"},
{file = "ruff-0.9.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:4efd7a96ed6d36ef011ae798bf794c5501a514be369296c672dab7921087fa57"},
{file = "ruff-0.9.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:ab90a7944c5a1296f3ecb08d1cbf8c2da34c7e68114b1271a431a3ad30cb660e"},
{file = "ruff-0.9.9-py3-none-win32.whl", hash = "sha256:6b4c376d929c25ecd6d87e182a230fa4377b8e5125a4ff52d506ee8c087153c1"},
{file = "ruff-0.9.9-py3-none-win_amd64.whl", hash = "sha256:837982ea24091d4c1700ddb2f63b7070e5baec508e43b01de013dc7eff974ff1"},
{file = "ruff-0.9.9-py3-none-win_arm64.whl", hash = "sha256:3ac78f127517209fe6d96ab00f3ba97cafe38718b23b1db3e96d8b2d39e37ddf"},
{file = "ruff-0.9.9.tar.gz", hash = "sha256:0062ed13f22173e85f8f7056f9a24016e692efeea8704d1a5e8011b8aa850933"},
]
[[package]]
name = "sniffio"
version = "1.3.0"
version = "1.3.1"
requires_python = ">=3.7"
summary = "Sniff out which async library your code is running under"
files = [
{file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"},
{file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"},
{file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"},
{file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"},
]
[[package]]
name = "starlette"
version = "0.41.3"
requires_python = ">=3.8"
version = "0.46.0"
requires_python = ">=3.9"
summary = "The little ASGI library that shines."
dependencies = [
"anyio<5,>=3.4.0",
"anyio<5,>=3.6.2",
"typing-extensions>=3.10.0; python_version < \"3.10\"",
]
files = [
{file = "starlette-0.41.3-py3-none-any.whl", hash = "sha256:44cedb2b7c77a9de33a8b74b2b90e9f50d11fcf25d8270ea525ad71a25374ff7"},
{file = "starlette-0.41.3.tar.gz", hash = "sha256:0e4ab3d16522a255be6b28260b938eae2482f98ce5cc934cb08dce8dc3ba5835"},
{file = "starlette-0.46.0-py3-none-any.whl", hash = "sha256:913f0798bd90ba90a9156383bcf1350a17d6259451d0d8ee27fc0cf2db609038"},
{file = "starlette-0.46.0.tar.gz", hash = "sha256:b359e4567456b28d473d0193f34c0de0ed49710d75ef183a74a5ce0499324f50"},
]
[[package]]
name = "torappu-excel"
version = "0.1.1"
requires_python = ">=3.11"
summary = "Torappu Client Excel Model Library"
dependencies = [
"msgspec>=0.19.0",
"typing-extensions>=4.12.2",
]
files = [
{file = "torappu_excel-0.1.1-py3-none-any.whl", hash = "sha256:42f017c2ebfe50c8b659ab379679287321dacd0ecd69fad98ecb0f90231fd7f2"},
{file = "torappu_excel-0.1.1.tar.gz", hash = "sha256:abc0ce55f0bd46862281773523f8f5111e40180d0ad9b7f5c1c48cfda7d23475"},
]
[[package]]

View File

@ -7,17 +7,19 @@ authors = [
]
dependencies = [
"msgspec>=0.19.0",
"pydantic>=2.10.4",
"fastapi>=0.115.6",
"cryptography>=44.0.0",
"pydantic>=2.10.6",
"fastapi>=0.115.11",
"cryptography>=44.0.2",
"torappu-excel>=0.1.1"
]
requires-python = ">=3.10,<4.0"
requires-python = ">=3.11,<4.0"
readme = "README.md"
license = {text = "GPL-3.0-or-later"}
gscore_auto_update_dep = ["torappu-excel>=0.1.1"]
[tool.pdm.dev-dependencies]
dev = [
"ruff>=0.8.4",
"ruff>=0.9.9",
]
[build-system]
@ -25,8 +27,8 @@ requires = ["pdm-backend"]
build-backend = "pdm.backend"
[tool.ruff]
line-length = 98
target-version = "py38"
line-length = 120
target-version = "py311"
[tool.ruff.lint]
select = [