feedback7 R22-LATE: 引星棘刺 S1 度算浪波 — two alchemy units on one ally add their DEF (+60 +60), as their heals already did; golden: roster-033, roster-034 move
GitHub #388 (claim 1). Every S1 alchemy unit applied its DEF buff under one shared key ('thorn2:bastion'), so a second unit over the same ally replaced the first one's buff (two units: DEF +60, not +120; a normal and an elite: +75, not +135) while both units' heals landed. PRTS 引星棘刺 技能1 备注: 「效果均可叠加」. Each alchemy unit now has its own DEF buff key (assigned at its first tick), so the buffs add (aggregateMods sums defFlat) and each lapses with its own unit. S3's 不叠加 debuff is untouched. Golden: roster-033 (a normal 引星棘刺 with S1, pass 1) and roster-034 (an elite one, pass 1) move — one operator's consecutive S1 units overlap for a few seconds (6 / 7 s + 3 s 心相 against a 7 / 6 SP cost) and now add their DEF on an ally both cover (033: killed 46 → 64, leaks 121 → 103; 034: damage taken by 5_13_b 41498 → 14903 …). Tests: test/content/kits_alt_t5.test.js (+1: normal + elite on one ally = +135, the longer unit's +75 stays alone, nothing afterwards; fails on the parent with +75).
This commit is contained in:
1 parent
0ca2a9c21a
commit
1a67ecc35f
3 files changed
+78
-45
No files matched your search
@@ -1028,6 +1028,36 @@ test('引星棘刺 S1 度算浪波: an alchemy unit on the lowest-HP ally: DEF +
|
||||
}
|
||||
});
|
||||
|
||||
test('引星棘刺 S1 度算浪波: two alchemy units on one ally add their DEF (PRTS 备注 「效果均可叠加」, GitHub #388)', () => {
|
||||
// two 引星棘刺 (a normal and an elite: +60 and +75) throw at the same lowest-HP ally; one shared buff key used to let the
|
||||
// last unit's DEF replace the other's (+75 instead of +135) while both heals already landed
|
||||
const [na, el] = pair('15');
|
||||
const h = run({
|
||||
defs: { chess: { t_low: ally('t_low', { stats: { def: 100 } }) } },
|
||||
units: [entry(na, 'skchr_thorn2_1', { row: 10, col: 3 }), entry(el, 'skchr_thorn2_1', { row: 11, col: 3 }), { chessId: 't_low', row: 10, col: 5 }],
|
||||
enemies: [],
|
||||
});
|
||||
const a = sel(h, na, 'skchr_thorn2_1'), b = sel(h, el, 'skchr_thorn2_1');
|
||||
const low = h.unit('t_low');
|
||||
h.step();
|
||||
low.hp = low.s.maxHp * 0.3;
|
||||
for (const u of [a, b]) u.skill.gainSp(1000);
|
||||
h.runUntil(() => [a, b].every((u) => (u.mem.zones || []).some((z) => z.type === 'guard')), 10);
|
||||
h.run(1.1);
|
||||
const [za, zb] = [a, b].map((u) => u.mem.zones.find((z) => z.type === 'guard'));
|
||||
assert.deepEqual([za.r, za.c, zb.r, zb.c], [10, 5, 10, 5], 'both on the lowest-HP ally');
|
||||
assert.equal(low.s.def, 100 + bbOf(a).def + bbOf(b).def, '+60 +75');
|
||||
assert.ok(low.hp > low.s.maxHp * 0.3, 'and they restore its HP');
|
||||
// one unit runs out: the other's DEF stays
|
||||
mute(h, a); mute(h, b);
|
||||
h.run(Math.max(0, za.dur - za.t) + 0.6);
|
||||
assert.ok(!a.mem.zones.includes(za) && b.mem.zones.includes(zb), 'the elite\'s unit (7 s) outlasts the normal one (6 s)');
|
||||
assert.equal(low.s.def, 100 + bbOf(b).def, 'its DEF stays alone');
|
||||
h.run(zb.dur);
|
||||
assert.equal(low.s.def, 100, 'no DEF bonus afterwards');
|
||||
done(h);
|
||||
});
|
||||
|
||||
test('引星棘刺 S1 度算浪波 (AUTO): fires as soon as its SP is full, no enemy needed (GitHub #124)', () => {
|
||||
for (const id of pair('15')) {
|
||||
const h = run({
|
||||
|
||||
Reference in new issue
Block a user