From 96859d8bbea48a4b169fa24c297523d9bfecf7a1 Mon Sep 17 00:00:00 2001 From: sganggs Date: Wed, 7 Oct 2026 02:33:24 +0800 Subject: [PATCH] =?UTF-8?q?feedback5=20CB1:=20three=20community=20reports?= =?UTF-8?q?=20that=20are=20the=20official=20behaviour,=20pinned=20?= =?UTF-8?q?=E2=80=94=20the=20=E6=BA=90=E7=9F=B3=E6=BA=B6=E5=89=82=20drain?= =?UTF-8?q?=20on=20the=20=E7=82=8E=E4=BD=91,=20two=20=E5=8F=98=E5=BD=A2?= =?UTF-8?q?=E5=90=8C=E6=9E=84=E4=BD=93=20=E9=98=BF=E6=88=88=E5=B0=94=20in?= =?UTF-8?q?=20a=20row=20devouring,=20=E5=AF=BB=E5=91=BC=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=20/=20=E7=AE=80=E6=98=93=E9=80=9A=E8=AE=AF=E6=9C=BA=20on=20?= =?UTF-8?q?=E7=BC=AA=E5=B0=94=E8=B5=9B=E6=80=9D=20below=20shop=20level=206?= =?UTF-8?q?=20(items=2049,=2050,=2045)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 49 「炎祐能吃到掉血道具的效果」: PRTS 源石溶剂 备注 — every 敌人类我方单位 of the field takes the carrier's 60 / s (measured: the 炎佑 600 HP in 10 s, no ATK). 50: two operators made 阿戈尔 by 变形同构体 + 阿戈尔重刃 (two 空弦, 空弦 + 哈洛德) devour like any others, through the real intents too (+3 layers, the ATK and block); two NORMAL copies of one item merge (official rule), so the pair needs a normal and an 进阶 set. 45: 寻呼模块 (「不高于当前调度中心等级」) and 简易通讯机 (the phone icon, 备注 「获得的干员等阶不高于当前调度中心等级」) look for an operator sharing 缪尔赛思's only bond 调和 — herself, tier VI: below shop level 6 nothing qualifies and the item is used up (as 拟态物质 at the copy cap, §25.13.1); at 6 she comes. No product change; golden unchanged. Test: test/content/feedback5-cb1-pins.test.js. --- test/content/feedback5-cb1-pins.test.js | 69 +++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 test/content/feedback5-cb1-pins.test.js diff --git a/test/content/feedback5-cb1-pins.test.js b/test/content/feedback5-cb1-pins.test.js new file mode 100644 index 00000000..9e58a189 --- /dev/null +++ b/test/content/feedback5-cb1-pins.test.js @@ -0,0 +1,69 @@ +// Community reports of 2026-10-06 that are the official behaviour (items 45, 49, 50) — pinned so the answer stays true. +// 49 「炎祐能吃到掉血道具的效果」: PRTS 卫戍协议:盟约 下半/PRTS盟约记录, 源石溶剂 备注 「携带后,全场范围内的所有敌人类我方单位也会 +// 获得此装备的“每秒受到60真实伤害”效果(该效果的付与为我方阵营索敌,可对空,无视目标可选性)」 — the 炎佑 is one (no ATK bonus). +// 50 「两个空弦转职阿戈尔然后连一起…最后面的空弦不能吃前面的空弦」: two operators made 阿戈尔 by 变形同构体 + 阿戈尔重刃 devour like any +// other (same name or not); two NORMAL copies of one item merge (the official merge rule), so the pair needs a normal +// and an 进阶 set. +// 45 「寻呼模块和电话对干员缪尔赛思用不会给缪尔赛思,会直接道具被吞」: 寻呼模块 「(不高于当前调度中心等级)」 and 简易通讯机 (the +// phone icon; 备注 「获得的干员等阶不高于当前调度中心等级」) look for an operator sharing her only bond, 调和: 缪尔赛思 herself, tier +// VI — below shop level 6 there is none and the item is used up with nothing, as 拟态物质 at the copy cap (§25.13.1). + +import { test } from 'node:test'; +import assert from 'node:assert/strict'; +import { makeBattle } from '../helpers/battleHarness.js'; +import { makeMatch } from '../match/harness.js'; +import { hasGeneratedData } from '../../server/sim/simdata.js'; + +const REAL = { skip: !hasGeneratedData() }; + +test('49: a 源石溶剂 carrier on the field drains the 炎佑 60 HP a second, with no ATK bonus', REAL, () => { + const ids = ['chess_char_1_03', 'chess_char_2_04', 'chess_char_3_03', 'chess_char_3_04', 'chess_char_4_15', 'chess_char_4_17']; + const tiles = [[11, 3], [11, 4], [12, 3], [12, 4], [11, 5], [12, 5]]; + const h = makeBattle({ + units: ids.map((id, i) => ({ chessId: `${id}_a`, row: tiles[i][0], col: tiles[i][1], items: i === 0 ? ['chess_item_1_05_e_a'] : [] })), + bonds: { yanShip: { count: 6, layers: 1, active: true, tier: 2 } }, timeLimit: 30, seed: 1, autoFinish: false, + }); + h.step(2); + const y = h.b.allyUnits.find((u) => u.defId === 'enemy_9012_acloon'); + const hp0 = y.hp, atk0 = y.s.atk; + h.run(10); + assert.ok(Math.abs(hp0 - y.hp - 600) < 1e-6, `600 HP in 10 s, got ${hp0 - y.hp}`); + assert.equal(y.s.atk, atk0, 'no ATK from the item'); +}); + +test('50: two 空弦 made 阿戈尔 (变形同构体 + 阿戈尔重刃) in a row — the back one devours the front one; any pair does', REAL, () => { + const morph = (chessId, col, golden = false) => ({ chessId, row: 10, col, items: golden ? ['chess_item_6_09_e_b', 'chess_item_3_07_e_b'] : ['chess_item_6_09_e_a', 'chess_item_3_07_e_a'] }); + for (const [label, pair] of [ + ['two 空弦', [morph('chess_char_3_21_a', 3), morph('chess_char_3_21_a', 4, true)]], + ['空弦 + 哈洛德', [morph('chess_char_3_21_a', 3), morph('chess_char_2_05_a', 4, true)]], + ]) { + const h = makeBattle({ + units: [...pair, { chessId: 'chess_char_2_07_a', row: 12, col: 8 }, { chessId: 'chess_char_3_09_a', row: 9, col: 9 }], + bonds: { egirShip: { count: 3, active: true, tier: 1, layers: 0 } }, timeLimit: 10, seed: 1, autoFinish: false, + }); + const marks = []; + h.b.on('damaged', (c) => { if (c.dmg?.tags?.includes('bond:egir:devour')) marks.push([c.source.tileC, c.target.tileC]); }, { priority: -1000 }); + h.step(2); + assert.deepEqual(marks, [[3, 4]], `${label}: the back one (col 3) devours the front one (col 4)`); + } +}); + +test('45: 寻呼模块 / 简易通讯机 on 缪尔赛思 below shop level 6 — nothing qualifies (调和, tier ≤ shop level), the item is used up', () => { + for (const itemId of ['chess_item_4_01_e_a', 'chess_item_2_06_e_a']) { + for (const level of [5, 6]) { + const h = makeMatch({ mode: 'solo', difficulty: 'NORMAL', humans: 1, seed: 7, fake: true }).start(); + h.toPrep(1); + const ps = h.ps('p_0'); + ps.shop.level = level; + const mly = ps.acquireChess('chess_char_6_11_a', { source: 'test' }); + const item = ps.acquireItem(itemId, { source: 'test' }); + const owned = () => [...ps.board.values(), ...ps.hand, ...ps.temp].filter((p) => p && p.id === 'chess_char_6_11_a').length; + const n0 = owned(), offers0 = ps.offers.length; + assert.deepEqual(h.m.handle('p_0', { t: 'g.equip', itemUid: item.uid, targetUid: mly.uid }), { ok: true }); + assert.equal(ps.find(item.uid), null, `${itemId} @${level}: consumed`); + const got = owned() - n0 + (ps.offers.length - offers0); + if (level < 6) assert.equal(got, 0, `${itemId} @${level}: nothing (no 调和 operator of tier ≤ ${level})`); + else assert.equal(got, 1, `${itemId} @6: 缪尔赛思 (granted, or offered by 寻呼模块)`); + } + } +});