 joywayerandClaude Opus 5
|
8e0c8fdc90
|
二七王:接上 SubGameHooks.DeskInfo(中途进桌),复用重连的重画路径
平台 07_Desk.js 在「牌局已开始 + 走加入房间而非重连」时调 Game_Modify.DeskInfo(_msg.data.deskinfo),
该 hook 此前只有注释占位,整份 deskinfo 被 02 转发壳静默丢弃、界面全空且不报错。
裁剪核实(读平台源码):两条路径的 deskinfo 都出自 server_room/class.return.js——
进房走 self_join_room 的 get_deskinfo(o_room, o_player.gameinfo.seat),
登录走 self_login 的 get_deskinfo(o_player.gameinfo.o_room, o_player.gameinfo.seat),
同一个函数、同一个「本人座位」入参。底牌/埋牌底牌只给庄家、亮牌只给闲家、mustcard 只给轮到那家
等可见性裁剪对中途进桌一样生效,不存在「拿到别人视角」的问题,接线安全。
test_hooks 新增 4 条断言,含「同一份 deskinfo 分别喂 DeskInfo 与 Reconnect,snapshot 逐字段相同」。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-27 22:06:53 +08:00 |
|
 joywayerandClaude Opus 5
|
af779f473a
|
二七王:C-1 修复 room.mySeat 永远为 -1
平台 12_Logic.js 在第 389 行调 Game_Modify.appStart(),而 C_Player = new Player(-1)
要到同函数第 480 行才执行,此刻 typeof C_Player === 'undefined',appStart 整体空转;
之后玩家登录 SetSeat 拿到真座位,appStart 再也不会被调用。于是 mySeat 永远停在 -1:
发包带 seat:-1 被服务端 check_player 全部拒绝、StartWar 差异化下发认领不到本座位而
整包丢弃、SeatMap.toDisplay(-1) 抛错——且全程无一处报错。
- 新增 SubGameHooks._syncMySeat():room.mySeat 的唯一写入处(SSOT),幂等、
座位非法或 C_Player 缺席时保持原值不倒退
- 在 setRoomDes / StartWar / Reconnect / ReconnectNoMakewar / appStart 各调用一次,
不赌「所有路径都经过某一个入口」
- 新增 SubGameHooks.changeSeat 并同步座位:Desk.change_seat 是唯一「座位中途变化
且不重走 setRoomDes」的路径,漏掉会让 mySeat 静默过期
- Rpc._seat() 改 fail-fast:座位非 0/1/2 即抛错,不再无声透传 -1
- 新增 client/tests/test_appstart_timing.js:复刻平台真实初始化时序,
全程不直接赋值 mySeat;已反向验证(退回 6 个调用点后核心断言转红)
- test_rpc_send 补座位非法抛错断言;test_consistency 删除空转的 my.mustCard EXCLUDE
client 23 脚本全绿,server 17 脚本 / 680 checks 全绿。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-27 21:05:46 +08:00 |
|
 joywayerandClaude Opus 5
|
22e43cf2e6
|
二七王:平台接线与加载段
SubGameHooks 只解包转交、不写业务:_ReceiveData 收到的是完整包,
按 rpc 分发;Free 的参数是平台已取出的 deskfree、可能为 null;
appStart 只记座位与房间选项,UI 初始化留给 C 阶段。
index.html 里 handler 排在 Dispatcher 之前——后者注册时要引用全部 handler。
另加 test_index_load_order.js:按 index.html 实际 script 顺序自动加载
codes/ 全部文件 + 3 个框架依赖,验证顺序无遗漏、无环,并断言
EQW_Dispatcher 路由表确已注册,作为长期守卫。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-27 20:16:45 +08:00 |
|
 joywayerandClaude Opus 5
|
717e405292
|
二七王:SubGameHooks 注释去掉已作废的 NumberRenderer 提法
事件链路本身不变,只把注释里对已回退方案的引用换成实际存在的例子
(248 号协议勾选的绘制回调)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-27 00:07:55 +08:00 |
|
 joywayerandClaude Opus 5
|
3789e0814e
|
二七王:接通平台精灵事件链路(SubGameHooks → SpriteEventController)
SubGameHooks 原是空骨架,Game_Modify.* → SubGameHooks.* → SpriteEventController
这条链是断的:不仅数字叠绘的绘制回调不会触发,转发壳里已注册的 13 号战绩按钮、
150 号帮助按钮、248 号协议勾选也收不到事件。
实现 utlmousedown / utlmousedown_nomove / mouseup / utlmousemove /
utlgamemydrawbegin / gamemydraw 六个 hook,只做转发、不写业务逻辑,
参数顺序逐个对齐 SpriteEventController.handleXxx 的签名(错位会让事件静默失效),
转发前判断依赖存在,防御风格与转发壳一致。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-26 23:53:03 +08:00 |
|
 joywayerandClaude Opus 5
|
b22558d0b3
|
二七王:前端接入骨架与 index.html 加载段
SubGameHooks 从模板复制、本阶段保持空骨架(无 hook 时转发壳走平台默认)。
index.html 按 client 06 §3 的顺序加入 codes 段:config → shared → core → ui
→ SubGameHooks → 三文件转发壳,三个转发壳一字未动。
Node vm 依序加载验证无异常,全部 EQW_* 与 SubGameHooks 就绪;两端测试全绿。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-26 21:51:53 +08:00 |
|