FireflyLover520/dsh-game-uid

dsh-game-uid

DSH 插件:按 UID 查原神 / 星铁 / 绝区零的角色练度与汇总面板(只展示数据,不打分)

Uncategorizeddshgenshinhonkai-star-rail

dsh-game-uid

给自己(DSH 里的 agent)装的查 UID → 角色练度与面板插件:给一串 UID,直接把亮出来的角色的 等级、命座、天赋、武器、汇总面板和圣遗物/遗器/驱动盘套装构成整理成一份中文报告。

支持三款能匿名查的游戏:原神、崩坏:星穹铁道、绝区零。 异环、鸣潮没有匿名按 UID 查的公开接口,game 传这两个会返回说明,不会瞎编数据。

只在 macOS 版 DeepSeek Harness 上验证过(DSH 0.2.x / 桌面端)。
换到 Windows 跑不起来的话,把这句话发给你的 DeepSeek:
「帮我适配 dsh-game-uid 到 Windows,路径和导出你来改」——接口都是公开的,改起来不难。

新角色

  • 内置角色表 data/chars.json 随发包更新(当前 147 个原神角色,含 10000125 哥伦比娅 / 10000126 兹白 / 10000133 桑多涅 / 10000150 奥黛塔 等)。
  • 碰到表里没有的 avatarId(比如版本刚开的新角色),插件会按需拉一次 Enka 的 store/gi/avatars.json + gi/locs.json 补名字,60 秒内不重复试;失败也不影响其余角色。
  • 本地 chars.json 改了会按 mtime 自动重读,补数据不用重启 DSH。

它注册了什么

工具 game_uid:

参数 · 必填 · 说明 uid · ✅ · 原神 / 星铁 / 绝区零 UID(9~10 位数字) game · · auto(默认,三个游戏并发探一次)/ genshin / hsr / zzz / nte format · · md(默认)/ text(去掉 Markdown 记号,发 QQ 用)/ qq(一行紧凑版,≤150 字) 角色 · · 逗号/顿号分隔的角色名:点了名就只输出这几个;不传就输出展柜里全部 save · · true 时落地存档(JSON + Markdown),默认不写盘 detail · · 已弃用,保留仅为兼容;工具只返回汇总面板,不列单件词条

对 agent 说人话就行:「查一下 UID 618285856 的练度」「只看这个号的甘雨」 「637000000 星铁练度怎么样,存个档」「绝区零 UID 14658559 看看面板」。

输出长什么样

🎮 **原神** · UID `618285856`
👤 Algoinde · AR57 · 世界等级 8 · 成就 458 · 展柜 4 人

**甘雨** (冰) · Lv.90 · 0命 · 天赋 9/9/9 · 弓
  ⚔️ 阿莫斯之弓 R3 · Lv.90 · 5★ · 基础攻 608 · 攻击力 49.6%
  📊 生命 9797 · 攻击 2471 · 防御 630 · 暴击率 40.3% · 暴击伤害 180.2%
  🧿 冰风迷途的勇士 4 件 + 角斗士的终幕礼 1 件

只报汇总数值:不给单件圣遗物的词条,不打分、不评级、不评价强弱。 想自己判断,数据全摆在这儿了。

数据从哪来

  • 原神:https://enka.network/api/uid/(只读公开接口,无需 token)
  • 星铁:https://api.mihomo.me/sr_info_parsed/?lang=cn
  • 绝区零:https://enka.network/api/zzz/uid/(Enka 的 ZZZ 端点)
  • 名字表(角色/武器/套装)是构建时从 Enka 官方 store 抽的中文子集,落在 data/,

运行时不联网查表,只有取玩家数据那一次请求。

所以:只查得到展柜/支援角色(游戏里没放进展柜的看不到),数据有几分钟缓存延迟。

角色筛选

角色=甘雨 → 只输出甘雨;角色=甘雨、班尼特 → 输出这两个;不传 → 展柜里全部。 按名字包含匹配、不分大小写。点名的角色不在展柜里时,会直接说明,而不是给一份空报告。

存档文件

