Balatro-Multiplayer / Balatro-Multiplayer/BalatroMultiplayerAPI
Ban-pick: weighted tuple pool policy per gamemode (Botlatro generation parity)
- Ngôn ngữ chính
- Lua
- Star
- 7
- Fork
- 3
- Merge trung bình
- 4 giờ 42 phút
- Pull request đã merge (30 ngày)
- 4
Mô tả
The ban-pick engine's default pool is a uniform random sample of every installed deck Back — including modded decks — with no exclusions, no weights, and no stake dimension. Botlatro (the Discord matchmaking bot) already runs real pool policy for its tuple-ban queues; this issue is about giving consumer mods the same power in-game, per mod and per gamemode.
## Reference: what Botlatro's generation enforces (`src/utils/TupleBans.ts`)
- Allowed stakes: a fixed subset (White/Green/Black/Purple/Gold — 5 of 8).
- Allowed decks: `decks` table minus per-queue `banned_decks` minus match-step bans.
- Weighted roulette-wheel selection via per-queue `deck_mults` / `stake_mults`.
- Occurrence caps in the generated list (9 tuples): max 4 of any stake (`< (tupleCount-1)/2`), max 3 of any deck (`< (tupleCount-3)/2`), no duplicate (deck, stake) pairs.
- White-stake guarantee: if the final slot is reached with zero whites, it is forced white — every list contains at least one.
- All of it is data-driven (DB tables) so moderators tune weights/bans live, without a deploy.
## Proposal
1. **A reusable weighted-tuple pool helper in the API** (opt-in, e.g. `MPAPI.BanPick.build_weighted_pool(policy)`), implementing the constraints above and returning `{ key, stake }` items. The engine already supports everything downstream of it: pool items may be `{ key, stake, ... }` tables, and `config.decorate_tile(card, item)` renders stake stickers — no engine changes needed.
2. **Policy comes from the consumer, per gamemode** — each mod passes its own policy into `BP.start` via `build_pool`, exactly like `schedule`/`decorate_tile` today. PvP and Speedrun configure independently.
3. **Policy data should be server-deliverable** (gamemode config in the match/lobby payload, keyed by `modId + gameMode`) so allowed lists/weights can be tuned like the bot's DB-backed mults — without shipping mod updates. Client-side defaults as fallback.
## Notes
- Sampling differs today: the in-game default samples decks without replacement (each deck once); tuple pools intentionally allow one deck at multiple stakes. Both remain valid choices per gamemode — the helper covers the tuple case, the current default stays for plain drafts.
- Related: the low-rated-player pool veto (see linked issue) depends on this — its mercy rule ("force white stakes into the reroll") only has meaning against a weighted tuple pool.
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Hướng nghiên cứu
Bắt đầu bằng cách xác định entry point BP.start của ban-pick engine, pool mặc định hiện tại của nó và phần tích hợp build_pool/decorate_tile. Sử dụng src/utils/TupleBans.ts làm tham chiếu hành vi cho việc tạo tuple có trọng số và các ràng buộc. Công việc được xem là hoàn tất khi các chính sách consumer hoạt động theo từng mod và gamemode, với cấu hình có thể được server cung cấp và các giá trị mặc định phía client như mô tả.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- lua
- Lĩnh vực
- api
- Loại issue
- Tính năng
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100