Files
youle_cocos/docs/protocol/07-RPC全量清单.md
T

834 lines
72 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 平台模板 RPC 全量清单
> 核对日期:2026-09-05;基线:codex/local-platform-login @ 556c47a。本文是后续联调的索引与覆盖快照,不替代 01–05 章的字段契约,也不表示清单内接口已经验收。
## 范围与计数
- 共 **86 个唯一名称**:旧 RpcList 的 **82 个**(重复赋值按名称去重),加表外 submit_error、show_message、refresh_task_state,以及 h5RpcList.joinRoom。
- 这是 Game_Surface_3 平台模板的全量:包含大厅、房间、纯推送、历史/保留名、HTTP 特例和外部桥接。具体子游戏自定义 route/rpc 没有在模板中穷举定义,留到子游戏阶段;本轮不选择或接入真实子游戏。
- 86 是索引名称数,不是 86 个可直接调用的 WebSocket 接口。submit_log 不另计;握手 @toconcon、心跳 @serverheartbeat 和 webserve-服务器未工作 是传输控制数据,不是业务 RPC。
- platform 是合法路由名称,但本次模板发送扫描未发现独占 route=platform 的命名业务请求;不复制 agent/room 名称来凑第三份清单。纯推送的路由归档不是当前本地服务器抓包证明。
## 接入与验收状态口径
- **L**:本地真实 Cocos 启动、加载、游客登录已验收;仅 player_login。依据[验收记录](../superpowers/reports/2026-09-05-local-platform-login-acceptance.md)。
- **R**:新 PlatformRuntime 的严格平台分发表已接入(共 11 个,含 L),仅表示源码处理链存在;除 L 外,当前批次没有真实 RPC 成功验收证据。
- **N**:不在新 PlatformRuntime 平台分发表中;不代表旧 H5 或旧 PlatformSession 完全没有实现。协议常量存在、旧 room-handlers 存在,均不能算新 Runtime 已接入。
- **X**:保留、HTTP 特例或本地桥接,不按普通 WS 平台命令判定。具体子游戏生命周期支持也不等于其某个对局 rpc 已实现。
- 当前 LocalPlatformLogin 联调入口只允许发 agent/player_login;R 中的房间/切服条目仍受测试边界阻断。本文不放宽测试入口。
- 条目中“旧发送/接收函数”只表示静态定义,不能推断调用点活跃或服务器确实响应。请求/响应摘要取自对应协议章节;未明确之处保留待核实,不补字段。
## 发现的差异与注意事项
1. refresh_task_state:当前旧源码引用未定义常量;02 章称硬编码字符串,已不符。新 routes.ts 也未收录。
2. submit_error、show_message:旧路径确有硬编码发送/命名接收器,但不在旧 RpcList,也不在新 routes.ts;不能只扫常量表。
3. submit_log:实际 rpc 仍为 submit_error;change_room 的响应为 change_seat;quick_enter_share_room 没有同名接收器。
4. README 仍写 WS 双层包装,而 01 章已更正为单层 {app,route,rpc,data};MessageEvent.data 是浏览器事件壳。以 01 章与已验收传输实现为准。
5. 02 章登录 version:string 与本地已验收 number 值有差异;openid/unionid 不得依据历史“游客可空”注释省略。
6. 新 routes.ts 的注释分组不是权威 rpc→route 映射,例如 create_room/self_join_room/get_player_grade1/get_player_grade2 在 room 注释区域,但旧发送实际为 agent;本清单按协议与发送源码归档。
7. can_award 的旧接收器调用未定义 C_Player.can_award;五个社交保留名没有旧 Net 接收器;不能按完整可用协议验收。
8. update_roomcard/update_bean:05_Func.js 的原生 yPaytype 与 WVJB yPaytype 回调直接上行,02 章“仅接收、无主动请求”不完整;已在条目中补齐,不能划为只读接口。
9. 本轮仅整理清单,未修改上述历史文档、业务代码、服务端或任何 Cocos 序列化资源。
## 配置来源与批次边界
- agentid/gameid/channelid/marketid/version 继续由现有配置来源经 runtime-config/local-startup 解析;各 RPC 只携带它所要求的字段,不能为统一外观给所有请求塞上整套身份。规范字段名为 channelid,不能写 chanelid。
- openid/unionid 与游客资料由现有 visitor-account 来源读取缓存或生成;登录后的 playerid 来自服务器与 Store。查询目标 playerid 与当前登录 playerid 的语义要逐项区分。
- roomcode/seat/shortcode/roomtype/deskinfo 等属于后续房间或子游戏范围;短信、原生数据、支付渠道等有各自前置条件,不能生成假值补齐。
- 后续优先梳理非房间平台 RPC 的只读查询,再逐项处理写操作和推送;房间相关及子游戏最后进行。列入本清单不等于授权执行。
## 按功能快速浏览
- **大厅 · 登录 / 账号(6)**:`player_login`、`query_player2`、`binding_phone`、`send_phone_checkcode`、`send_phone_code_wechat`、`setSign`。
- **大厅 · 房间创建 / 进入(大厅侧)(8)**:`create_room`、`self_join_room`、`quick_enter_share_room`、`advanced_roomlist`、`advanced_createroom`、`get_share_room`、`getInfoByShortCode`、`switchRoomList`。
- **大厅 · 战绩 / 排行 / 财富(5)**:`get_player_grade1`、`get_player_grade2`、`get_treasurelist`、`getShortCodeRankList`、`getVipRankList`。
- **大厅 · 任务系统(5)**:`get_player_task`、`player_finish_task`、`get_task_award`、`refresh_task_state`、`can_award`。
- **大厅 · 支付 / 充值 / 资产(4)**:`get_paylist`、`pay_succ`、`topup_card`、`giveCoin`。
- **大厅 · 仓库 / 星星 / 魅力(4)**:`set_bankpwd`、`change_star`、`update_charm`、`setAllCharm`。
- **大厅 · 邀请码 / 绑定(2)**:`binding_invitecode`、`get_player_invitecode`。
- **大厅 · VIP 管理 / 黑白名单(4)**:`optBanList`、`getPlayerWhiteList`、`optWhiteList`、`setVipForbidSelect`。
- **大厅 · 其它 agent 协议(8)**:`submit_opinion`、`submit_location`、`submit_phoneinfo`、`submit_error`、`kick_server`、`broadcast`、`connect_agentserver`、`playerBehavior`。
- **房间 · 房间生命周期(8)**:`self_break_room`、`other_break_room`、`self_exit_room`、`other_exit_room`、`player_prepare`、`change_room`、`share_room`、`change_seat`。
- **房间 · 进房推送(他人视角)(3)**:`other_join_room`、`other_offline`、`other_online`。
- **房间 · 解散投票(开局后)(8)**:`self_apply_free_room`、`other_apply_free_room`、`self_agree_free_room`、`other_agree_free_room`、`self_refuse_free_room`、`other_refuse_free_room`、`free_room`、`beanroom_surrender`。
- **房间 · 开局(2)**:`self_makewar`、`other_makewar`。
- **房间 · 房间内社交(6)**:`send_text`、`send_voice`、`send_gift`、`send_phiz`、`call_phone`、`hangup_phone`。
- **保留名称 · 房间社交(5)**:`receive_chat`、`play_voice`、`other_send_gift`、`other_callphone`、`other_hangup`。
- **大厅 · 资产更新与系统推送(4)**:`update_bean`、`update_roomcard`、`kick_offline`、`show_message`。
- **房间 · 服务器切换(room 侧)(1)**:`connect_roomserver`。
- **子游戏 · 框架保留名称(2)**:`over_game`、`agentserver_game`。
- **外部桥接 · 非网络 RPC(1)**:`joinRoom`。
## 全量条目
### 大厅 · 登录 / 账号(6)
#### 01. player_login
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**L / R**;新 Rpc 常量:有。
- 用途:连接建立后 `onopen` 自动发送;断线重连、切服后重发(12_Logic.js:35、:61 构造,09_Net.js:122 `Send_login` 注入)。
- 请求:构建身份 agentid/gameid/channelid/marketid/version;账号 openid/unionid/nickname/avatar/sex/province/city;设备与环境 machineid/machineroom/location/ip;按来源契约携带设备登录和缓存 playerid 等可选字段。完整结构见登录契约与 02/04 章。
- 响应/推送:state(0 成功);账号/资产字段,以及可能存在的房间恢复快照。完整结构见 04 章与当前 login-contract;本批只验收不在房的成功登录。
- 注意:真实本地启动→加载→游客登录已验收;version=1(number)已被本地服务器接受。02 章 version:string、游客 openid 可空的描述不能作为本地联调输入依据;本地服务要求 openid 与 unionid。房间恢复不在已验收范围。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:14);旧函数:[Send_login](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:122)、[player_login](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:240)。
#### 02. query_player2
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:仓库转账前查询目标玩家信息。
- 请求:`agentid`、`playerid`(目标玩家ID)。
- 响应/推送:`avatar`(string)、`nickname`(string)、`playerid`(int);昵称/头像均空时提示"未找到对应玩家"。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:44);旧函数:[Send_query_player2](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:869)、[query_player2](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:872)。
#### 03. binding_phone
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:绑定手机号。
- 请求:`agentid`、`playerid`、`phonenum`、`smmcode`(短信验证码)。
- 响应/推送:`phonenum`(string,回写 `C_Player.tel`)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:51);旧函数:[Send_binding_phone](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:829)、[binding_phone](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:833)。
#### 04. send_phone_checkcode
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:发送手机短信验证码。
- 请求:`agentid`、`phonenum`(构造点未集中定位,至少含手机号)。
- 响应/推送:无业务字段(`Desk.send_phone_checkcode` 为空实现,07_Desk.js:1342)。
- 注意:⚠️ 请求字段以后端实现为准。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:58);旧函数:[Send_send_phone_checkcode](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:837)、[send_phone_checkcode](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:841)。
#### 05. send_phone_code_wechat
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:微信渠道发送手机验证码(绑定手机流程的另一入口)。
- 请求:`agentid`、`phonenum`(唯一调用点 11_GameUI.js:2620-2623 当前被注释,按注释代码为 agentid+phonenum)。
- 响应/推送:无业务字段(`Desk.send_phone_code_wechat` 为空实现,07_Desk.js:1345)。
- 注意:⚠️ 框架完整定义并接线,但**当前前端唯一调用点(11_GameUI.js:2623)被注释,实际不发送**;字段以后端实现为准。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:65);旧函数:[Send_send_phone_code_wechat](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:845)、[send_phone_code_wechat](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:849)。
#### 06. setSign
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:设置个性签名。
- 请求:`agentid`、`playerid`、`sign`。
- 响应/推送:`sign`(string,回显写入 `C_Player.sign`)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:72);旧函数:[Send_setSign](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:735)、[setSign](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:739)。
### 大厅 · 房间创建 / 进入(大厅侧)(8)
#### 07. create_room
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:玩家创建房间。
- 请求:`agentid`、`playerid`、`gameid`、`roomtype`(房间类型配置数组,见 doc04);`Send_create_room` 自动注入 `ip`=`C_Player.ip`、`location`=`C_Player.addr`(09_Net.js:106-107)。
- 响应/推送:`state`(0成功)、`roomcode`、`seat`、`roomtype`、`makewar`、`asetcount`、`shortcode`、`infinite`;失败 `showerror`/`error`。详见 [04 → 房间响应公共字段](./04-数据结构.md#房间创建--进入响应公共字段)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:83);旧函数:[Send_create_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:104)、[create_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:111)。
#### 08. self_join_room
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**R**;新 Rpc 常量:有。
- 用途:输入房号 / 快速加入 / H5 唤起 / 进 VIP 配置房。
- 请求:`agentid`、`playerid`、`gameid`、`roomcode`(房号);`Send_self_join_room` 自动注入 `location`=`C_Player.addr`、`ip`=`C_Player.ip`(09_Net.js:254-255);进 VIP 配置房入口额外带 `vipMatch:1`(12_Logic.js:2171);比赛进房入口可带 `match_id`。
- 响应/推送:`state`、`roomcode`、`seat`、`isowner`、`players[]`、`roomtype`、`makewar`、`asetcount`、`deskwar`、`deskinfo`(重连快照)。详见 [04 → 房间响应公共字段](./04-数据结构.md#房间创建--进入响应公共字段)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:90);旧函数:[Send_self_join_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:251)、[self_join_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:259)。
#### 09. quick_enter_share_room
- 路由/通道:agent;方向:C→S;结果经其它 rpc 返回;状态:**N**;新 Rpc 常量:有。
- 用途:快速进入分享/星星场房间。
- 请求:`agentid`、`playerid`、`gameid`、`type`(房间类型)、`roomtype`(可选)。
- 响应/推送:走 self_join_room 进房流程(无独立 `Net.quick_enter_share_room` 接收函数,结果通过 self_join_room/show_message 等回包)。
- 注意:无 Net.quick_enter_share_room;关联 self_join_room/show_message,不能按同名请求响应配对。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:97);旧函数:[Send_quick_enter_share_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:651)。
#### 10. advanced_roomlist
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:拉取 VIP/高级房间列表。
- 请求:`agentid`、`playerid`、`gameid`。
- 响应/推送:房间列表对象,整包写入 `GameData.snrRoomList` 并渲染(07_Desk.js:1176)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:104);旧函数:[Send_advanced_roomlist](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:659)、[advanced_roomlist](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:664)。
#### 11. advanced_createroom
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:创建 VIP/高级房间。
- 请求:`agentid`、`gameid`、`playerid`、`tea`(茶水费)、`infinite`(0/1无限局)、`roomtype`、`videoConfig`(可选)、`rebateLimit`(可选)、`rebateType`(可选)。
- 响应/推送:`tea`、`rebateLimit` 及房间配置(整包写入 `GameData.snrRoomList`,并回拉 advanced_roomlist,07_Desk.js:1180)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:111);旧函数:[Send_advanced_createroom](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:668)、[advanced_createroom](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:673)。
#### 12. get_share_room
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:获取分享/星星场房间列表(仅非大厅环境发送)。
- 请求:`agentid`、`playerid`、`gameid`。
- 响应/推送:房间数组(`Desk.get_share_room` / `Game_Modify.getShareRoom` 处理)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:118);旧函数:[Send_get_share_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:640)、[get_share_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:647)。
#### 13. getInfoByShortCode
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:按短码批量查询房间信息(VIP 房列表)。
- 请求:`agentid`、`gameid`、`shortcodeList`(短码列表)。
- 响应/推送:`roomInfo`(短号房间信息) → `GameUI.setVipRoomListData`(07_Desk.js:1284)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:125);旧函数:[Send_getInfoByShortCode](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:753)、[getInfoByShortCode](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:757)。
#### 14. switchRoomList
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:开关房间在列表中的可见/可进入状态。
- 请求:`agentid`、`playerid`、`gameid`、`isClose`(0开/1关)。
- 响应/推送:`state`(0成功)、`isClose`;失败 `error`(07_Desk.js:1267)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:132);旧函数:[Send_switchRoomList](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:743)、[switchRoomList](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:747)。
### 大厅 · 战绩 / 排行 / 财富(5)
#### 15. get_player_grade1
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:拉取战绩(类型1)。
- 请求:`agentid`、`playerid`、`gameid`、`type`(可选)、`direction`(可选,翻页)、`gradeidx`(可选,分页索引)。
- 响应/推送:战绩数据(`gameCombat.get_player_grade1` 渲染)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:143);旧函数:[Send_get_player_grade1](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:359)、[get_player_grade1](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:364)。
#### 16. get_player_grade2
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:拉取战绩(类型2)。
- 请求:透传调用方 `_data`,构造点未集中定位;至少含 `agentid`/`playerid`/`gameid`。
- 响应/推送:战绩数据(`gameCombat.get_player_grade2` 渲染)。
- 注意:⚠️ 请求字段构造点未定位,待核对。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:150);旧函数:[Send_get_player_grade2](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:371)、[get_player_grade2](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:376)。
#### 17. get_treasurelist
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:财富榜。
- 请求:`agentid`、`gameid`。
- 响应/推送:`list`(排行数组) → `Desk.get_treasurelist`。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:157);旧函数:[Send_get_treasurelist](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:685)、[get_treasurelist](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:690)。
#### 18. getShortCodeRankList
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:短号场排行榜。
- 请求:`agentid`、`playerid`、`shortcode`。
- 响应/推送:成功为排行数据(整包写入 `GameData.vipRank.data`);失败 `error:true` + `message`(07_Desk.js:1311)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:164);旧函数:[Send_getShortCodeRankList](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:769)、[getShortCodeRankList](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:773)。
#### 19. getVipRankList
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:VIP 排行榜。
- 请求:`agentid`、`limit`(条数)。
- 响应/推送:`list`(VIP排行数组) → `GameData.rankList`(07_Desk.js:1328)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:171);旧函数:[Send_getVipRankList](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:787)、[getVipRankList](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:791)。
### 大厅 · 任务系统(5)
#### 20. get_player_task
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:获取任务列表。
- 请求:`agentid`、`playerid`、`gameid`。
- 响应/推送:`tasks`(任务数组) → `Desk.get_player_task`。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:182);旧函数:[Send_get_player_task](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:408)、[get_player_task](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:413)。
#### 21. player_finish_task
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:上报任务完成(如分享成功触发,06_Player.js:414)。
- 请求:`agentid`、`playerid`、`taskid`。
- 响应/推送:`state`(int)——`state==1` 且当前 `taskstate==0` 时把 `C_Player.taskstate` 置 1(06_Player.js:476)。
- 注意:原文档"响应含 `taskstate`"无源码依据,已删除——接收函数仅读 `_msg.data.state`。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:189);旧函数:[Send_player_finish_task](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:420)、[player_finish_task](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:424)。
#### 22. get_task_award
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:领取任务奖励。
- 请求:`agentid`、`playerid`、`gameid`、`taskid`。
- 响应/推送:`taskid`(对应任务 state 置 2=已领取)、`taskstate`(写入 `C_Player.taskstate`)(06_Player.js:482)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:196);旧函数:[Send_get_task_award](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:428)、[get_task_award](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:434)。
#### 23. refresh_task_state
- 路由/通道:agent;方向:C→S 意图;当前旧代码缺常量,不能认定可发送;状态:**N**;新 Rpc 常量:无。
- 用途:刷新任务可领取状态。
- 请求:透传 `_data`(构造点未集中定位,至少含 `agentid`/`playerid`)。
- 响应/推送:服务器推送 `can_award`(见下条)。
- 注意:本次核实:09_Net.js:440 用 RpcList.refresh_task_state,但 02_Const.js 无此定义;全模板搜索未找到赋值。未被外部注入时该值为 undefined,JSON.stringify 会省略 rpc。02 章“硬编码字符串”的记载与当前源码不符,待后续专项核对;本轮不修代码。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:203);旧函数:[Send_can_award](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:439)。
#### 24. can_award
- 路由/通道:agent;方向:S→C 推送;状态:**N**;新 Rpc 常量:有。
- 用途:服务器通知有任务可领取。
- 请求:无(纯推送)。
- 响应/推送:任务可领取标记(载荷字段待后端确认)。
- 注意:🐛 `06_Player.js` **未定义** `Player.prototype.can_award`(全文无此方法)。推送一旦到达,`C_Player.can_award` 为 undefined,调用即抛 TypeError。当前为 bug,不可当正常协议使用。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:210);旧函数:[Send_can_award](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:439)、[can_award](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:443)。
### 大厅 · 支付 / 充值 / 资产(4)
#### 25. get_paylist
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:拉取支付项列表。
- 请求:`agentid`。
- 响应/推送:`paylist`(支付项数组) → `GameData.payList`,并打开支付界面(09_Net.js:567)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:221);旧函数:[Send_get_paylist](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:561)、[get_paylist](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:566)。
#### 26. pay_succ
- 路由/通道:HTTP(保留 agent 信封);方向:C→HTTP;未见同名 Net 接收函数;状态:**X**;新 Rpc 常量:有。
- 用途:支付成功后通知服务器入账。
- 请求:`agentid`、`playerid`、`channelid`、`productid`、`payid`、`amount`、`money`、`paytype`(05_Func.js:2240-2254 构造)。
- 响应/推送:无显式 WS 回包;资产变化通过 `update_bean`/`update_roomcard` 推送(充房卡场景前端还会本地 `UpdateRoomcard`,05_Func.js:2263)。
- 注意:原工程支付流程使用 HTTP;存在 Send_pay_succ 定义,但调用点被注释。不得仅凭常量/发送函数判为活跃 WS 请求。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:228);旧函数:[Send_pay_succ](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:572)。
#### 27. topup_card
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:充值卡兑换。
- 请求:`agentid`、`playerid`、`cardno`(卡号)。
- 响应/推送:`Desk.topup_card` 为空实现(07_Desk.js:1365),资产变化经 update_bean/update_roomcard 推送。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:235);旧函数:[Send_topup_card](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:862)、[topup_card](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:866)。
#### 28. giveCoin
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:仓库面板向他人转账豆豆/金币。
- 请求:`agentid`、`playerid`(转出)、`toPlayerid`(转入目标ID)、`gameid`、`count`(数量)、`password`(仓库密码)(11_GameUI.js:2132-2139)。
- 响应/推送:`state`(0成功)、`star2`(转出后**仓库星星**数 → `setWareHouseStarCOunt`,**非豆豆**);失败 `showerror`/`error`(07_Desk.js:1381)。
- 注意:响应 `star2` 为仓库星星数,注意区别于豆豆余额。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:242);旧函数:[Send_giveCoin](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:875)、[giveCoin](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:878)。
### 大厅 · 仓库 / 星星 / 魅力(4)
#### 29. set_bankpwd
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:设置仓库密码。
- 请求:`agentid`、`playerid`、`unionid`、`password`。
- 响应/推送:`state`(0成功)、`password`;失败 `showerror`/`error`(07_Desk.js:1228)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:253);旧函数:[Send_set_bankpwd](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:696)、[set_bankpwd](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:700)。
#### 30. change_star
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:仓库存/取(豆豆 ↔ 仓库星星)。
- 请求:`agentid`、`playerid`、`mode`(0存入/1取出,源码 `safeInputType-1`)、`password`(仓库密码,字符串)、`count`(数量)(11_GameUI.js:2065-2069 调用点齐全携带此 5 字段)。
- 响应/推送:`state`(0成功)、`star1`(更新后豆豆余额 → `update_bean2`)、`star2`(更新后仓库星星数 → `setWareHouseStarCOunt`)、`msg`(可选提示)、`count`(可选,回填安全输入);失败 `showerror`/`error`(07_Desk.js:1238)。
- 注意:原审计疑虑"`mode`/`password` 未见"——经核对仓库存/取调用点(11_GameUI.js:2068-2069)**确含** `mode` 与 `password`,文档正确,疑虑解除。审计提到的"agentid/playerid/toPlayerid/gameid/count"实为相邻的 `giveCoin` 转账包(11_GameUI.js:2132-2139),并非本 rpc。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:260);旧函数:[Send_change_star](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:706)、[change_star](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:710)。
#### 31. update_charm
- 路由/通道:agent;方向:S→C 推送;状态:**N**;新 Rpc 常量:有。
- 用途:座位魅力值更新。
- 请求:`Net.Send_update_charm`(`09_Net.js:727`) 已定义但**无任何调用点**;实际只作服务器→客户端推送。
- 响应/推送:`seatlist`:[ {`seat`(int), `charm`(number)} ](07_Desk.js:1260 遍历 setCharm)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:267);旧函数:[Send_update_charm](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:726)、[update_charm](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:730)。
#### 32. setAllCharm
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:批量设置总魅力。
- 请求:`agentid`、`playerid`、`gameid`、`value`(11_GameUI.js:1269-1275)。
- 响应/推送:无显式业务字段,`Desk.setAllCharm` 仅本地存储并提示成功(07_Desk.js:1321)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:274);旧函数:[Send_setAllCharm](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:778)、[setAllCharm](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:782)。
### 大厅 · 邀请码 / 绑定(2)
#### 33. binding_invitecode
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:绑定邀请码。
- 请求:`agentid`、`playerid`、`invitecode`(11_GameUI.js:1367-1369)。
- 响应/推送:`state`(0成功时写入 `invitecode`)、`invitecode`、`error`(提示文案)(06_Player.js:251)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:285);旧函数:[Send_binding_invitecode](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:586)、[binding_invitecode](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:591)。
#### 34. get_player_invitecode
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:获取自己的邀请码(打开绑定界面)。
- 请求:`agentid`、`playerid`、`unionid`、`openid`(11_GameUI.js:1378-1382)。
- 响应/推送:`invitecode`(string) → `C_Player.setInvitecod` 并打开绑定界面(09_Net.js:607)。
- 注意:修正原文档——请求字段为 `agentid/playerid/unionid/openid`,**无 `gameid`**,新增 `unionid`/`openid`(11_GameUI.js:1378)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:292);旧函数:[Send_get_player_invitecode](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:602)、[get_player_invitecode](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:606)。
### 大厅 · VIP 管理 / 黑白名单(4)
#### 35. optBanList
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:黑名单查看/添加/移除(多入口)。
- 请求:随入口不同,公共字段 `agentid`、`playerid`、`type`:
- 响应/推送:`type`(1/3/4/5/6)、`banList`(黑名单数组)、`message`(可选提示)(07_Desk.js:1289)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:303);旧函数:[Send_optBanList](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:761)、[optBanList](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:765)。
#### 36. getPlayerWhiteList
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:获取白名单。
- 请求:`agentid`、`playerid`、`gameid`。
- 响应/推送:`whiteList`(数组) → `GameData.whiteList.data`(07_Desk.js:1412)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:316);旧函数:[Send_getPlayerWhiteList](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:881)、[getPlayerWhiteList](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:885)。
#### 37. optWhiteList
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:白名单添加/修改/删除。
- 请求:`agentid`、`playerid`、`gameid`、`shortcode`、`mode`、`userid`(目标ID):
- 响应/推送:`whiteList`(更新后数组)、`mode`(可选)、`message`(可选提示)(07_Desk.js:1398)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:323);旧函数:[Send_optWhiteList](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:889)、[optWhiteList](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:893)。
#### 38. setVipForbidSelect
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:VIP 房禁止玩家选桌开关。
- 请求:`agentid`、`playerid`、`gameid`、`forbidSelect`(1开/0关,11_GameUI.js:2631-2639)。
- 响应/推送:`state`(0成功)、`forbidSelect`(1开/0关);失败 `error`(07_Desk.js:1348)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:332);旧函数:[Send_setVipForbidSelect](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:854)、[setVipForbidSelect](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:858)。
### 大厅 · 其它 agent 协议(8)
#### 39. submit_opinion
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:提交反馈/意见。
- 请求:`agentid`、`playerid`、`gameid`、`content`。
- 响应/推送:`state`(0成功)(07_Desk.js:1100)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:343);旧函数:[Send_submit_opinion](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:546)、[submit_opinion](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:550)。
#### 40. submit_location
- 路由/通道:agent;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:提交定位信息(仅非大厅环境发送)。
- 请求:`agentid`、`playerid`、`info`(定位对象)。
- 响应/推送:经 `Game.submit_location` 处理(09_Net.js:583)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:350);旧函数:[Send_submit_location](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:576)、[submit_location](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:582)。
#### 41. submit_phoneinfo
- 路由/通道:agent;方向:C→S 请求(无响应处理);状态:**N**;新 Rpc 常量:有。
- 用途:提交手机/通讯录信息(仅非大厅环境发送)。
- 请求:`agentid`、`playerid`、`info`{ `phoneInfo`(手机信息), `addrBook`(通讯录) }。
- 响应/推送:`Net.submit_phoneinfo` 接收函数为空实现(09_Net.js:722)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:357);旧函数:[Send_submit_phoneinfo](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:716)、[submit_phoneinfo](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:721)。
#### 42. submit_error
- 路由/通道:agent;方向:C→S;同名回包被旧接收器忽略;状态:**N**;新 Rpc 常量:无。
- 用途:异常/日志上报(Net.submit_error 与 Net.submit_log 共用同一个实际 rpc)。
- 请求:`packet`(出错数据包字符串)、`msg`(错误/堆栈信息)、`playerid`、`agentid`、`gameid`(09_Net.js:66-72)。
- 响应/推送:服务器若回 rpc `"submit_error"`,前端在分发处直接 `return` 忽略(12_Logic.js:235)。
- 注意:submit_log 是本地函数别名,不是第二个线上 rpc;不能重复计数。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:364);旧函数:[submit_error](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:55)、[submit_log](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:81)。
#### 43. kick_server
- 路由/通道:agent;方向:C→S 请求 + S→C 推送;状态:**R**;新 Rpc 常量:有。
- 用途:管理端踢出玩家 / 被踢下线弹窗。
- 请求:`agentid` 等(构造点未集中定位)。
- 响应/推送:`msg`(踢出提示) → `GameUI.OpenKick`(07_Desk.js:1108)。
- 注意:⚠️ 请求字段待补。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:371);旧函数:[Send_kick_server](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:554)、[kick_server](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:557)。
#### 44. broadcast
- 路由/通道:agent;方向:C→S 请求 + S→C 推送;状态:**N**;新 Rpc 常量:有。
- 用途:广播消息/滚动公告(主要为服务器推送)。
- 请求:`agentid` 等(`Send_broadcast` 存在,09_Net.js:530)。
- 响应/推送:`msgtype`(0消息框/1滚动公告,可选,缺省 0)、`msgcontent`(内容)(07_Desk.js:1112)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:378);旧函数:[Send_broadcast](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:529)、[broadcast](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:533)。
#### 45. connect_agentserver
- 路由/通道:agent;方向:双向(切服);状态:**R**;新 Rpc 常量:有。
- 用途:切换到大厅服务器。
- 请求:`Send_connect_agentserver`(`09_Net.js:515`) 透传 `_data`(切服时使用)。
- 响应/推送:`agentserver`(新大厅服地址)、`opt`(切换原因,如 `other_break_room`/`free_room`)(09_Net.js:518)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:385);旧函数:[Send_connect_agentserver](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:514)、[connect_agentserver](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:517)。
#### 46. playerBehavior
- 路由/通道:HTTP GET(历史 agent 名称);方向:C→HTTP;状态:**X**;新 Rpc 常量:有。
- 用途:玩家行为埋点。
- 请求:原 WS 路径(agentid/gameid/playerid/tag)**被注释**(09_Net.js:799-806),实际改走独立 HTTP GET 上报 `http://test3.1888day.com/api/gamedo/gamedo?agentid=&gameid=&playerid=&tag=`(09_Net.js:807-815)。
- 响应/推送:HTTP 回调 `playerBehavior_Succ`/`_Fail`(09_Net.js:818/822);WS 接收函数 `Net.playerBehavior`(`09_Net.js:826`) 当前无触发。
- 注意:当前调用走独立 HTTP 埋点地址,WS 段被注释;不归入本地 WebSocket 验收。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:392);旧函数:[Send_playerBehavior](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:796)、[playerBehavior](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:825)。
### 房间 · 房间生命周期(8)
#### 47. self_break_room
- 路由/通道:room;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:房主在**未开局**前主动解散房间。
- 请求:仅通用四字段。
- 响应/推送:`roomcode`(可选,用于从本地"我的房间"列表移除)。处理:清空牌桌、回大厅。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:19);旧函数:[Send_self_break_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:266)、[self_break_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:271)。
#### 48. other_break_room
- 路由/通道:room;方向:S→C 推送;状态:**N**;新 Rpc 常量:有。
- 用途:他人(房主)解散房间,推送给房内其余玩家。
- 请求:无(纯推送)。
- 响应/推送:无业务字段;触发 `Func.exitRoom()`、清桌、回大厅、提示"房主已解散房间!"。
- 注意:常伴随 **connect_agentserver** 切服包(`data.opt == other_break_room`,见下文)。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:26);旧函数:[other_break_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:277)。
#### 49. self_exit_room
- 路由/通道:room;方向:C→S 请求 + S→C 响应;状态:**R**;新 Rpc 常量:有。
- 用途:自己在**未开局**前退出房间。
- 请求:仅通用四字段(发送处见 `08_Utl_Output.js:993`)。
- 响应/推送:`isowner`(可选,==1 且非无限局时把房间加回本地列表), `seat`(可选,传给 `Game_Modify.myExitRoom`), `roomcode`(可选)。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:33);旧函数:[Send_self_exit_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:289)、[self_exit_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:294)。
#### 50. other_exit_room
- 路由/通道:room;方向:S→C 推送;状态:**R**;新 Rpc 常量:有。
- 用途:其他玩家(未开局)退出房间。
- 请求:无(纯推送)。
- 响应/推送:`seat`(离开者座位)。处理:清该座位、`playercnt--`;若 `seat==0` 且非无限局,提示房主已离开。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:40);旧函数:[other_exit_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:301)。
#### 51. player_prepare
- 路由/通道:room;方向:C→S 请求 + S→C 推送;状态:**R**;新 Rpc 常量:有。
- 用途:玩家点击准备(`needprepare==1` 的房间)。
- 请求:仅通用四字段。
- 响应/推送:`seat`(准备者座位), `deskwar`(可选;为真表示满足开战条件 → `HideStartScene` + `Game_Modify.StartWar`)。推送给房内所有人。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:47);旧函数:[Send_player_prepare](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:628)、[player_prepare](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:631)。
#### 52. change_room
- 路由/通道:room;方向:C→S;响应 rpc=change_seat;状态:**N**;新 Rpc 常量:有。
- 用途:玩家请求换座 / 换桌。
- 请求:仅通用四字段(**不带目标座位**,由服务器决定换到哪个空位)。发送处 `11_GameUI.js:1945`、`08_Utl_Output.js:1006`。
- 响应/推送:rpc 名改为 **`change_seat`**,`data`:`seat1`, `seat2`(两个互换的座位号)。处理:交换两座 Desk 信息,若自己在其中则 `C_Player.SetSeat` 更新。
- 注意:上行 rpc=`change_room`,下行 rpc=`change_seat`,二者成对。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:54);旧函数:[Send_change_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:677)。
#### 53. share_room
- 路由/通道:room;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:把房间分享到世界房列表。
- 请求:通用四字段;可选 `roomlist`、`roomtype`、`shareType`(高级房分享时携带,见 `11_GameUI.js:1734`/`11_GameUI.js:1891`)。
- 响应/推送:无业务字段;提示"已成功分享至平台!"。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:61);旧函数:[Send_share_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:634)、[share_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:637)。
#### 54. change_seat
- 路由/通道:room;方向:S→C(change_room 的响应);状态:**N**;新 Rpc 常量:有。
- 用途:服务器指定两座互换。
- 请求:无同名上行;上行是 change_room。
- 响应/推送:seat1、seat2。
- 注意:独立列名,不能把 change_room 与 change_seat 合成一条而漏计。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:54);旧函数:[change_seat](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:681)。
### 房间 · 进房推送(他人视角)(3)
#### 55. other_join_room
- 路由/通道:room;方向:S→C 推送;状态:**R**;新 Rpc 常量:有。
- 用途:其他玩家加入当前房间。
- 请求:无(纯推送;自己进房用 `self_join_room`,走 agent 路由,见 02 章)。
- 响应/推送:`seat`(新玩家座位) + 该玩家完整对象(直接传给 `Player.SetDeskInfo`,见 [04 · Player 座位对象](./04-数据结构.md#player-座位对象)):
- 注意:⚠️ `charm`/`sign` 是否每次必含、其余字段是否完整以 `Player.SetDeskInfo` 实际读取为准,详见 [04 章](./04-数据结构.md#player-座位对象)。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:72);旧函数:[other_join_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:281)。
#### 56. other_offline
- 路由/通道:room;方向:S→C 推送;状态:**R**;新 Rpc 常量:有。
- 用途:其他玩家离线。
- 请求:无(纯推送)。
- 响应/推送:`seat`。处理:该座 `onstate=1`,刷新 UI。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:80);旧函数:[other_offline](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:389)。
#### 57. other_online
- 路由/通道:room;方向:S→C 推送;状态:**R**;新 Rpc 常量:有。
- 用途:其他玩家重新上线。
- 请求:无(纯推送)。
- 响应/推送:`seat`, `ip`。处理:该座 `onstate=0`、更新 ip。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:87);旧函数:[other_online](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:394)。
### 房间 · 解散投票(开局后)(8)
#### 58. self_apply_free_room
- 路由/通道:room;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:自己申请解散房间。
- 请求:仅通用四字段。
- 响应/推送:`agreefree` { `state`:[各座同意状态数组], `countdown`:倒计时 }。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:101);旧函数:[Send_self_apply_free_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:308)、[self_apply_free_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:313)。
#### 59. other_apply_free_room
- 路由/通道:room;方向:S→C 推送;状态:**N**;新 Rpc 常量:有。
- 用途:他人申请解散。
- 请求:无(纯推送)。
- 响应/推送:`seat`(申请者), `agreefree` { `state`[], `countdown` }。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:108);旧函数:[other_apply_free_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:319)。
#### 60. self_agree_free_room
- 路由/通道:room;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:自己同意解散。
- 请求:仅通用四字段。
- 响应/推送:无业务字段;本地把自己加入同意列表、刷新投票 UI。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:115);旧函数:[Send_self_agree_free_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:323)、[self_agree_free_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:328)。
#### 61. other_agree_free_room
- 路由/通道:room;方向:S→C 推送;状态:**N**;新 Rpc 常量:有。
- 用途:他人同意解散。
- 请求:无(纯推送)。
- 响应/推送:`seat`(同意者)。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:122);旧函数:[other_agree_free_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:333)。
#### 62. self_refuse_free_room
- 路由/通道:room;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:自己拒绝解散。
- 请求:仅通用四字段。
- 响应/推送:无业务字段;清空同意列表、投票结果置不通过、弹"已拒绝"结果。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:129);旧函数:[Send_self_refuse_free_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:338)、[self_refuse_free_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:343)。
#### 63. other_refuse_free_room
- 路由/通道:room;方向:S→C 推送;状态:**N**;新 Rpc 常量:有。
- 用途:他人拒绝解散(任一人拒绝即否决本轮)。
- 请求:无(纯推送)。
- 响应/推送:`seat`(拒绝者)。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:136);旧函数:[other_refuse_free_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:348)。
#### 64. free_room
- 路由/通道:room;方向:S→C 推送;状态:**N**;新 Rpc 常量:有。
- 用途:解散投票最终结果。
- 请求:无(纯推送)。
- 响应/推送:freeNow;deskfree、roomcard、tips、time、seats 按具体分支读取,字段语义见 03 章。
- 注意:可伴随 **connect_agentserver** 切服包(`data.opt == free_room`,见下文)。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:143);旧函数:[free_room](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:353)。
#### 65. beanroom_surrender
- 路由/通道:room;方向:C→S 请求 + S→C 响应;状态:**N**;新 Rpc 常量:有。
- 用途:豆豆房(金币房)投降。
- 请求:通用四字段 + `count`(投降数量 = `GameData.surrendCount`,发送处 `11_GameUI.js:1245`)。
- 响应/推送:`state`(0=成功 → `Game_Modify.onSurrender(_msg)`); 失败时 `showerror`(==1 则弹) / `error`(错误文本)。
- 注意:⚠️ 未见成对的 `other_xxx` 推送,是否向房内其他玩家广播他人投降待后端确认。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:160);旧函数:[Send_beanroom_surrender](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:612)、[beanroom_surrender](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:616)。
### 房间 · 开局(2)
#### 66. self_makewar
- 路由/通道:room;方向:C→S 请求 → S→C 响应(self_makewar);状态:**N**;新 Rpc 常量:有。
- 用途:房主主动开局。
- 请求:仅通用四字段。
- 响应/推送:rpc=`self_makewar`,无业务字段;触发 `Desk.self_makewar` → `Game_Modify.StartWar(_msg)`。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:171);旧函数:[Send_self_makewar](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:469)、[self_makewar](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:474)。
#### 67. other_makewar
- 路由/通道:room;方向:S→C 推送;状态:**N**;新 Rpc 常量:有。
- 用途:开局广播(房主开局或满员自动开局)给房内其他玩家。
- 请求:无(纯推送)。
- 响应/推送:开局信息对象 → `Desk.makewar` → `Game_Modify.StartWar(msg)`。
- 注意:实际发牌等对局数据在此之后通过**子游戏内协议**下发(见 05 章)。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:178);旧函数:[other_makewar](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:479)。
### 房间 · 房间内社交(6)
#### 68. send_text
- 路由/通道:room;方向:C→S 请求 + S→C 推送 · 文字聊天;状态:**N**;新 Rpc 常量:有。
- 用途:文字聊天 / 全服公告 / 预定义常用语。
- 请求:通用四字段 + `text`(内容;点常用语时为 `Game_Config.Info.TextContent[spid-206]` 文本) + `type`(0=普通 / 1=全服公告;按是否勾选公告设 0/1) + `info`(可选;**有 info 时 `type` 改为 2**)。发送处 `11_GameUI.js:1170`(输入框)、`11_GameUI.js:2717`(常用语)。
- 响应/推送:`type`(0=普通 / 1=全服公告 / 2=机器人 / 3=预定义文字), `text`(内容;**type==3 时为 `Game_Config.Info.TextContent` 的 1 基索引**,客户端按 `(idx-1)%len` 取文本), `seat`(发送者座位,type≠1 时使用), `info`(type==2 时附加)。
- 注意:百人场(`vipInfinite`)只处理 type==1 公告分支。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:189);旧函数:[Send_send_text](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:399)、[send_text](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:403)。
#### 69. send_voice
- 路由/通道:room;方向:C→S 请求 + S→C 推送 · 语音;状态:**N**;新 Rpc 常量:有。
- 用途:发送语音消息。
- 请求:通用四字段 + `voiceurl`(已上传音频地址) + `time`(时长) + `info`(可选) + `type`(可选,有 info 时为 2)。发送处 `05_Func.js:1714`、`05_Func.js:2984`。
- 响应/推送:`type`(0=普通 / 2=机器人), `seat`(发送座位), `voiceurl`, `time`, `info`(type==2 时)。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:203);旧函数:[Send_send_voice](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:491)、[send_voice](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:494)。
#### 70. send_gift
- 路由/通道:room;方向:C→S 请求 + S→C 推送 · 互动/送礼;状态:**N**;新 Rpc 常量:有。
- 用途:向指定座位送互动礼物。
- 请求:通用四字段 + `giftid`(=`spid_up - 255`,按钮精灵号算出,发送处 `11_GameUI.js:2725`) + `receiveseat`(=`GameData.InteractPlayer`) + `info`(可选) + `type`(有 info 时为 2)。
- 响应/推送:`type`(0=普通 / 2=机器人), `giftid`(客户端做 `(giftid-1)%4+1` 归一为 1~4 动画), `sendseat`(发送座位), `receiveseat`(接收座位), `info`(type==2 时)。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:218);旧函数:[Send_send_gift](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:483)、[send_gift](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:486)。
#### 71. send_phiz
- 路由/通道:room;方向:C→S 请求 + S→C 推送 · 表情;状态:**N**;新 Rpc 常量:有。
- 用途:发送表情动画。
- 请求:通用四字段 + `text`(=`up_id`,表情按钮序号 1~`ConstVal.Emotion.count`,发送处 `11_GameUI.js:815`) + `info`(可选) + `type`(有 info 时为 2)。
- 响应/推送:`type`(0=普通 / 2=机器人), `text`(表情 ID,客户端按 `(text-1)%ConstVal.Emotion.src_list.length+1` 归一), `seat`(发送座位), `info`(type==2 时)。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:232);旧函数:[Send_send_phiz](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:538)、[send_phiz](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:542)。
#### 72. call_phone
- 路由/通道:room;方向:C→S 请求 + S→C 推送 · 拨打电话;状态:**N**;新 Rpc 常量:有。
- 用途:拨打/接听电话,置玩家 `onstate=2`(通话中)。
- 请求:仅通用四字段(发送处 `06_Player.js:380` / `:388` / `:396`,对应接起/电话进来/去电三种触发)。
- 响应/推送:rpc=`call_phone`,`seat`(拨打者座位 → 该玩家 `onstate=2`)。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:239);旧函数:[Send_call_phone](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:451)、[call_phone](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:455)。
#### 73. hangup_phone
- 路由/通道:room;方向:C→S 请求 + S→C 推送 · 挂断电话;状态:**N**;新 Rpc 常量:有。
- 用途:挂断电话,置玩家 `onstate=0`。
- 请求:仅通用四字段(发送处 `06_Player.js:372`)。
- 响应/推送:rpc=`hangup_phone`,`seat`(挂断者座位 → 该玩家 `onstate=0`)。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:253);旧函数:[Send_hangup_phone](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:460)、[hangup_phone](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:464)。
### 保留名称 · 房间社交(5)
#### 74. receive_chat
- 路由/通道:room(文档归类,线上未确认);方向:未确认(文档推测为下行);状态:**X**;新 Rpc 常量:有。
- 用途:聊天推送的另一可能 rpc 名(与 `send_text` 成对)。
- 请求:未发现同名发送链。
- 响应/推送:未定义,不能套用其它 rpc 字段。
- 注意:常量存在,旧 Net 无同名接收器。与实际已实现的 send_voice/send_text/call_phone/hangup_phone/send_gift 区分;不据此断言服务器绝不会发送。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:196);旧函数:无同名 Net 定义(保留/桥接按所引章节核对)。
#### 75. play_voice
- 路由/通道:room(文档归类,线上未确认);方向:未确认(文档推测为下行);状态:**X**;新 Rpc 常量:有。
- 用途:与 `send_voice` 成对,疑为语音**播放**推送。
- 请求:未发现同名发送链。
- 响应/推送:未定义,不能套用其它 rpc 字段。
- 注意:常量存在,旧 Net 无同名接收器。与实际已实现的 send_voice/send_text/call_phone/hangup_phone/send_gift 区分;不据此断言服务器绝不会发送。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:211);旧函数:无同名 Net 定义(保留/桥接按所引章节核对)。
#### 76. other_send_gift
- 路由/通道:room(文档归类,线上未确认);方向:未确认(文档推测为下行);状态:**X**;新 Rpc 常量:有。
- 用途:与 `send_gift` 成对,疑为他人送礼推送。
- 请求:未发现同名发送链。
- 响应/推送:未定义,不能套用其它 rpc 字段。
- 注意:常量存在,旧 Net 无同名接收器。与实际已实现的 send_voice/send_text/call_phone/hangup_phone/send_gift 区分;不据此断言服务器绝不会发送。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:225);旧函数:无同名 Net 定义(保留/桥接按所引章节核对)。
#### 77. other_callphone
- 路由/通道:room(文档归类,线上未确认);方向:未确认(文档推测为下行);状态:**X**;新 Rpc 常量:有。
- 用途:与 `call_phone` 成对,疑为他人拨打电话推送。
- 请求:未发现同名发送链。
- 响应/推送:未定义,不能套用其它 rpc 字段。
- 注意:常量存在,旧 Net 无同名接收器。与实际已实现的 send_voice/send_text/call_phone/hangup_phone/send_gift 区分;不据此断言服务器绝不会发送。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:246);旧函数:无同名 Net 定义(保留/桥接按所引章节核对)。
#### 78. other_hangup
- 路由/通道:room(文档归类,线上未确认);方向:未确认(文档推测为下行);状态:**X**;新 Rpc 常量:有。
- 用途:与 `hangup_phone` 成对,疑为他人挂断电话推送。
- 请求:未发现同名发送链。
- 响应/推送:未定义,不能套用其它 rpc 字段。
- 注意:常量存在,旧 Net 无同名接收器。与实际已实现的 send_voice/send_text/call_phone/hangup_phone/send_gift 区分;不据此断言服务器绝不会发送。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:260);旧函数:无同名 Net 定义(保留/桥接按所引章节核对)。
### 大厅 · 资产更新与系统推送(4)
#### 79. update_bean
- 路由/通道:上行 agent;下行按 agent 归档(实际推送路由待逐项抓包);方向:C→S + S→C;状态:**N**;新 Rpc 常量:有。
- 用途:豆豆变化(本人或房内座位)
- 请求:原生 yPaytype / WVJB yPaytype 回调直接发送 agentid、playerid、change:num、type:9;这是资产写入路径,不属于只读查询。
- 响应/推送:bean、change/seat/type(按场景可选)、text;不同分支见原处理器。
- 注意:02 章“无对应主动请求”与当前 05_Func.js 不符。存在发送代码不代表支付来源可信性、服务端行为或新框架已经验收。
- 直接上行来源:[原生 yPaytype](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/05_Func.js:2191)、[WVJB yPaytype](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/05_Func.js:3053)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:406);旧函数:[update_bean](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:597)。
#### 80. update_roomcard
- 路由/通道:上行 agent;下行按 agent 归档(实际推送路由待逐项抓包);方向:C→S + S→C;状态:**N**;新 Rpc 常量:有。
- 用途:房卡变化
- 请求:原生 yPaytype / WVJB yPaytype 回调直接发送 agentid、playerid、change:num、type:9;这是资产写入路径,不属于只读查询。
- 响应/推送:roomcard、text(可选);change 分支条件见原处理器。
- 注意:02 章“无对应主动请求”与当前 05_Func.js 不符。存在发送代码不代表支付来源可信性、服务端行为或新框架已经验收。
- 直接上行来源:[原生 yPaytype](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/05_Func.js:2188)、[WVJB yPaytype](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/05_Func.js:3050)。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:405);旧函数:[update_roomcard](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:382)。
#### 81. kick_offline
- 路由/通道:agent(协议归档;实际推送路由待逐项抓包);方向:S→C;状态:**N**;新 Rpc 常量:有。
- 用途:被踢下线
- 请求:无对应主动请求。
- 响应/推送:fromOther、gameid(可选);旧流程同时上报 submit_error。
- 注意:仅有旧处理器不能证明新 Runtime 接入或真实服务已覆盖。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:408);旧函数:[kick_offline](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:447)。
#### 82. show_message
- 路由/通道:agent(协议归档;实际推送路由待逐项抓包);方向:S→C;状态:**N**;新 Rpc 常量:无。
- 用途:通用提示
- 请求:无对应主动请求。
- 响应/推送:msg、time。
- 注意:仅有旧处理器不能证明新 Runtime 接入或真实服务已覆盖。
- 依据:[02-协议-agent路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/02-协议-agent路由.md:409);旧函数:[show_message](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:655)。
### 房间 · 服务器切换(room 侧)(1)
#### 83. connect_roomserver
- 路由/通道:room;方向:C→S 请求 + S→C 推送 · 切到房间服;状态:**R**;新 Rpc 常量:有。
- 用途:从大厅服切换到房间服务器。
- 请求:由 `Send_connect_roomserver` 发起(走 room 路由)。
- 响应/推送:`data.roomserver`(新房间服地址)。处理:置 `GameData.ConnectType=true`、`GameData.ConnectRpc=connect_roomserver`、`GameData.Server=data.roomserver`,关闭当前连接并用新地址重连。
- 依据:[03-协议-room路由.md](G:/Works/YouleGamesCocosCreator/docs/protocol/03-协议-room路由.md:295);旧函数:[Send_connect_roomserver](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:499)、[connect_roomserver](G:/Works/YouleGamesCocosCreator/projects/Game_Surface_3/js/00_Surface/09_Net.js:502)。
### 子游戏 · 框架保留名称(2)
#### 84. over_game
- 路由/通道:由具体子游戏契约确定;方向:文档描述 S→C;实际由子游戏确认;状态:**X**;新 Rpc 常量:有。
- 用途:结算广播保留名;具体载荷由子游戏定义。
- 请求:模板未定义。
- 响应/推送:模板未定义。
- 注意:Game_Surface_3 的 Game_Modify 为模板,不能据名字推导具体子游戏协议。
- 依据:[05-游戏内协议与桥接.md](G:/Works/YouleGamesCocosCreator/docs/protocol/05-游戏内协议与桥接.md:144);旧函数:无同名 Net 定义(保留/桥接按所引章节核对)。
#### 85. agentserver_game
- 路由/通道:由具体子游戏契约确定;方向:未定义;状态:**X**;新 Rpc 常量:有。
- 用途:对局数据经大厅服中转的保留名。
- 请求:模板未定义。
- 响应/推送:模板未定义。
- 注意:Game_Surface_3 的 Game_Modify 为模板,不能据名字推导具体子游戏协议。
- 依据:[05-游戏内协议与桥接.md](G:/Works/YouleGamesCocosCreator/docs/protocol/05-游戏内协议与桥接.md:145);旧函数:无同名 Net 定义(保留/桥接按所引章节核对)。
### 外部桥接 · 非网络 RPC(1)
#### 86. joinRoom
- 路由/通道:H5/小程序本地桥接;方向:外部入口→前端确认流程;状态:**X**;新 Rpc 常量:有。
- 用途:唤起进房确认;不是直接向服务器发送 joinRoom。
- 请求:{rpc:"joinRoom",data:{roomcode}};H5 来自 URL gameData,小程序来自缓存 openminigamedata。
- 响应/推送:确认后走 self_join_room;不产生 joinRoom 网络回包。
- 注意:h5RpcList 唯一名称;旧小程序 checkType=8 与白名单删除撞号,不能沿用。WVJB handler 名不计为服务器 RPC。
- 依据:[05-游戏内协议与桥接.md](G:/Works/YouleGamesCocosCreator/docs/protocol/05-游戏内协议与桥接.md:229);旧函数:无同名 Net 定义(保留/桥接按所引章节核对)。
## 覆盖核对方法
- 逐一取 02_Const.js 的 RpcList 字符串赋值去重;核对 09_Net.js 中 RpcList 引用、Net 命名函数以及硬编码 rpc;扫描全模板的直接 _SendData 调用与 rpc 赋值(包含 05_Func.js 支付桥接),补入 h5RpcList。
- 与 02/03 章标题、02 章末尾推送表以及 05 章保留/桥接名称取并集;按实际名称一条一项,跨章节引用不重复计数。
- 结果:82 个旧常量名称全部命中;补充 4 个名称后 86 条,无遗漏或重复;11 个现代严格分发名称全部命中。
- 新框架状态依据 platform/runtime.ts、protocol/platform-handlers.ts、protocol/first-slice-routes.ts;旧 protocol/routes.ts 大常量表仅用于“名称存在”对照。
- 本轮没有发送网络请求、触发 Cocos 编辑器操作或运行资源生成器;这份静态索引不新增真实验收结论。