Skip to content

公招计算 ​

工具页的样例:现网公招计算(= prts-widgets 的 HrCalculator Widget)的重新设计。和干员一览不同,这页不只换视觉——算法的口径也照游戏改了:现网把选中标签的所有子集各列一行,这里按游戏的招募流程来(招募位上出现的标签 → 至多选 3 个),回答的是「这几个里选哪几个」。不让选招募时限:不按时限筛干员,保底按 9:00 算。干员数据、词缀、地址栏 ?filter= 的写法与现网一致,现网的分享链接在这里照样能用。

源文件 preview/_src/pages/recruit.html,python3 scripts/build-preview.py 生成。数据是现网 Widget 运行时那条 cargoquery 的快照 preview/vendor/recruit/data.js(160 位可公开招募的干员,node scripts/fetch-recruit.ts 重抓);头像不入库,运行时从 media.prts.wiki 取,取不到时留稀有度色的底框。

preview/recruit.html单独打开 ↗

对着游戏 ​

规则与样式都查了游戏本体(2.7.71 客户端 + gacha_table),页面上凡是写「游戏里」的都有出处:

游戏出处页面上
至多选 3 个标签RecruitBuildConfigStateBean.MAX_TAG_SELECT_NUM = 3;界面标题「职业需求(最多3项)」组合只算 1–3 项
时限 → 稀有度范围recruitRarityTable:≤ 3:50 出 1–4★,4:00–7:30 出 2–5★,7:40–9:00 出 3–5★不按时限筛干员(带齐标签的 1–5★ 都列);保底按 7:40–9:00 那一段算(只看 3★ 以上)
稀有标签 → 星级specialTagRarityTable:高级资深干员 → 6★,资深干员 → 5★6★ 只在组合含【高级资深干员】时算
标签在招募位上的次序招募页照服务器给的 slot.tags 原样一行三个摆(RecruitBuildConfigStateBean.SetData 不排序),服务器给的是 tagId 升序面板照 tagId 升序排:职业 1–8 → 位置 9–10 → 词缀 12–29;资质三个(11 / 14 / 17)单独成行放最上
标签钮四种皮预制件 recruit_page 的 btn_tag_item:btn_request #313131 白字 / btn_request_choose #0098DC / btn_request_r 深灰 + 黄色半调网点、黄字 #FFEB04 / btn_request_r_on #FFD800 黑字组合标签 .hr-tagbtn;稀有标签芯片选中是黄底黑字
可公招干员、不可寻访(绿字)的干员recruitDetail 的名单与现网快照逐一核对:160 位、标签、18 位「限」全部一致

游戏客户端里没有的:标签组合 → 干员的计算(抽取在服务器),所以也没有「保底」的界面可以照;这部分是页面自己的设计。

现网的问题 ​

  • 组合不限个数。结果把选中标签的每个子集各列一行——选 5 个标签就有 4 个、5 个标签的组合,游戏里最多只能选 3 个,这些行选不出来。
  • 看不出保底。行按「平均星级」排(1★ 按 3.5 计),一行保底几星要自己在头像底色里找最低的那个;1★ / 2★ 一直混在里面,而 9:00 的招募根本不出它们。
  • 头像只有底色区分稀有度、没有名字;分享链接是一张两行的 wikitable,整段 URL 摊在页面上。

标签面板 ​

  • 四行芯片,个数不限。没有面板头,也不封顶——招募位上出现几个就点几个(现网链接里带多少个都照收)。选完一个招募位,点面板下面那一行右端的「清空」从头选下一个。
  • 四行按社区通行的归类摆:资质(高级资深干员 / 资深干员 / 新手)· 职业 · 位置 · 词缀——游戏数据 gachaTags 自己不分组,友站也是这四类。归类同现网:「新手」归资质,「支援机械」归词缀(游戏数据里两个都同治疗、支援一样写在 tagList 里,只是只有 2★ / 1★ 带)。
  • 次序对齐游戏招募页:招募页照服务器给的标签原样一行三个摆、不排序,服务器给的是 tagId 升序(职业 1–8 → 位置 9–10 → 词缀 12–29);面板照这个从上到下、从左到右排,跟着游戏扫一遍就能选完。资质三个(高资 11、资深 14、新手 17)在游戏里夹在词缀中间,单独成行放最上(同现网)。
  • 两个稀有标签另一套皮,同游戏:芯片未选时金字金框,选中黄底黑字(普通标签选中是青底);出现在组合里是深灰底 + 黄色半调网点、黄字。
  • 职业带图标:同干员一览,游戏筛选面板的白线稿当 CSS 遮罩、颜色取 currentColor。
  • 单选即可保底的标签带一枚小方块(右上角,颜色 = 保底的稀有度):不用点就知道哪些标签一出现就值得选。由数据算出,不是写死的。

不选招募时限 ​

游戏里 1:00–9:00、每 10 分钟一档,稀有度范围有三段(recruitRarityTable)。页面不让选:不按时限筛干员,保底按 9:00 算——招保底就是拉满 9:00,两个稀有标签也只在 9:00 锁定:

  • 带齐标签的 1–5★ 都列出来(2★ 新手、1★ 支援机械照列——要它们得把时限压短);6★ 只在组合里有【高级资深干员】时算进来(同现网 Widget 的 can5)。
  • 保底只看 3★ 以上的(9:00 出 3–5★);整组都低于 3★(新手、支援机械)时才取最低那一星。不然【支援】【削弱】【控场】【先锋 + 控场】等十几组会被混进来的 1★ 支援机械拉成保底 1★。
  • 页面上不出时限提示,只在保底速查的标题旁写一句「时限 9:00」。

