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:
1 parent
7f134737ce
commit
f8e35d5055
17 files changed
+514
-54
No files matched your search
+18
-6
@@ -174,7 +174,8 @@ Buys toward a full board first (the cap is 8 from R1; leftover funds are lost),
|
||||
(L2 ≈ R3, L3 ≈ R5, L4 ≈ R7, L5 ≈ R10, L6 ≈ R12 — the competent curve of docs/BALANCE.md; free levels always), then
|
||||
spends the rest on merge progress, bond thresholds around a focus core bond (most owned members, ties → most copies
|
||||
left in the shared pool), role needs (2 blockers, anti-air when the wave flies, ≤ 2 healers), 特质 that keep adding
|
||||
layers (every prep / refresh — the layer engines) and items for free carriers; refreshes while a purchase stays
|
||||
layers (every prep / refresh — the layer engines) and items for free carriers (突变细胞 on its least valuable single
|
||||
normal operator below 6阶 — never an elite or one of a merge pair, `bot.js cellTarget`); refreshes while a purchase stays
|
||||
affordable; sells bench chess that neither make the lineup nor build toward something (a live pair, the focus bond,
|
||||
an elite). The deployed set maximizes unit value + activated bond tiers (exact counting via `computeBonds`). Placement
|
||||
uses the round's enemy preview: every route is traced over the own board (ground: the stage's device-aware ground
|
||||
@@ -268,7 +269,7 @@ that per garrison with `garrisonHooks(garrison) → hook[]`, e.g. "<进入休整
|
||||
| `SERVER_GAIN` 获得时 | `onGain` | the gained piece — run **×2 while 投资人 is active, ×3 at ≥ 100 投资人 layers** |
|
||||
| `SERVER_PREP_START` 进入休整期时 | `onRoundStart` | owned chess: board, and hand unless `bbStr.conditionkey === 'character_target_inboard'` |
|
||||
| `SERVER_PREP_FIN` 休整期结束时 | `onPrepEnd` | same |
|
||||
| `SERVER_REFRESH_SHOP` 刷新时 | `onRefresh` | same |
|
||||
| `SERVER_REFRESH_SHOP` 刷新时 | `onRefresh` | same — manual refreshes only (`ev.trigger` marks a re-run); 拉普兰德's "本回合首次主动刷新" counts per copy (`incPieceCounter`) |
|
||||
| `SERVER_CHESS_SOLD` 售出时 | `onSold` | the sold piece |
|
||||
| `SERVER_PRICE` 购买价格 | `onPrice` (first) | the chess in the priced slot (`ctx.source.where === 'shop'`); SERVER_CHESS_PRICE `bb.price` is the discount off the tier price (至简 3 − 2 = 1, 红豆 2 − 1 = 1: both texts say 购买价格为1) |
|
||||
| `IN_BATTLE` | — | battle side (server/sim/content/garrisons.js `install`) |
|
||||
@@ -293,7 +294,11 @@ Reads: `playerId seat name round phase modeId difficulty isSolo isCoop data (fro
|
||||
`Math.random`), `funds() lp() alive() bandId() shopLevel() bond(id) bonds() bondActive(id) bondCount(id) layers(id)
|
||||
board() hand() temp() piece(uid) pieceAt(row, col) pieceBonds(uid) garrisonsOf(uid) chessRecord(id) stats() roundStats()
|
||||
shopSlots() effect(id)` (`piece(uid)` adds `area`, `holderUid`, `idx`; "身前一格" of (r, c) is (r, c + 1)),
|
||||
counters `counter(k) setCounter(k, v) incCounter(k, n)` (player scope, persistent; prefix keys with your module).
|
||||
counters `counter(k) setCounter(k, v) incCounter(k, n)` (player scope, persistent; prefix keys with your module) and
|
||||
`pieceCounter(uid, k) incPieceCounter(uid, k, n)` (per piece, current round only: 0 in a new round and for a new piece —
|
||||
bought, granted, transformed —; a move keeps it; an elite merged this round keeps the highest of its copies'
|
||||
[ASSUMED]; `PlayerState.pieceRoundCount`) — 拉普兰德's "本回合首次主动刷新" is the first manual refresh that copy witnesses
|
||||
(player feedback after 0.1.0: "获得该干员后该回合的首次刷新" also stacks).
|
||||
|
||||
Writes (all validated, never throw on bad input, never make funds / pools negative):
|
||||
|
||||
@@ -306,7 +311,7 @@ Writes (all validated, never throw on bad input, never make funds / pools negati
|
||||
| `rollChess({ maxTier, tier, bond, filter })` / `rollItem({ pool, tier, maxTier })` | copy-weighted chess id from the shared pool / item id (choices.json pools) |
|
||||
| `grantFreeRefresh(n)` | free refreshes (stack) |
|
||||
| `modifyPrice(delta)` / `setPrice(v)` | onPrice only: edit `ev.price` |
|
||||
| `promote(uid)` / `transform(uid, chessId)` / `upgradeItem(uid)` | elite in place / replace a chess (keeps tile) / item → golden |
|
||||
| `promote(uid)` / `transform(uid, chessId, { returnItems })` / `upgradeItem(uid)` | elite in place / replace a chess (keeps tile; keeps its equipment, or with `returnItems` sends it to the hand like a destroyed operator's — 突变细胞) / item → golden |
|
||||
| `destroyPiece(uid)` / `equipDirect(itemUid, chessUid)` | remove a piece (chess copies return, items go back) / attach without equip effects |
|
||||
| `offerChess(ids, { tier })` | queue a pick-one offer (shown as `shop.rewardOffer`, free) — 寻呼模块 / 信标 style |
|
||||
| `offerItems(ids, { tier })` | the same for items (slots of kind `'item'`) — 凯瑟琳 定向投放 style |
|
||||
@@ -337,7 +342,10 @@ Built-ins (builtinMeta.js, overridable): 盟约之币 / 骑士储蓄罐 (random
|
||||
紧急调度券 (take shop chess), 精打细算玩偶 (+funds each round), 简易通讯机 / 拟态物质 (same-bond chess), 见钱眼开玩偶
|
||||
(+funds next round), 人事部文档 (cap 9), 博士投影 (elite now / at the next round start), 寻呼模块 / 信标 (pick-one
|
||||
offers; 信标 gifts the original chess to the teammate with the most members of its bonds next round), 商业包装方案 (every
|
||||
N sells → same-bond chess), 突变细胞 (after battle → random tier+1 chess), 画卷 (copy the operator in range with its
|
||||
N sells → same-bond chess), 突变细胞 (after battle → a random NORMAL chess one tier higher, max 6, on the carrier's tile;
|
||||
the carrier's equipment, the cell included, returns to the hand — the cell is not consumed: PRTS 下半 记录 备注 "生效时,
|
||||
原干员销毁,获得一名高一阶的随机初始干员(最高六阶)", players re-inject it every round; player feedback after 0.1.0),
|
||||
画卷 (copy the operator in range with its
|
||||
items), 教鞭 / “神秘顾客” (a random bounty is added).
|
||||
|
||||
**教鞭 / “神秘顾客” stay a random bounty (deliberate).** The official Arts open a personal 悬赏 choice
|
||||
@@ -628,7 +636,11 @@ receiver only), plus CUSTOM texts (eliminations, 联防, hidden core).
|
||||
* A manual refresh while frozen keeps the new slots frozen until the next round start.
|
||||
* Level-up does not add slots until the next roll (refresh / round start).
|
||||
* Buying a second copy of an equipped normal item merges into the golden item in the hand (not equipped).
|
||||
* Promotions by effects (升华, 博士投影) keep the equipment; merges return it.
|
||||
* Promotions by effects (升华, 博士投影) keep the equipment; merges return it; 突变细胞's transformation returns it (the
|
||||
cell included).
|
||||
* An elite merged in a round keeps the highest per-piece round counter of its copies (`pieceRoundCount`): an elite made
|
||||
from 拉普兰德 copies that already fired this round does not fire again before the next round (conservative; the
|
||||
official server's instance handling is not observable).
|
||||
* Chess granted by effects need a free pool copy unless `requirePool: false` (then they hold 0 copies).
|
||||
* Boss-round `local` pack spawns (boss parts) all spawn; content scripts (bosses.js) decide their behaviour.
|
||||
* The Final Assault ends as a defeat when every field finished with the boss pool above 0 (boss escaped).
|
||||
|
||||
Reference in new issue
Block a user