feedback1 integrate: 隐德来希's candles standing at the time limit are no leaks (an honest client result was rejected)

A co-op 联防 battle that timed out during 隐德来希 S3 listed the 心烛 (in no spawn
schedule) as a leak, so the server rejected the client's result ('leak key').
Pre-existing on master; the merged bots reached it on fullmatch seed 116.
This commit is contained in:
sganggs committed 2026-10-03 06:43:26 +08:00
1 parent da0aa28d5f
commit f0f6016479
3 files changed
+36 -2

No files matched your search

+4 -2
View File
@@ -484,9 +484,11 @@ export class Battle {
_timeout() {
// Remaining non-boss enemies on the field count as leaked (DESIGN §5.5). Spawns that never happened before the
// limit are dropped: they are removed from `total` and reported in `result().unspawned` (not leaks).
// limit are dropped: they are removed from `total` and reported in `result().unspawned` (not leaks). A content-made
// neutral (`mem.noLeak`: 隐德来希's 心烛, which follows its original) is never a leak — it is in no spawn schedule, so
// a client result listing it would be rejected (fields.js validateClientResult 'leak key').
for (const e of this.enemies) {
if (!e.alive || e.isBoss) continue;
if (!e.alive || e.isBoss || e.mem.noLeak) continue;
this._recordLeak(e, true);
}
this.unspawned = [];
+1
View File
@@ -933,6 +933,7 @@ const KITS = {
cd.hp = cd.s.maxHp;
cd.mem.candleOwner = unit;
cd.mem.candleOf = e;
cd.mem.noLeak = true; // never a leak at the time limit (Battle._timeout)
battle.addBuff(cd, { key: 'etlchi:candle', flags: { unblockable: true, noMove: true } });
unit.mem.candles.push(cd);
battle.fx('candle', { x: cd.x, y: cd.y, id: cd.id, of: e.id });