结果 ​

  • 每组至多 3 个标签;一组的干员 = 带齐这几个标签的。保底 = 9:00 时这组里最低的星级(只看 3★ 以上,见上)。
  • 按保底分层:保底 6★ / 5★ / 4★ 各一层,层标题带稀有度色;整组都是 1★ 的单列一层「必得支援机械」;保底 3★ 及以下的(含整组只有 2★ 新手的)收在最后一层「不保底」,前面有保底层时默认收起、点层标题展开,「清空」后再选又收起。层内标签少的在前、干员少的在前。
  • 不写结论句:层标题已经说了保底几星、几组。标签面板下面一行:左边图例(「限」、单选保底的方块),右端「清空」与「复制分享链接」(同一样式)。一个标签都没选时结果区是保底速查。
  • 多加一个标签却圈不出更小范围的组合不列(与它的子组合是同一批干员),列表短一截。比的是是不是同一批人,不只是人数:稀有标签会改星级范围,【高级资深干员】+ 近卫 + 支援(帕拉斯、银灰)与 近卫 + 支援(杜宾、诗怀雅)人数一样,却是另一批干员,照列。
  • 每组一行:左边是标签(游戏的深灰标签钮),行左的色条 = 保底的稀有度;右边是全部干员——头像 + 名字,整块链到干员页;悬停 / 聚焦出提示(星级、全部标签)。只能通过公开招募获得的右上角一枚「限」(现网的绿色「限」字,判定同现网:获得方式里没有任何寻访)。
  • 头像垫稀有度色的底(同现网的 .r-0…5,颜色换成令牌 --ak-rarity-N):一组里常混着几种星级,保底 4★ 的组里哪几位是 5★、哪位是混进来的 1★,扫一眼底色就能分开——手机上头像小,只靠星级和一条细色条要逐个辨认。底色带渐变,画法照现网的抽卡模拟器(GachaSimulatorV2 的 .rarity-5 / .rarity-4):上面稀有度色、往下褪成浅灰 #e6e5e2,6★ 另是斜向 32° 的 奶油 #eee2b8 → 橙。走向与两头的浅色取自模拟器,稀有度色仍用令牌——模拟器自己的 4★ 紫偏灰,这里 1★ 也是灰底,照搬分不开。这层底已经收成通用的 .ak-r-avatar,干员卡 / 干员一览的头像同一套。
  • 头像同首页的干员卡:左上角黄色星级原图(rarity_yellow_N)、左下角职业图标(头像同款小图标,半透明黑底框),按这里的小头像缩小;星级比等比略大,五星不压右上角的「限」。星级同样垫半透明黑底、贴着左上角:黄星直接压在 5★ 金、2★ 黄绿的底色上看不清;底色之外留着星级,分辨星级不只靠颜色。
  • 筛选结果里头像大一号:64px 头像、13px 名字(名字左右各借半个列间距,五个字的名字不折行);保底速查的格子与手机上是 56px,一屏多放几组。
  • 窄于 760 时标签挪到干员上面。

保底速查 ​

一个标签都没选时,结果区不留白:列出全部能保底 4★ 以上的最小组合(9:00;不含【高级资深干员】【资深干员】【新手】【支援机械】——稀有标签自己就是保底,新手 / 支援机械只出低星),按保底 5★ / 4★ 分层、排成多列的格子(格子里不再画稀有度色条——层标题已经标了,一屏几十条色条只添乱)。「多加标签没把保底抬高」的不列。这就是现网「公开招募」页手工维护的那几张 TAG 组合表——这里由数据算出,新干员进公招后不用人改。友站的「查看保底词条组合」开关是同一件事。

地址栏 ​

  • ?filter= 与现网一致:@urlpack/json(MessagePack → Base58)编码的 { profession, position, rarity, tag } 四个位图,分组与组内次序照 Widget 的 utils.ts——页面上怎么摆(次序对齐游戏招募页)不影响编码。样例页自带一份几十行的编解码,与 @urlpack/json 逐字节对过。
  • 「复制分享链接」一枚按钮(与「清空」同一样式)+ Toast,不再把整段 URL 摊在页面上。

现网 → 这里 ​

现网这里说明
FilterRow ×4:标题 + 全选 / 清除 + Checkbox 大按钮.hr-row:标签 + .ak-chip(aria-pressed)去掉全选;清除并成面板下面那一行的一枚「清空」
分享链接 wikitable.ak-btn + Toast
table:Tags | 可能出现(≤ 640 换成卡片).hr-tier 按保底分层 + .hr-combos + .hr-combo 行层标题带稀有度色,「不保底」那层可收起;行左色条;窄了标签在上
(无)保底速查:.hr-combos--grid 多列格子没选标签时出
.tag(#313131 白字).hr-tagbtn同色,去掉投影换成底边
Avatar + 稀有度底色块 .r-0…5.hr-op:头像(稀有度底色)+ 名字底色照旧,颜色换成 --ak-rarity-N;头像左上角星级、左下角职业图标,同首页干员卡
绿色「限」.hr-op__only

没有照搬的 ​

  • 截图识别(友站有:OCR 招募界面截图直接点上 5 个标签)没做——要引 OCR 引擎或第三方接口,是 Widget 的功能决定,不是版式问题。将来「识别截图」按钮放在「清空」旁边。
  • .hr-* 没进设计系统。筛选行与干员一览的 .ol-row 是同一个东西,等两边一起提成组件。
  • 没有做无 JS 的兜底(现网也没有)。

文本 CC BY-NC-SA 4.0 · 游戏素材版权归鹰角网络所有