修复赤刃明霄陈三技能对空自动开启并核实社区反馈

S3 的扩展范围含可选中的飞行目标时可以自动开启剑气;普攻保持仅对地。
[ASSUMED] 自动触发区域沿用扩展攻击格和永久射程延长,不扩张到未来剑气的整条路线。

补测部署技能与休整属性预览、后排协防蕾缪安真实锁定耗弹、诗怀雅落地金币、
莎草对炸弹的治疗链,以及予愿三种技能的普通地面溅射和无视可选性例外。
未复现的报告保留证据边界;诗怀雅被动落地投瓶符合 PRTS。

全 285 场 golden 重建并验证,仅 diy-074 变化:新增 4 次陈 S3,伤害 142376→163563,
时序/选敌改变后击杀 21→18、漏怪 96→99,223.83 秒和结束方式不变。
其余 284 场不变。

CI:5879 tests,5876 pass,0 fail,3 skip;setup/smoke/lint/imports/typecheck 均通过。
新增 16 项回归,相关 6 文件 63/63,补充 2 文件 20/20,文档 31/31。
This commit is contained in:
sganggs committed 2026-10-10 01:02:23 +08:00
1 parent 708caf7d06
commit 821ab827bd
9 files changed
+211 -14

No files matched your search

+26
View File
@@ -113,6 +113,32 @@ test('g.unitStats follows the prep state: another item changes the numbers; prep
m.dispose();
});
test('prep stat previews do not spend a deployment skill duration in the next real battle', () => {
const { h, m, ps } = setup(27);
const id = 'chess_char_4_16_a'; // 缄默德克萨斯: a real timed deployment skill
const piece = give(m, ps, id, 'board', legalTileFor(m, ps, id));
const previews = [];
const create = m.newBattle.bind(m);
m.newBattle = (opts) => { const b = create(opts); previews.push(b); return b; };
for (let i = 0; i < 3; i++) {
m._unitStatsCache = null; // test fresh previews as well as the cached request
assert.deepEqual(m.handle('p_0', { t: 'g.unitStats', seq: i }), { ok: true });
const entry = h.lastTo('p_0', 'm.unitStats').units.find(u => u.uid === piece.uid);
assert.ok(entry); assert.equal('sp' in entry, false); assert.equal('timeLeft' in entry, false);
}
assert.equal(m.phase, PHASE.PREP);
for (const b of previews) {
const u = b.allyUnits.find(u => u.uid === piece.uid);
assert.equal(b.time, 0); assert.equal(b.tickCount, 0);
assert.ok(u.skill.active); assert.equal(u.skill.timeLeft, u.skill.duration);
}
const b = create(m._normalOpts(ps)); const u = b.allyUnits.find(u => u.uid === piece.uid);
assert.equal(b.started, false); assert.equal(u.deployed, false);
b.start(); assert.equal(u.skill.timeLeft, u.skill.duration);
b.step(); assert.ok(Math.abs(u.skill.timeLeft - (u.skill.duration - b.dt)) < 1e-8);
assert.deepEqual(b.errors, []); m.dispose();
});
test('the preview changes nothing of the match: two identical matches, one asking for the stats all along, stay identical', () => {
const run = (ask) => {
const { h, m, ps } = setup(23);