This commit is contained in:
2025-06-11 16:29:10 +08:00
parent c5f3a23d08
commit d416931bfc
12 changed files with 379 additions and 58 deletions
+54
View File
@@ -1,3 +1,4 @@
import re
from api.core.Auth import createToken
from api.core.Gzip import register_gzip_request
import json
@@ -12,6 +13,19 @@ router = APIRouter()
register_gzip_request(router)
def replace_placeholders(template):
# 匹配 <int>、<float>、<float1>、<float2> 等
pattern = re.compile(r'<(int|float\d*)>')
idx = 0
def repl(match):
nonlocal idx
idx += 1
return f'{{value{idx}}}'
return pattern.sub(repl, template)
@router.get('/adventure')
async def get_adventure_info(request: Request,redis:RedisDep):
@@ -30,6 +44,7 @@ async def getToken(redis:RedisDep,
async def get_character_info(
request: Request, state: AltersDep ,redis:RedisDep
):
print(state.alter)
character = createCharacter(state.alter, state.equVersion)
def get_character():
return character.getInfo()
@@ -37,3 +52,42 @@ async def get_character_info(
# info = character.getInfo()
return response(data=info)
@router.get("/skill/{skillId}/{level}")
async def get_skill_info(
state: AltersDep, skillId: str, level: int, redis: RedisDep
):
"""
获取技能信息
"""
alter = state.alter
jobId = alter.split(".")[1]
jobGrowId = alter.split(".")[2]
skill_info = {}
key = f'openapi:{jobId}:{jobGrowId}:{skillId}'
try:
def get_skill_info():
# This function should retrieve the skill info based on job and jobGrow
# For now, we return a placeholder dictionary
with open(f'./openapi/data/{jobId}/{jobGrowId}/cn/skillDetail/{skillId}.json', encoding='utf-8') as f:
skill_data = json.load(f)
if 'levelInfo' in skill_data and 'optionDesc' in skill_data['levelInfo'] and skill_data['levelInfo']['optionDesc'] is not None:
skill_data['levelInfo']['optionDesc'] = replace_placeholders(skill_data['levelInfo']['optionDesc'])
return skill_data
skill_info = get_redis_info(redis, key, get_skill_info)
if level is not None:
level = max(0, min(level, skill_info.get('maxLevel', 0)))
if 'levelInfo' in skill_info and 'rows' in skill_info['levelInfo']:
detail = list(filter(lambda x: x['level'] == level, skill_info['levelInfo']['rows']))
if detail and len(detail) > 0:
skill_info['levelInfo'].update(detail[0])
skill_info['levelInfo']['detail'] = skill_info['levelInfo'].get('optionDesc', '')
for key in skill_info['levelInfo']['optionValue'].keys():
skill_info['levelInfo']['detail'] = skill_info['levelInfo']['detail'].replace(f'{{{key}}}', str(skill_info['levelInfo']['optionValue'][key]))
del skill_info['levelInfo']['rows']
skill_info['attribute'] = {}
skill_info['attribute'].update(skill_info['levelInfo'])
del skill_info['levelInfo']
except FileNotFoundError:
return response(code=404, message=f'技能信息未找到: {jobId} {jobGrowId} {skillId}', data=None)
return response(data=skill_info)
+1
View File
@@ -475,6 +475,7 @@ class Character(CharacterProperty):
'hasVP': skill.hasVP,
'hasUP': skill.hasUP,
'upType': skill.upType,
'uuid': skill.uuid,
'vps': [{"name":i["name"],"desc":i["desc"]} for i in skill.vps],
}
)
-1
View File
@@ -15,7 +15,6 @@ characterLv = 115 + 5
@cache
def get_data(prefix: str, key: int, func):
print(f"loading skill {prefix} {key} data from redis")
redis = next(get_redis())
def get_skill_info():
# This function should retrieve the skill info based on job and jobGrow