diff --git a/docs/META.md b/docs/META.md index dbdc5d76..ba07a1f7 100644 --- a/docs/META.md +++ b/docs/META.md @@ -489,7 +489,8 @@ it fits in the existing parts: `m.private.canReady` false), and the prep's own deadline resolves it: in a timed co-op prep `prepDeadline` takes one of the cards at random (the meta rng, like a 机变 turn that runs out) before the temp pieces and Ready; a solo or single-human prep is untimed and has no timer for it, and a disconnected player waits for the deadline like for any - other prep action. A seat the engine plays — an AI teammate, a human under AI 托管, one that left — picks like the bots do. + other prep action. A seat the engine plays — an AI teammate or a human under AI 托管 — picks like the bots do; a seat that + left is eliminated (`onLeave` → `eliminate`), which drops its open offer: nobody picks for it. * **The bots.** `bot.js` scores the three cards like a 机变 bounty draft (`botPickCard` → `bountyScore`: the expected payout minus the expected leaks × the value of an LP, against the own board; the bots' seeded rng only breaks ties), so the choice is deterministic for a seed: at the start of the bot's prep (an offer left by a human who turned 托管 on), diff --git a/docs/design/match.md b/docs/design/match.md index dcc9cb2b..e745ff63 100644 --- a/docs/design/match.md +++ b/docs/design/match.md @@ -90,7 +90,7 @@ Per match: pick stage (weighted among the mode's `config.modes[m].stages`, weigh ### 6.6 AI players (bot.js) Pending Pointing Stick offers use the existing bounty scorer at bot prep entry, immediately after a successful cast, -and before Ready. The timer / disconnected-seat finalizer randomly resolves any remaining offer before temp and Ready. +and before Ready. The prep's deadline — and the scheduler's fallback when a step of a bot's prep fails — randomly resolves any remaining offer before temp and Ready; a seat that left is eliminated and its offer dropped. Deterministic-ish heuristic player used for (a) AI teammates, (b) auto-play for disconnected humans (only auto-ready + auto-picks, not shopping, unless "AI 托管" is toggled), (c) tests. Strategy (§21.6): pick a band (weighted by starting LP; never one built around a bond the mode switches off — `gd.bandBondIds`, §21.26); each prep: take offers, sell dead bench weight, fill the board, complete affordable merges, level on the curve, then buy only merge progress / lineup upgrades worth more than the refreshes their price would buy (shop odds of completing held pairs), freeze for an unaffordable third copy (坎诺特 keeps 5 funds back); build around a committed focus core bond (a teammate's main bond on its strip counts against it; bonds the mode switches off never) + a second bond; value dealers by DPS vs the round's DEF / RES (an attack on every enemy in range counts double — 阵法术师 / 轰击术师), with the range the unit is deployed with; place by the exposure model + rehearsal on the server's deploy map (no 深水区; a blocker whose range is its own tile only — range 0-1 — takes a free tile of the enemy road first; a tactician's 援军 within `PlayerState.summonRange`; a melee chess whose trait reads 「可以放置于远程位」 (钩索师 / 推击手) on a 高台 whose range covers the enemy road, else on the ground, counted as a blocker in the lineup either way — §3; `g.move` judges legality); items by effect (META §1.5: 突变细胞 on the least valuable normal single below 6阶, a cell left in temp gets a hand slot made for it, the operator its transformation gains is deployed by the next prep's lineup step like any owned unit — AI 托管 too; the buy loop's bench shed never sells a piece gained since the bot's last prep, §21.1); 机变 bounties by expected payout − expected LP loss over the offered cards; resolve temp — on a human seat under AI 托管 never by destroying an item while a bench operator can be sold for the slot —; ready. A bot's whole prep — shop decisions and layout planning (`botPrepBeginSteps`, 25–70 ms late in a 4-bot match), the layout rehearsal and `botPrepEndSteps` — runs in wall-clock slices of `botSliceMs` (8 ms) per scheduler callback on a real host (step generators that yield between whole actions, never with a transient board; the same actions in the same order, so decisions are unchanged; at once in virtual time). Under AI 托管 a human's own 自选 pieces score `DIY_PIECE_BONUS` (12) more in the shop / reward choice and the 调度中心 is levelled one round earlier for the step that opens a slotted tier (`levelUp`, `diyOpensAt`; 0.2.0 — bots field no 自选 piece).