diff --git a/server/sim/content/bands/meta.js b/server/sim/content/bands/meta.js index 9606a716..9b70b710 100644 --- a/server/sim/content/bands/meta.js +++ b/server/sim/content/bands/meta.js @@ -12,7 +12,8 @@ // give_coin_in_round {round,coin} 老鲤 income of round `round` = coin (R1/R2 0, R3 15) // prep_start_gain_chess_from_pool_in_round {round} 老鲤 round start of `round`: 1 chess of pool // band_coin_cost_gain_random_char_by_shop_level 绮良 every coin_cnt funds spent → count random chess ≤ shop level -// up_shop_next_refresh_must_present_bond_char 佩佩 level-up to a level of lvlist → +1 free refresh (price 0) that prefers +// up_shop_next_refresh_must_present_bond_char 佩佩 level-up to a level of lvlist → the next manual refresh (its usual +// price) prefers // gain_bond_char_per_round {round,preround,bond} 哈洛德 rounds round, round+preround, …: a chess (≤ shop level, else any tier) // first_buy_in_round_char_price_change {price,bond} 休露丝 first chess of the round costs `price` (bought in the // shop: onBuy — a free pick / grant never uses it up) @@ -184,12 +185,15 @@ K.band_coin_cost_gain_random_char_by_shop_level = (ps) => ({ }, }); +// 佩佩 博学多通 "升级调度中心至2、4和6级后,获得1次特殊刷新:此次刷新出现的干员优先为<萨尔贡>干员": the special refresh is the +// player's next manual refresh, paid as usual — the text gives no 免费 (德克萨斯's trait says 「获得1次免费刷新」 for a free +// one), and the community report of 2026-10-06 「佩佩策略的特殊刷新也是要花钱的,不是免费」. Until 0.2.0 a free refresh came +// with it (blackboard `price` 0 read as its price) [ASSUMED: `cnt` / `price` 0 change nothing]. K.up_shop_next_refresh_must_present_bond_char = (ps) => ({ onLevelUp(ctx, ev) { const p = ps[0]; if (!list(p.lvlist).map(Number).includes(ev.level)) return; ctx.incCounter('band:pepe:special', 1); - if (int(p.price, 0) === 0) ctx.grantFreeRefresh(1); }, onRefresh(ctx) { if (ctx.counter('band:pepe:special') <= 0) return; diff --git a/test/content/bands.test.js b/test/content/bands.test.js index 40e9f070..a0efc03c 100644 --- a/test/content/bands.test.js +++ b/test/content/bands.test.js @@ -223,16 +223,16 @@ test('绮良 通关奖励: every 20 funds spent ⇒ 1 random operator of tier cover('band_kirara'); }); -test('佩佩 博学多通: upgrading to 2 / 4 / 6 gives 1 special (free) refresh whose operators are <萨尔贡> first', () => { +test('佩佩 博学多通: upgrading to 2 / 4 / 6 makes the next refresh special (paid as usual) — its operators are <萨尔贡> first', () => { const seed = seedWithBond('sargonShip', 2, 2); const { m, ps } = setup({ band: 'band_pepe', seed }); ps.shop.upgradePrice = 0; assert.deepEqual(m.handle('p_0', { t: 'g.levelUp' }), OK); assert.equal(ps.shop.level, 2); - assert.equal(ps.shop.freeRefreshes, 1); + assert.equal(ps.shop.freeRefreshes, 0, 'no free refresh comes with it (community report of 2026-10-06)'); const f0 = ps.funds; assert.deepEqual(m.handle('p_0', { t: 'g.refresh' }), OK); - assert.equal(ps.funds, f0, 'free'); + assert.equal(ps.funds, f0 - m.gd.refreshPrice, 'the usual refresh price'); const chess = ps.shop.slots.filter((sl) => sl && sl.kind === 'chess'); assert.ok(chess.length >= 3 && chess.every((sl) => DATA.chess[sl.id].bonds.includes('sargonShip')), 'all 萨尔贡'); assert.equal(ps.counters['band:pepe:special'], 0, 'consumed');