save=true 时写到 DSH_GAME_UID_ARCHIVE(默认 ~/.dsh/game-uid-archive):

  • genshin-618285856-.json:format: dsh-game-uid/1,玩家信息 + 每个角色的面板与套装
  • genshin-618285856-.md:同一份内容的可读版

绝区零的特殊处理

  • 命座 3 全技能 +2 级、命座 5 再 +2 级(官方文档要求自己加,Enka 给的是基础值)。
  • 属性表 data/zzz-props.json 里百分比属性是 ×100 存的(800 = 8%),

渲染时按 Format 是否含 % 决定要不要 /100。

  • 角色本体面板用 BaseProps + GrowthProps×(等级−1)/10000 + PromotionProps + CoreEnhancementProps 四段式算。
  • 完整面板 = 角色本体 + 音擎主/副词条 + 6 个驱动盘的主词条与副词条:

先加算所有「生命/攻击/防御/冲击力」的百分比与平铺值,再按 基础×(1+百分比)+平铺 收口; 暴击率/暴击伤害/穿透率/能量回复/异常掌控/异常精通直接累加。 音擎与驱动盘的数值用官方近似公式还原(PropertyValue × (1 + 0.2×等级),百分比再 /100)。

  • 套装 2/4 件效果:从绝区零 wiki(wiki.biligame.com/zzz)抓取,落在 data/zzz-suit-bonus.json

(30 套,27 套能解析出无条件数值;条件型效果如「命中敌人后…」不算数,见下)。 生成脚本在仓库外,重抓时按 二件套效果 / 四件套效果 两个小标题取文本, 匹配 生命值|攻击力|防御力|暴击率|暴击伤害|穿透率|能量自动回复|异常掌控|异常精通|冲击力|伤害

  • + / 提升 / 增加 动词,条件词(命中/敌人/入场/持续/秒/前/后…)出现就整段弃用。
  • 未计入:音擎被动(wiki 里全是「攻击命中敌人时…」这类条件效果,无法折算成常驻面板)

和条件型套装效果;图与文字里都会注明「被动与条件效果未计」。

QQ 群里 @ 也能查

dsh-qq-bridge 会把「群里 @ 我」的消息喂进目标会话(正文带 【群 昵称】 前缀), 回答再由它转发回那个群。所以群里 @ 机器人说「查询 618285856」时,agent 会调用 game_uid 并把结果发回群里——两个插件之间不需要额外对接。

为此 game_uid 做了两件事:

  • description 里写明「QQ 群里 @ 你并给出 UID 时用这个工具」;
  • format=qq 输出一行紧凑版(🎮原神 618285856 Algoinde AR57 · 甘雨 Lv.90 …),

因为 bridge 的 简短() 会把超过 160 字的回复截断(带 Markdown 图片时例外)。

完整报告留在 DSH 里看,或者加 save=true 落地成存档。

安装

dsh plugin --profile <profile> add file:/path/to/dsh-game-uid-<version>.tgz

装完要完全退出桌面端再重开(⌘Q)才装载新代码。

更新日志

  • 0.2.2:修立绘取数用的角色 id —— 星铁/绝区零接口把 id 当字符串给("1321"),

旧版用只认 number 的 n() 转换后恒为 0,导致按 id 查立绘/素材时全部落空(卡片变纯文字)。 现存原神 avatarId(数字)、星铁 Number(c.id)、绝区零 Number(id) 三条都取到了值。

  • 0.2.1:只展示汇总面板,不打分、不列单件词条;支持 角色 点名;exports 补 "."。

面板字段(星铁补充)

  • 击破特攻:mihomo 在角色没堆这两项时不会返回字段,插件按白值 100% 补齐,面板不再出现「—」。
  • 伤害加成:把 fire_dmg / quantum_dmg / wind_dmg … 汇总成一行(排除 crit_dmg、break_dmg),没有元素加成显示 0%。
  • 能量恢复效率:mihomo 只返回「超出 100% 的部分」(如 0.3444 = 34.4%),插件补回白值,显示 134.4%;缺失显示 100%。