From 7bb4ba07ac21b111f700c7206d73d3b08e804597 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A5=BF=E7=93=9C=C2=B0?= Date: Thu, 26 Feb 2026 13:35:27 +0800 Subject: [PATCH] =?UTF-8?q?new:=E6=B7=BB=E5=8A=A0=E4=BB=8E=E5=8A=A9?= =?UTF-8?q?=E6=89=8B=E5=AF=BC=E5=85=A5=E6=89=93=E9=80=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/api/routes/info.py | 8 +- backend/core/equipment/version_0/enchant.py | 10 ++ backend/core/open/helper.py | 44 +++++++-- backend/dataFiles/dcalc_0.db | Bin 1007616 -> 1007616 bytes backend/openapi | 2 +- frontend/src/api/info/index.ts | 4 + .../src/pages/Character/Config/import.vue | 93 ++++++++++++++++++ frontend/src/pages/Character/Index.vue | 13 ++- 8 files changed, 162 insertions(+), 12 deletions(-) create mode 100644 frontend/src/pages/Character/Config/import.vue 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 b044121d0eec6da1aa56da1aa730b2d393eb702c..53e61cae71e65275d444a1948172f356424d468d 100644 GIT binary patch delta 499 zcmZoTVB2uOc7ilx{X`jO)_MlLvW~`-))dCp6sFb`=GGLJ))dyQDQpY&3pg+y*0^xBbUKwptD*zSrB!PqCG- z2r@7*@BlFwxUsM^L{9&3j!mOoHdGZ-Kn$6luBpFy-r$6|`rOKjkXuHDndOKdd>2`6P;?oxhar1AF z{>^2^$Zpe-r2lLOO5r%#!} z>)1ZooO}CZbDmNUCRXO{Tn#*T8Ch7qF-)1fk!Qm8>L#9QCQ)t?23}|=FfcU9w>ty< z>OcKo3y&hRf|bH_g;t*L+tu259;{@uX5jN=x8BZUz^l)$+*H~g4peC^qN2j$;tUKgcdP{J-5zJo+sn$B2n?cFU=SI%hXFN&PY<@^)dB}mJ1~fVm~VT% I9e<-D09EOp?*IS* delta 497 zcmY+9O=uHA9L4{$-JRXc&hCh9SQaf>#84Fziyw=HL~1We4pIestB6}Yn?|IB(tNPl zLJ?9nFxOlof>x`eh!_Pg9_&d76rrFN#gmqPC?z_?gZSWgdAxV{64mb^9~R4u!-$3v5Y0U#E`^9VwtS$ceN)FgMwzXpk0x<`bFNOT@Y&ngMShIKglE#<2&R&66$Y)5dXMhc8to2 zYTgBPgfDz22bI@?&t|M7&rHM|-q>w2VgDefkbbf{)g5KmyCacbC-X=@Ud?q|yz#e9 zZIC&%WF|ef#v7j>y!iBN{>#$cwR;bvu^Vw-uUjKwHV9 { 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 @@ + + + +