feedback1 WA: Lappland counts her own first refresh; Mutation Cell is not consumed

Player reports after 0.1.0, #1 and #4.

#1 拉普兰德 (garrison_123, SERVER_GAIN_BOND_LAYER_BY_REFRESH_CNT) checked the
player's refresh count of the round, so a copy bought after the round's first
manual refresh never stacked that round. Players report the official
behaviour: the first refresh after acquiring her also stacks. Each copy now
counts the manual refreshes it witnessed this round (board or hand) through a
per-piece round counter (PlayerState.pieceRoundCount, ctx.incPieceCounter); an
elite merged this round keeps the highest count of its copies [ASSUMED]. The
"本回合每刷新过1次" multiplier traits keep the player's count.

#4 突变细胞 destroyed itself after one transformation. Official text never
says 销毁 (every consumable's does), PRTS notes "原干员销毁,获得一名高一阶的随机
初始干员", and players re-inject the cell every round. The built-in now replaces
the carrier with a random normal operator one tier higher (max 6) and returns
the carrier's equipment, the cell included, to the hand
(transformChess returnItems); the content override is gone. The item card
shows the rule (items.json note, build-data ITEM_RULES); bots inject their
least valuable single normal operator below tier 6 (bot.js cellTarget).
This commit is contained in:
sganggs committed 2026-10-03 01:47:52 +08:00
1 parent 7f134737ce
commit f8e35d5055
17 files changed
+514 -54

No files matched your search

+20 -1
View File
@@ -1356,6 +1356,23 @@ const SHOP_EXCLUDED_ITEMS = Object.freeze({
chess_item_5_08_e_a: '策略【不稳定要素】(昆图斯)', // 突变细胞
});
/**
* Rules the official item text leaves out, by normal item id (both qualities): `note` = a player-facing line shown under
* the effect in the item card (items.json `note`), `implFormula` replaces research 04's formula.
* 突变细胞 — not consumed (player feedback after 0.1.0): PRTS 卫戍协议:盟约 下半/PRTS盟约记录 备注 "生效时,原干员销毁,
* 获得一名高一阶的随机初始干员(最高六阶)"; the text never says 销毁 for the cell (every consumable item's does), and
* players re-inject it every round ("之后就是一直打针,扎到核心卡或者叠层手干员就换人扎", bilibili cv47000418;
* BV1pEQ3BhEEi "如果四回合出了伊内丝,就考虑先不扎针") — the destroyed operator's equipment returns to the hand.
*/
const ITEM_RULES = Object.freeze({
chess_item_5_08_e_a: {
note: '生效时原干员销毁,获得一名高一阶的随机初始干员(最高6阶);突变细胞与其他装备退回整备区,可再次配发',
implFormula: 'After the battle: the carrier is destroyed and replaced by a random NORMAL operator one tier higher (max 6; '
+ 'an elite carrier too) on its tile when legal; its equipment, the cell included, returns to the hand (the cell is '
+ 'not consumed). Never merges.',
},
});
/**
* Build data/items.json: every item chess (EQUIP normal + golden, MAGIC Arts), keyed by chessId.
*/
@@ -1381,6 +1398,7 @@ function buildItems(ctx, effects) {
const isGolden = !!t.isGolden;
const upgradeNum = t.upgradeNum;
const excluded = Object.hasOwn(SHOP_EXCLUDED_ITEMS, baseId) ? SHOP_EXCLUDED_ITEMS[baseId] : null;
const rule = Object.hasOwn(ITEM_RULES, baseId) ? ITEM_RULES[baseId] : null;
out[chessId] = {
id: chessId, baseId, goldenId: shop?.goldenItemId || null, isGolden,
trapId: t.charId, iconId: t.charId, identifier: t.identifier,
@@ -1398,7 +1416,8 @@ function buildItems(ctx, effects) {
buffs: (eff?.buffs || []).map((b) => ({ key: b.key, countType: b.countType, bb: b.bb, bbStr: b.bbStr })),
params: eff?.params || {},
category: ri?.category || null, kind: ri?.kind || null, family: ri?.family || null,
implFormula: ri?.implFormula || null,
implFormula: rule?.implFormula || ri?.implFormula || null,
note: rule?.note || null,
rangeGrid: Array.isArray(ri?.rangeGrids) ? ri.rangeGrids.map((g) => [g.row, g.col]) : null,
flavor: ri?.flavor || null,
};