diff --git a/backend/api/routes/info.py b/backend/api/routes/info.py index 4377764b..931cda87 100644 --- a/backend/api/routes/info.py +++ b/backend/api/routes/info.py @@ -10,6 +10,7 @@ from api.dp import RedisDep,AltersDep from core.character.adventure import get_adv_list from core.basic.character import createCharacter from core.open.helper import get_user_info_by_id +from api.core.exception import ResponseException router = APIRouter() @@ -96,10 +97,11 @@ async def get_skill_info( @router.get("/dnfhelper/{uid}/") -async def get_info_by_dnfhelper(uid: str, redis: RedisDep): +async def get_info_by_dnfhelper(uid: str, state: AltersDep, redis: RedisDep): try: - result = await get_user_info_by_id(uid,'') + result = await get_user_info_by_id(uid,state) return response(data=result) except Exception as e: - print(f"Error fetching DNFHelper info: {e}") + if isinstance(e, ResponseException): + return response(code=500, message=str(e), data=None) return response(code=500, message="Failed to fetch DNFHelper info", data=None) \ No newline at end of file diff --git a/backend/core/equipment/version_0/enchant.py b/backend/core/equipment/version_0/enchant.py index f2ed0bb3..5d08a332 100644 --- a/backend/core/equipment/version_0/enchant.py +++ b/backend/core/equipment/version_0/enchant.py @@ -55,6 +55,16 @@ def enchant_5(char: CharacterProperty): char.SetStatus(三攻=20, 四维=75, 技攻=0.07) pass +@register +def enchant_6(char: CharacterProperty): + """ + DCALC_REMOVE: enchant_6 + 四维(75)|Lv1~50主动+1 + """ + char.SetStatus(四维=75) + char.AddSkillLv(1, 50, 1, 1) + pass + # endregion # region 上衣 diff --git a/backend/core/open/helper.py b/backend/core/open/helper.py index 1516f0a5..705d63f8 100644 --- a/backend/core/open/helper.py +++ b/backend/core/open/helper.py @@ -1,5 +1,8 @@ from openapi.dnfhelper.public import get_main_user_info_by_id from core.basic.equipment import get_equipment +from api.dp import AltersDep +from api.core.exception import ResponseException +import re job_mapping = { '极诣·剑魂': 'weapon_master', @@ -74,18 +77,22 @@ job_mapping = { } -async def get_user_info_by_id(user_id: str, alter: str): +async def get_user_info_by_id(user_id: str, alter: AltersDep): + if alter is None: + raise ResponseException("登录过期或无效Token,请刷新后重试") # 通过OCR助手获取用户信息 helper_info = await get_main_user_info_by_id(user_id) if helper_info is None: - return None + raise ResponseException("当前助手ID不存在或已隐藏,请确认后重试") else: - return trans_to_dcalc_set(helper_info) + return trans_to_dcalc_set(helper_info, alter) pass -def trans_to_dcalc_set(detail): +def trans_to_dcalc_set(detail, alter: AltersDep): job = job_mapping.get(detail.get('job', ''), '') + if job != alter.origin: + raise ResponseException(f"职业不匹配,请切换到{detail.get('job', '')}后或修改助手的默认角色后重试") basic = get_equipment('0') basicAvatars = basic.funs.get_dress_list([]) equs = detail.get('equs', []) @@ -114,7 +121,7 @@ def trans_to_dcalc_set(detail): 'precision': 100, } # 装备 - dcalcEqu = next((item for item in basic.equs if item.name == equ['name']), None) + dcalcEqu = next((item for item in basic.equs if item.name == equ['name'].replace('(黑雨) ', '')), None) # 贴膜 if dcalcEqu: info['id'] = dcalcEqu.id @@ -143,8 +150,31 @@ def trans_to_dcalc_set(detail): info['option'] = item.get('attr', '') avatar[item['posName']] = info else: - # TODO: 处理没有找到对应时装的情况 即光环、皮肤、武器装扮 - print(item) + if item.get('posName', '') in ['光环', '皮肤', '武器装扮']: + # TODO: 处理没有找到对应时装的情况 即光环、皮肤、武器 + # 装扮 + if item.get('posName', '') == '武器装扮': + if item.get('name', '') == '神器克隆武器装扮': + item['enchant'] = '技攻(3%)|增益量(1%)|四维(65)' + match = re.search(r'\[(\d+)级\]', item.get('name', '')) + lv = int(match.group(1)) if match else None + if lv: + item['enchant'] = f'Lv{lv}主动+1|四维(55)' + else: + item['enchant'] = '全属强(6)' + if item.get('posName', '') == '皮肤': + match = re.search(r'\[(\d+)级\]', item.get('name', '')) + lv = int(match.group(1)) if match else None + if lv : + item['enchant'] = f'Lv{lv}主动+1|全属强(12)|四维(55)' + if item.get('posName', '') == '光环': + # 先默认这个了 不管了 + item['enchant'] = 'Lv1~95+1|攻击强化(12%)|增益量(7%)' + info['enchant'] = getEnchatIdByName(item.get('enchant', ''), item.get('posName', ''), basic.enchants) + emblems = [getEmblemIdByName(i.get('detail', ''), i.get('categorize', ''), i.get('rarity', ''), basic.emblems) for i in item.get('emblems', [])] + info['emblem_0'] = emblems[0] if len(emblems) > 0 else 0 + info['emblem_1'] = emblems[1] if len(emblems) > 1 else 0 + avatar[item['posName']] = info return { 'job': job, 'equips': equips, diff --git a/backend/dataFiles/dcalc_0.db b/backend/dataFiles/dcalc_0.db index b044121d..53e61cae 100644 Binary files a/backend/dataFiles/dcalc_0.db and b/backend/dataFiles/dcalc_0.db differ diff --git a/backend/openapi b/backend/openapi index d374db49..fed2b642 160000 --- a/backend/openapi +++ b/backend/openapi @@ -1 +1 @@ -Subproject commit d374db49af48b9e1f6ff4ec1c8d9302f9576757d +Subproject commit fed2b6423e9d4c71361f389e77596e77b5e35953 diff --git a/frontend/src/api/info/index.ts b/frontend/src/api/info/index.ts index b7729ad2..2e527d74 100644 --- a/frontend/src/api/info/index.ts +++ b/frontend/src/api/info/index.ts @@ -18,6 +18,10 @@ export default defineRequest((request) => { async skillDetail(skillId: string, level: number) { const res = await request.get(`/skill/${skillId}/${level}`) return res.data + }, + async getConfigFromHelper(uid: string) { + const res = await request.get(`/dnfhelper/${uid}/`) + return res.data } } }) diff --git a/frontend/src/pages/Character/Config/import.vue b/frontend/src/pages/Character/Config/import.vue new file mode 100644 index 00000000..7af580f4 --- /dev/null +++ b/frontend/src/pages/Character/Config/import.vue @@ -0,0 +1,93 @@ + diff --git a/frontend/src/pages/Character/Index.vue b/frontend/src/pages/Character/Index.vue index 4658cce9..e2eb106b 100644 --- a/frontend/src/pages/Character/Index.vue +++ b/frontend/src/pages/Character/Index.vue @@ -21,21 +21,28 @@ + + + +