mirror of
https://github.com/diangogav/EDOpro-server-ts
synced 2026-08-24 00:23:05 -04:00
* chore(dependencies): update various package versions in package-lock.json * feat(windbot): playable edison bots and format-scoped random pools Edison bots join the botlist under short names that fit the utf16[20] pass field. Botlist entries gain a format tag; random bot selection resolves a pool from the join tokens (mirroring the room's rule-tier precedence) so a format room can no longer roll a bot with an illegal deck. Bot names are validated against the pass-field budget at boot, and the bot-request failure path delivers its JOINERROR before the canonical room teardown destroys the sockets. * feat(ban-list): deterministic alias resolution with load-time format aliases Format banlists carry an explicit alias captured from their formats/<dir> path at load time. Alias resolution tries the alias field, then the exact normalized name, and only then the substring scan — now tie-broken by shortest normalized name instead of load order, with a memoized warning on ambiguity. Adds getFirstOCGIndex so OCG-list tokens stop hardcoding index 0. * fix(room): rule-mapping clamps, state coherence, and boot-order hardening The lp clamp compared a NaN (parseInt over the whole token) so lp0 started duels at 0 LP; clamps now act on the extracted number. The edison rule set is shared between its two tokens. The room's DuelState label and its state object now always transition together: waiting() sets both and resets isStart/ready flags, and setDuelFinished disposes the OCGCore before delegating — the ocgcore-error rewind no longer leaks the core, lies to the room list, or leaves a stale TRY_START armed. Missing banlist aliases warn once instead of silently mislabeling rooms. Windbot bootstrap moved before socket init so a bad botlist aborts pre-listen, and the never-initialized registry fallback composes the full base chain. * feat(room): exact-string pairing joins and (name,password) room identity Empty-password commands made purely of recognized tokens become pairing joins: they route to a waiting same-command room with a free seat, an empty password, and a compatible league — or create a fresh room. They never land in a dueling or full room. A disconnected pairing player who re-sends the bare command is first matched as a legitimate reconnector (same predicate as findReconnectingPlayer) before the pairing scan runs. Non-pairing joins now identify a room by the exact (name, password) pair: a mismatched pair creates its own room instead of rejecting, so a passwordless pairing room no longer blocks passworded rooms that share its name. Spectating a room mid-duel with the correct password is unchanged. docs/join-commands.md is the reference for the whole command system. |
||
|---|---|---|
| .. | ||
| join-commands.md | ||
| testing.md | ||