Files
ark-stronghold-protocol/test/match/feedback5-cathy-pool.test.js
T
sganggs 1d3c76b11c feedback5 CB1: 凯瑟琳's 定向投放 offers every shop item, not only those up to the shop level (community report 「凯瑟琳装备池没有超出商店等级的装备,原版凯瑟琳1升2都能有6本装备」, item 43)
The pool (pool_equip_kathe) is server-side; tools/build-data.mjs had capped it at the shop level [ASSUMED], so the 1 → 2
upgrade only ever offered tiers I–II (measured over 40 seeds: 55 × I, 65 × II). The players' first-hand account: tier VI
shows at that upgrade. Now every shop-eligible item, uniform [ASSUMED] (40 seeds: I 9, II 15, III 25, IV 31, V 16, VI 24);
pool_equip_narant keeps its cap (no report). data/choices.json rebuilt offline (build-data --offline): the JSON compare
shows only pools.pool_equip_kathe.maxTier removed. Test: test/match/feedback5-cathy-pool.test.js (fails on the parent
data). Docs: research 04 (the pool).

Golden: coop4-ABYSS-7 — a bot on 凯瑟琳 is offered other items at its upgrades (the match runs differently from there).
2026-10-07 02:27:54 +08:00

33 lines
1.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Community report of 2026-10-06 「凯瑟琳装备池没有超出商店等级的装备,原版凯瑟琳1升2都能有6本装备」 (item 43): the 凯瑟琳 strategy
// (定向投放, up_shop_add_special_goods {count 3, choice 1, pool pool_equip_kathe}) offered only items up to the shop level —
// data/choices.json pool_equip_kathe maxTier 'shopLevel', an [ASSUMED] cap (the pool is server-side). The players' first-hand
// account: tier VI items show at the 1 → 2 upgrade. The pool is every shop-eligible item now (uniform [ASSUMED]).
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { makeMatch, DATA } from './harness.js';
test('凯瑟琳 定向投放: the level 1 → 2 offer draws from every tier, the special items never', () => {
assert.equal(DATA.choices.pools.pool_equip_kathe.maxTier, undefined, 'no shop-level cap in the data');
const tiers = new Map();
for (let seed = 1; seed <= 12; seed++) {
const h = makeMatch({ mode: 'solo', difficulty: 'NORMAL', humans: 1, seed, fake: true }).start();
h.toPrep(1, { band: 'band_cathy' });
const ps = h.ps('p_0');
ps.funds = 50;
assert.deepEqual(h.m.handle('p_0', { t: 'g.levelUp' }), { ok: true });
assert.equal(ps.shop.level, 2);
const offer = ps.offers[ps.offers.length - 1];
assert.ok(offer, `seed ${seed}: an offer`);
const ids = (offer.slots ?? []).filter((s) => s && s.kind === 'item').map((s) => s.id);
assert.equal(ids.length, 3, `seed ${seed}: 3 items`);
for (const id of ids) {
const rec = h.m.gd.item(id);
assert.ok(rec && !rec.shopExcluded, `seed ${seed}: ${id} is a shop item`);
tiers.set(rec.tier, (tiers.get(rec.tier) || 0) + 1);
}
}
assert.ok([...tiers.keys()].some((t) => t > 2), `items above the shop level (the parent: tiers I–II only) — ${JSON.stringify([...tiers])}`);
assert.ok(tiers.has(6), 'tier VI among them');
});