This commit is contained in:
2026-04-30 13:59:58 +08:00
parent 6b16ed5db8
commit b06ed452dc
5 changed files with 43 additions and 23 deletions
+2 -1
View File
@@ -121,7 +121,8 @@ async def get_info_by_dnfhelper(uid: str, state: AltersDep, redis: RedisDep):
result = await get_user_info_by_id(uid, state) result = await get_user_info_by_id(uid, state)
return response(data=result) return response(data=result)
except Exception as e: except Exception as e:
return response(code=500, message=str(e), data=None) 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) return response(code=500, message='Failed to fetch DNFHelper info', data=None)
+32 -14
View File
@@ -83,7 +83,6 @@ async def get_user_info_by_id(user_id: str, alter: AltersDep):
name = next((k for k, v in job_mapping.items() if v == alter.origin), '') name = next((k for k, v in job_mapping.items() if v == alter.origin), '')
# 通过OCR助手获取用户信息 # 通过OCR助手获取用户信息
helper_info = await get_main_user_info_by_id(user_id, name) helper_info = await get_main_user_info_by_id(user_id, name)
print(helper_info)
if helper_info is None: if helper_info is None:
raise ResponseException('当前助手ID不存在或已隐藏,请确认后重试') raise ResponseException('当前助手ID不存在或已隐藏,请确认后重试')
else: else:
@@ -97,13 +96,10 @@ def trans_to_dcalc_set(detail, alter: AltersDep):
raise ResponseException('未能匹配到当前职业对应的角色信息,请确认后重试') raise ResponseException('未能匹配到当前职业对应的角色信息,请确认后重试')
basic = get_equipment('0') basic = get_equipment('0')
basicAvatars = basic.funs.get_dress_list([]) basicAvatars = basic.funs.get_dress_list([])
equs = detail.get('equs', [])
avatars = detail.get('avatars', [])
emblems = detail.get('emblems', [])
equips = {} equips = {}
avatar = {} avatar = {}
emblem = {} emblems = {}
for equ in equs: for equ in detail.get('equs', []):
info = { info = {
'id': '0', 'id': '0',
# 强化 # 强化
@@ -133,12 +129,12 @@ def trans_to_dcalc_set(detail, alter: AltersDep):
# if dcalcEquFusion: # if dcalcEquFusion:
# info['fusion'] = dcalcEquFusion.id # info['fusion'] = dcalcEquFusion.id
info['enchant'] = getEnchatIdByName(equ.get('enchant', ''), equ.get('posName', ''), basic.enchants) info['enchant'] = getEnchatIdByName(equ.get('enchant', ''), equ.get('posName', ''), basic.enchants)
emblems = [getEmblemIdByName(i.get('detail', ''), i.get('categorize', ''), i.get('rarity', ''), basic.emblems) for i in equ.get('emblems', [])] # emblems = [getEmblemIdByName(i.get('detail', ''), i.get('categorize', ''), i.get('rarity', ''), basic.emblems) for i in equ.get('emblems', [])]
# info['emblem_0'] = emblems[0] if len(emblems) > 0 else 0 # info['emblem_0'] = emblems[0] if len(emblems) > 0 else 0
# info['emblem_1'] = emblems[1] if len(emblems) > 1 else 0 # info['emblem_1'] = emblems[1] if len(emblems) > 1 else 0
equips[equ['posName']] = info equips[equ['posName']] = info
for item in avatars: for item in detail.get('avatars', []):
info = { info = {
'id': '', 'id': '',
'option': '', 'option': '',
@@ -176,15 +172,28 @@ def trans_to_dcalc_set(detail, alter: AltersDep):
# 先默认这个了 不管了 # 先默认这个了 不管了
item['enchant'] = 'Lv1~95+1|攻击强化(12%)|增益量(7%)' item['enchant'] = 'Lv1~95+1|攻击强化(12%)|增益量(7%)'
info['enchant'] = getEnchatIdByName(item.get('enchant', ''), item.get('posName', ''), basic.enchants) 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', [])] # 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_0'] = emblems[0] if len(emblems) > 0 else 0
info['emblem_1'] = emblems[1] if len(emblems) > 1 else 0 # info['emblem_1'] = emblems[1] if len(emblems) > 1 else 0
avatar[item['posName']] = info avatar[item['posName']] = info
rarities = ['稀有', '神器', '传说', '史诗']
for item in detail.get('emblems', []):
pos = item.get('pos', '')
if not pos:
continue
rarity = item.get('rarity', '')
lv = item.get('lv', 1)
if rarity in rarities:
lv += rarities.index(rarity) * 5 - 1
emblems[pos] = {'lv': lv, 'items': [getEmblemIdByAttr(i.get('attr', ''), i.get('rarity', ''), i.get('type', ''), basic.emblems) for i in item.get('items', [])]}
return { return {
'job': job, 'job': job,
'equips': equips, 'equips': equips,
'avatars': avatar, 'avatars': avatar,
'emblems': emblems,
'avatarLink': detail.get('avatarLink', ''), 'avatarLink': detail.get('avatarLink', ''),
'fogOathLv': detail.get('fogOathLv', 0),
'dressInfo': [ 'dressInfo': [
{ {
'dress': i.get('name', ''), 'dress': i.get('name', ''),
@@ -194,9 +203,6 @@ def trans_to_dcalc_set(detail, alter: AltersDep):
for i in detail.get('avatars', []) for i in detail.get('avatars', [])
], ],
} }
# 处理装备
# 处理时装
pass
def getEnchatIdByName(name: str, position: str, items: list): def getEnchatIdByName(name: str, position: str, items: list):
@@ -220,3 +226,15 @@ def getEmblemIdByName(detail: str, categorize: str, rarity: str, items: list):
return 0 return 0
except Exception as _: except Exception as _:
return 0 return 0
def getEmblemIdByAttr(attr: str, rarity: str, type: str, items: list):
try:
if type == '白金':
return attr
for item in items:
if item.get('attr', '') == attr and item.get('type', '') == type and item.get('rarity', '') == rarity:
return item.get('id', 0)
return 0
except Exception as _:
return 0
+1
View File
@@ -110,6 +110,7 @@ class EmblemData(Base):
type = Column(Text) type = Column(Text)
value = Column(Text) value = Column(Text)
fame = Column(Integer) fame = Column(Integer)
attr = Column(Text)
class JadeData(Base): class JadeData(Base):
@@ -17,6 +17,8 @@ export default defineComponent({
configStore.config.equips = res.equips configStore.config.equips = res.equips
configStore.config.avatar = res.avatars configStore.config.avatar = res.avatars
configStore.config.avatarLink = res.avatarLink configStore.config.avatarLink = res.avatarLink
configStore.config.emblems = res.emblems
configStore.config.sundry.fog = res.fogOathLv
const { alert } = useDialog() const { alert } = useDialog()
visible.value = false visible.value = false
await alert({ await alert({
@@ -51,15 +53,13 @@ export default defineComponent({
<calc-input class="!w-60" v-model={uid.value} /> <calc-input class="!w-60" v-model={uid.value} />
</div> </div>
<div> <div>
<p class="text-#e9c556/80"> <p class="text-#e9c556/80">* 点击导入后会从助手通过文字识别获取打造</p>
* 点击导入后会从助手通过文字识别获取打造 <p class="text-#e9c556/80">* 部分打造无法获取,此处仅做快捷导入</p>
</p>
<p class="text-#e9c556/80">
* 部分打造无法获取,此处仅做快捷导入
</p>
</div> </div>
<div class="flex justify-around items-center"> <div class="flex justify-around items-center">
<calc-button onClick={execute} disabled={isLoading.value}>导入</calc-button> <calc-button onClick={execute} disabled={isLoading.value}>
导入
</calc-button>
<calc-button onClick={() => (visible.value = false)}>取消</calc-button> <calc-button onClick={() => (visible.value = false)}>取消</calc-button>
</div> </div>
</div> </div>