diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index f1f40cb..1b8a66b 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -4,21 +4,21 @@ "type": "split", "children": [ { - "id": "f8022c29023d2af6", + "id": "1890c7ad64a39d65", "type": "tabs", "children": [ { - "id": "efa82152d99167ff", + "id": "3e6f0931816b44e6", "type": "leaf", "state": { "type": "markdown", "state": { - "file": "2Areas/健康/运动-拉伸/八段锦/八段锦.md", + "file": "3Projects/Unity/loxodon/loxodon-framework Public.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "八段锦" + "title": "loxodon-framework Public" } } ] @@ -214,92 +214,53 @@ "copilot:Open Copilot Chat": false } }, - "floating": { - "id": "8ad6c7a89369c9f6", - "type": "floating", - "children": [ - { - "id": "ea5faaa0d41b6909", - "type": "window", - "children": [ - { - "id": "5ac5102bf53c6860", - "type": "tabs", - "children": [ - { - "id": "fd65654aeee0713f", - "type": "leaf", - "state": { - "type": "empty", - "state": {}, - "icon": "lucide-file", - "title": "新标签页" - } - } - ] - } - ], - "direction": "vertical", - "x": 2595, - "y": 19, - "width": 1024, - "height": 800, - "maximize": false, - "zoom": 0 - } - ] - }, - "active": "efa82152d99167ff", + "active": "3e6f0931816b44e6", "lastOpenFiles": [ - "2Areas/习惯养成/规范日常行为.md", + "InBox/loxodon-framework.md", + "3Projects/Unity/loxodon/loxodon-framework Public.md", + "3Projects/Unity/loxodon", + "3Projects/Unity", + "3Projects", + "1Project/宠物宇宙/版本需求.md", + "InBox/网络同步.md", + "InBox/obsidian右键扩展.md", + "InBox/接口与抽象类区别.md", + "InBox/【Unity插件 - 图标轮廓渲染插件 SDF Image - Quality UI Outlines and Shadow-哔哩哔哩】.md", + "InBox/资源/资源导入.md", + "InBox/编辑器/时间轴编辑器/Timeline TODO.canvas", + "InBox/编辑器/图片/Pasted image 20221025121100.png", + "1Project/宠物宇宙/地图编辑器/需要做的优化.md", + "1Project/宠物宇宙/地图编辑器/需要支持的地图功能.md", + "1Project/开发文章/将开发文章阅读并分类.md", + "InBox/GAS", + "1Project/宠物宇宙/bug.md", + "1Project/宠物宇宙/硬件交互/业务插件(RTwoGameBusiness)TCP接口设计说明.md", + "1Project/宠物宇宙/硬件交互/用户卡及游戏信息处理过程设计文档.md", + "1Project/宠物宇宙/未命名 1", + "1Project/宠物宇宙/硬件交互", + "渲染/软渲染/图片/业务插件(RTwoGameBusiness)TCP接口设计说明.md", + "InBox/网络/封装可扩展网络请求框架.md", + "InBox/网络", + "2Areas/提升效率/未命名.md", + "2Areas/提升效率", + "渲染/软渲染/图片/img_v3_02n6_ff40a1a4-d813-45f7-b132-6f14a74cfd7g.jpg", + "渲染/软渲染/图片", + "InBox/自动化生成文档/uml.md", + "InBox/自动化生成文档/docfx.md", + "InBox/自动化生成文档", + "InBox/战斗/输入框架/游戏输入框架的设计(基于Unity).md", + "2Areas/健康/运动-拉伸/八段锦/八段锦.md", + "2Areas/如何记录笔记/如何开启一个项目.md", "2Areas/如何记录笔记/笔记如何组织.md", "2Areas/如何记录笔记/段落标记.md", - "2Areas/如何记录笔记/如何结束一个项目.md", - "2Areas/如何记录笔记/如何开启一个项目.md", "2Areas/如何记录笔记/抓捕生活中的灵感.md", - "2Areas/健康/运动-拉伸/八段锦/八段锦.md", - "2Areas/习惯养成", - "2Areas/如何记录笔记", - "InBox/编辑器/时间轴编辑器/Timeline TODO.canvas", - "1Project/开发文章/将开发文章阅读并分类.md", - "4Archives/宠物宇宙/用户卡及游戏信息处理过程设计文档.md", - "2Areas/健康/运动-拉伸/八段锦", - "4Archives/All in hole/查看UIGame代码.md", - "4Archives/All in hole/还原材质球.md", - "4Archives/All in hole/玩法.md", - "1Project/宠物宇宙/bug.md", - "4Archives/All in hole/编辑器.md", - "渲染/软渲染/图片/Pasted image 20250609171235.png", - "InBox/AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第五个用法|成为插件助手/Dataview 插件/测试用文档/项目复盘会议.md", - "InBox/AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第五个用法|成为插件助手/Dataview 插件/测试用文档/项目A计划.md", - "InBox/AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第五个用法|成为插件助手/Dataview 插件/测试用文档/财务季度报告.md", - "InBox/AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第五个用法|成为插件助手/Dataview 插件/测试用文档/简易待办事项.md", - "InBox/AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第五个用法|成为插件助手/Dataview 插件/测试用文档/用户反馈分析.md", - "InBox/AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第五个用法|成为插件助手/Dataview 插件/测试用文档/每周例会记录.md", - "InBox/AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第五个用法|成为插件助手/Dataview 插件/测试用文档/技术架构设计.md", - "InBox/AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第五个用法|成为插件助手/Dataview 插件/测试用文档/市场调研报告.md", - "InBox/AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第五个用法|成为插件助手/Dataview 插件/测试用文档/产品功能需求.md", - "InBox/AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第五个用法|成为插件助手/Dataview 插件/测试用文档/团队建设活动.md", - "InBox/AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第五个用法|成为插件助手/Dataview 插件/测试用文档/Bug修复计划.md", - "InBox/AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第一个用法|查漏补缺/如何搞钱/小白金融知识/20_理财书籍推荐与学习资源:持续学习,不断进步.md", - "InBox/AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第五个用法|成为插件助手/Dataview 插件/测试用文档", - "InBox/AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第四个用法|成为对弈的棋手/正方观点/观点9.md.edtz", - "InBox/AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第四个用法|成为对弈的棋手/正方观点/观点8.md.edtz", - "InBox/AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第四个用法|成为对弈的棋手/正方观点/观点7.md.edtz", - "InBox/AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第四个用法|成为对弈的棋手/正方观点/观点6.md.edtz", - "InBox/AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第四个用法|成为对弈的棋手/正方观点/观点5.md.edtz", - "InBox/AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第四个用法|成为对弈的棋手/正方观点/观点4.md.edtz", - "InBox/渲染/软渲染/图片/Pasted image 20230613102109.png", - "InBox/渲染/GPU/Pasted image 20230413163234.png", - "InBox/编辑器/图片/Pasted image 20221025121100.png", - "InBox/Mesh/图片/Pasted image 20221021171104.png", - "InBox/战斗/动作时间轴 随想.canvas", - "编辑器/图片/Pasted image 20221025121100.png", - "编辑器/时间轴编辑器/Timeline TODO.canvas", - "渲染/软渲染/图片/Pasted image 20230613102109.png", - "渲染/GPU/Pasted image 20230413163234.png", - "Mesh/图片/Pasted image 20221021171104.png", + "2Areas/如何记录笔记/如何结束一个项目.md", "InBox/TODO.canvas", + "渲染/软渲染/图片/Pasted image 20250609171235.png", + "InBox/战斗/动作时间轴 随想.canvas", + "InBox/渲染/GPU/Pasted image 20230413163234.png", + "InBox/Mesh/图片/Pasted image 20221021171104.png", + "InBox/渲染/软渲染/图片/Pasted image 20230613102109.png", "未命名 1.canvas", "并行计算/GPU.canvas", "并行计算/CPU.canvas", diff --git a/1Project/宠物宇宙/地图编辑器/需要做的优化.md b/1Project/宠物宇宙/地图编辑器/需要做的优化.md index 13a872d..1e216be 100644 --- a/1Project/宠物宇宙/地图编辑器/需要做的优化.md +++ b/1Project/宠物宇宙/地图编辑器/需要做的优化.md @@ -1,6 +1,7 @@ ##### 流程组件 - [ ] **构建流程组件** + 抽象成管线 找出运行时和编辑器共有的模块 把这些模块做成组件 运行时和编辑器分别实例不同的组件 @@ -19,6 +20,11 @@ - 预览图 - 地板数据,长宽高, - 地板承载的摆件怪物标志信息 + 缺点: + - SO文件会实时改动到实际的物体的配置数据 + 但编辑器通常的模式是,需要dirty,不想保存的修改,不能直接修改到原有的数据 + - 对于无法序列化的东西无法保存,比如字典,参考路线配置,需要存一份文本配置来做序列化的事情 + - Json文件 - 一份额外信息,key为mapIndex,value为对应的额外信息 - StreamingAssetPath中 @@ -27,7 +33,12 @@ - 新的数据结构 - 文件夹下 - - + - 所有地板以及地板摆放的物体.json + - 一份关于地图的数据,地图Id,地图名字 + - 预览图 + - 配置表 + - 波次数据 + - 房间从1001开头用 多主键联合的方式 ##### 重新梳理关系和职责 ###### SpreadMap和SpreadMapLevel diff --git a/1Project/宠物宇宙/地图编辑器/需要支持的小功能.md b/1Project/宠物宇宙/地图编辑器/需要支持的地图功能.md similarity index 55% rename from 1Project/宠物宇宙/地图编辑器/需要支持的小功能.md rename to 1Project/宠物宇宙/地图编辑器/需要支持的地图功能.md index fd10f64..4e490bf 100644 --- a/1Project/宠物宇宙/地图编辑器/需要支持的小功能.md +++ b/1Project/宠物宇宙/地图编辑器/需要支持的地图功能.md @@ -3,24 +3,25 @@ > [!important] 优先级 **1** - - [x] 添加RoomComponents - - [ ] IExtension - - [ ] 生成怪物测试 - - [ ] id不再自增长 - - [x] 碰撞盒和标志需要添加自定义功能 + + - [x] IExtension + - [x] 创建地块的Width和Height + - [x] A*报错 + - ![[img_v3_02n6_ff40a1a4-d813-45f7-b132-6f14a74cfd7g.jpg]] + - [x] 松鼠异常 - [ ] 地图地板图片导入 自动修改图片大小 - [ ] 添加白膜地图 - - 创建100*100的地图,宽高跟随Rect大小变化 + - 创建100 - 100的地图,宽高跟随Rect大小变化 - - [ ] 将RoomConfig改到==关卡表==里 - RoomConfig的内容为SpecialRoom - - [ ] 碰撞盒需要添加旋转 - + - [x] 碰撞盒需要添加旋转 > [!note] 优先级 **2** + - [ ] id不再自增长 + - [ ] 将RoomConfig改到==关卡表==里 + RoomConfig的内容为SpecialRoom - [ ] 枚举改为英文名 - [ ] 瓦片地图 - [ ] 优化重构 @@ -30,6 +31,8 @@ > [!note] 优先级 **3** - [ ] 提取单个地块编辑 + - [ ] 添加脏标单个保存地块 + - [ ] 编辑地块的操作逻辑 > [!note] 优先级 **4** @@ -37,4 +40,8 @@ - [ ] 地图大背景优化移动方案 - \ No newline at end of file + > [!success] 已完成 + + - [x] 添加RoomComponents + - [x] 生成怪物测试 + - [x] 碰撞盒和标志需要添加自定义功能 \ No newline at end of file diff --git a/1Project/宠物宇宙/版本需求.md b/1Project/宠物宇宙/版本需求.md new file mode 100644 index 0000000..64e45fd --- /dev/null +++ b/1Project/宠物宇宙/版本需求.md @@ -0,0 +1,29 @@ + +> # 此版本 + + +- [x] 皮肤导入 + - [x] 上海限定 C:\Users\1\Desktop\cache\57015 + - 游戏中 + - [x] C:\Users\1\Desktop\cache\红/蓝/绿皮肤7.0 + - [x] 胳膊导入 + - 结算 + - [x] C:\Users\1\Desktop\cache\角色胜利结算 + - 卡面 + - [x] C:\Users\1\Desktop\cache\第三弹裁切输出 + - UI名字 + - [x] C:\Users\1\Desktop\cache\皮肤 +- [ ] 枪械宠物UI导入 +- [ ] 测试网络点数 开机检测 +- [ ] 地图编辑器 [[需要支持的地图功能]] + - [ ] Boss立绘 + - [ ] C:\Users\1\Desktop\cache\雷鸟血条UI + +--- + + + +> ## 下个版本 + + - [ ] 网络状态3\4 + [[1Project/宠物宇宙/硬件交互/业务插件(RTwoGameBusiness)TCP接口设计说明]] diff --git a/1Project/宠物宇宙/皮肤导入.md b/1Project/宠物宇宙/皮肤导入.md deleted file mode 100644 index 6b7056b..0000000 --- a/1Project/宠物宇宙/皮肤导入.md +++ /dev/null @@ -1,13 +0,0 @@ - -- [ ] 皮肤导入 - - [x] 上海限定 C:\Users\1\Desktop\cache\57015 - - 游戏中 - - [x] C:\Users\1\Desktop\cache\红/蓝/绿皮肤7.0 - - [ ] 胳膊导入 - - 结算 - - [x] C:\Users\1\Desktop\cache\角色胜利结算 - - 卡面 - - [x] C:\Users\1\Desktop\cache\第三弹裁切输出 - - UI名字 - - [ ] C:\Users\1\Desktop\cache\皮肤 - diff --git a/1Project/宠物宇宙/硬件交互/业务插件(RTwoGameBusiness)TCP接口设计说明.md b/1Project/宠物宇宙/硬件交互/业务插件(RTwoGameBusiness)TCP接口设计说明.md new file mode 100644 index 0000000..2db50d1 --- /dev/null +++ b/1Project/宠物宇宙/硬件交互/业务插件(RTwoGameBusiness)TCP接口设计说明.md @@ -0,0 +1,1541 @@ +# 业务插件(RTwoGameBusiness)TCP接口说明 + +## 1. 文档概述 + +### 1.1 版本 + +| 版本号 | 日期 | 作者 | 变更内容 | 状态 | +|-------|------|------|---------|------| +| 1.0 | 2025-05-29 | JJX | 初始创建 | 正式发布 | +| 1.1 | 2025-06-15 | JJX | 添加get-system-info接口说明和更新check-unis-net-state接口说明 | 正式发布 | + +### 1.2 目的 + +本文档详细描述RTwoGameBusiness业务插件提供的TCP接口规范,用于游戏客户端与业务插件之间的通信。该文档面向开发人员、测试人员和集成人员,提供接口的详细说明、参数格式、错误码以及使用示例。 + +### 1.3 适用范围 + +- 开发人员:用于实现游戏客户端与业务插件的通信 +- 测试人员:用于验证接口功能和性能 +- 集成人员:用于系统集成和故障排查 +- 维护人员:用于系统维护和问题定位 + +### 1.4 接口概述 + +RTwoGameBusiness插件通过TCP协议提供服务,主要包括以下功能类别: + +1. **用户卡功能**:用户信息查询、刷卡登录等 +2. **点数卡功能**:点数查询、充值、扣点等 +3. **游戏记录功能**:游戏积分、金币、宝石、卡牌、投币记录等 +4. **4G网络控制**:4G模块状态查询、启动和停止等 + +## 2. 基础信息 + +### 2.1 服务端口 + +RTwoGameBusiness插件默认监听TCP端口:**12103** + +该端口可通过配置文件修改,修改后需重启插件生效。 + +### 2.2 通信协议 + +- 通信协议:TCP +- 字符编码:UTF-8 +- 数据格式:JSON + +### 2.3 请求格式 + +所有请求都应遵循以下JSON格式: + +```json +{ + "command": "命令名称", + "data": { + // 根据不同命令类型包含不同的参数 + }, + "ts": 1621234567890 // 可选,请求时间戳(毫秒) +} +``` + +### 2.4 响应格式 + +所有响应都遵循以下JSON格式: + +```json +{ + "result": true, // 响应结果,true成功,false失败 + "errMsg": "", // 错误信息,成功时为空 + "statusCode": 0, // 状态码,0表示成功,非0表示各种错误 + "command": "命令名称", // 关联的指令标识 + "data": { // 返回数据,根据不同接口有不同结构 + // 根据不同命令返回不同的数据 + }, + "ts": 1621234567890 // 可选,响应时间戳(毫秒) +} +``` + +## 3. 接口详细说明 + +根据功能分类,本章节将详细介绍RTwoGameBusiness插件提供的所有TCP接口。 + +### 3.1 用户卡功能接口 + +#### 3.1.1 用户信息查询 (select-user-info) + +该接口用于查询用户卡所绑定的用户信息,并可选择性地返回排行榜数据。 + +**请求命令**:`select-user-info` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| cardId | string | 是(与cardSn二选一) | 卡ID | +| cardSn | string | 是(与cardId二选一) | 卡序列号 | +| gameLevel | string | 否 | 游戏关卡,不传则返回所有关卡的排行榜 | +| topLimit | int | 否 | 排行榜条数限制,默认为10 | +| topType | int | 否 | 排行榜类型:0=积分排行榜(默认),1=时长排行榜 | + +**请求示例**: + +```json +{ + "command": "select-user-info", + "data": { + "cardId": "1234567890", + "gameLevel": "1", + "topLimit": 10, + "topType": 0 + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| cardId | string | 卡ID | +| cardSn | string | 卡序列号 | +| userName | string | 用户名称 | +| userAvatar | string | 用户头像URL | +| userSex | int | 用户性别:0-未知 1-男 2-女 | +| topType | int | 排行榜类型:0=积分排行榜,1=时长排行榜 | +| leaderboards | object | 按游戏关卡分组的排行榜,key为游戏关卡 | + +**leaderboards对象内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| rank | int | 用户在此排行榜中的排名 | +| score | int | 用户在此排行榜中的积分(当topType=0时有效) | +| duration | int | 用户在此排行榜中的游戏时长(当topType=1时有效) | +| gameLevel | string | 游戏关卡 | +| records | array | 排行榜记录列表 | + +**records数组内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| id | int | 记录ID | +| cardId | string | 卡ID | +| userName | string | 用户名称 | +| score | int | 游戏得分 | +| gameDuration | int | 游戏时长(秒) | +| playTime | string | 游戏时间(格式化字符串) | +| gameLevel | string | 游戏关卡 | +| gameType | string | 游戏类型 | +| skinId | string | 皮肤ID | +| playerCount | int | 共同游戏的玩家数量 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "select-user-info", + "data": { + "cardId": "1234567890", + "cardSn": "A1B2C3D4", + "userName": "玩家001", + "userAvatar": "http://example.com/avatar/001.jpg", + "userSex": 1, + "topType": 0, + "leaderboards": { + "1": { + "rank": 3, + "score": 1500, + "gameLevel": "1", + "records": [ + { + "id": 123, + "cardId": "9876543210", + "userName": "玩家088", + "score": 2000, + "gameDuration": 300, + "playTime": "2025-05-28 14:30:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_001", + "playerCount": 1 + }, + { + "id": 124, + "cardId": "8765432109", + "userName": "玩家072", + "score": 1800, + "gameDuration": 280, + "playTime": "2025-05-28 15:20:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_002", + "playerCount": 1 + }, + { + "id": 125, + "cardId": "1234567890", + "userName": "玩家001", + "score": 1500, + "gameDuration": 260, + "playTime": "2025-05-28 16:10:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_003", + "playerCount": 1 + } + ] + } + } + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(卡ID和卡序列号都为空) | +| 40 | 用户不存在 | + +**备注**: +1. 卡ID和卡序列号必须至少提供一个,优先使用卡ID查询。 +2. 如果未指定排行榜类型,默认返回积分排行榜。 +3. 如果未指定游戏关卡,将返回所有关卡的排行榜数据。 +4. 排行榜数据按分数或时长降序排列。 + +#### 3.1.2 刷卡登录 (cwyz-swipe-card) + +该接口用于处理游戏中的刷卡操作,关联用户与游戏。 + +**请求命令**:`cwyz-swipe-card` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| cardSn | string | 是 | 卡序列号 | +| playerIdx | int | 是 | 玩家索引,用于多人游戏时区分不同玩家位置 | + +**请求示例**: + +```json +{ + "command": "cwyz-swipe-card", + "data": { + "cardSn": "A1B2C3D4", + "playerIdx": 1 + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| cardId | string | 卡ID | +| cardSn | string | 卡序列号 | +| userName | string | 用户名称 | +| userAvatar | string | 用户头像URL | +| userSex | int | 用户性别:0-未知 1-男 2-女 | +| playerIdx | int | 玩家索引 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "cwyz-swipe-card", + "data": { + "cardId": "1234567890", + "cardSn": "A1B2C3D4", + "userName": "玩家001", + "userAvatar": "http://example.com/avatar/001.jpg", + "userSex": 1, + "playerIdx": 1 + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(卡序列号为空) | +| 40 | 用户卡不存在 | +| 30 | 网络错误(与服务器通信失败) | + +**备注**: +1. 刷卡操作会尝试从服务器获取最新的用户信息,如果网络不可用,会使用本地存储的用户信息。 +2. 玩家索引用于区分多人游戏时的不同位置,通常从1开始,对应游戏机的不同位置。 +3. 如果卡片未绑定用户,会返回默认的用户信息。 + +### 3.2 点数卡功能接口 + +#### 3.2.1 查询剩余点数 (get-remaining-points) + +该接口用于查询当前游戏机剩余的点数,用于显示给用户或判断是否有足够点数执行出卡操作。 + +**请求命令**:`get-remaining-points` + +**请求参数**: +无需参数 + +**请求示例**: + +```json +{ + "command": "get-remaining-points", + "data": {} +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| remainingPoints | int | 剩余点数 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "get-remaining-points", + "data": { + "remainingPoints": 100 + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 20 | 数据库错误(读取点数卡信息失败) | + +**备注**: +1. 此接口会返回所有已绑定点数卡的剩余点数总和。 +2. 如果没有任何点数卡,返回的剩余点数为0。 +3. 点数信息优先从本地数据库获取,确保即使在网络不可用时也能正常工作。 + +#### 3.2.2 绑定点卡 (bind-point-card) + +该接口用于绑定新的点数卡到游戏机上。 + +**请求命令**:`bind-point-card` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| cardCode | string | 是 | 点卡卡号 | + +**请求示例**: + +```json +{ + "command": "bind-point-card", + "data": { + "cardCode": "PC12345678" + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| remainingPoints | int | 绑定后的剩余点数 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "bind-point-card", + "data": { + "remainingPoints": 100 + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(卡号为空) | +| 20 | 数据库错误(绑定点数卡失败) | +| 60 | 卡片不存在(点卡号无效) | +| 61 | 点卡已使用 | + +**备注**: +1. 绑定点卡后,点数将自动添加到游戏机的总点数中。 +2. 一个点卡只能被绑定一次,绑定后不能重复使用。 +3. 点卡绑定后立即生效,无需重启游戏机。 + +#### 3.2.3 出卡扣点 (deduct-points) + +该接口用于游戏出卡时扣除相应点数。 + +**请求命令**:`deduct-points` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| pointsToDeduct | int | 否 | 需要扣除的点数,默认为1 | +| playerIdx | int | 否 | 机台位置索引,默认为1 | + +**请求示例**: + +```json +{ + "command": "deduct-points", + "data": { + "pointsToDeduct": 1, + "playerIdx": 1 + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| remainingPoints | int | 扣除后的剩余点数 | +| isUploaded | bool | 是否已上报到服务器 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "deduct-points", + "data": { + "remainingPoints": 99, + "isUploaded": true + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(扣点数量无效) | +| 20 | 数据库错误(扣点操作失败) | +| 50 | 点数不足 | + +**备注**: +1. 扣点操作会根据当前配置的扣点模式执行(本地模式、实时模式或混合模式)。 +2. 如果使用本地模式,操作会先在本地执行,然后在适当时机上报到服务器。 +3. 如果使用实时模式,操作会直接上报到服务器,并立即返回结果。 +4. 如果点数不足,将返回错误码50。 +5. 每次扣点操作都会记录在扣点记录表中,用于后续统计和审计。 + +### 3.3 游戏记录功能接口 + +#### 3.3.1 保存游戏积分 (cwyz-score-save) + +该接口用于保存玩家的游戏积分和相关游戏数据,同时可以获取游戏排行榜信息。 + +**请求命令**:`cwyz-score-save` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| cardId | string | 是 | 卡ID,用于关联用户 | +| score | int | 是 | 游戏得分 | +| gameLevel | string | 是 | 游戏关卡 | +| gameType | string | 是 | 游戏类型 | +| topLimit | int | 否 | 排行榜总数,默认为10 | +| gameDuration | int | 否 | 游戏时长(秒) | +| golds | int | 否 | 获得金币数量 | +| gemstone | int | 否 | 获得的未鉴定宝石数量 | +| playerIdx | int | 否 | 玩家索引,默认为1 | +| skinId | string | 否 | 皮肤ID | +| playerCount | int | 否 | 共同游戏的玩家数量,默认为1 | + +**请求示例**: + +```json +{ + "command": "cwyz-score-save", + "data": { + "cardId": "1234567890", + "score": 1500, + "gameLevel": "1", + "gameType": "standard", + "topLimit": 10, + "gameDuration": 300, + "golds": 50, + "gemstone": 2, + "playerIdx": 1, + "skinId": "skin_001", + "playerCount": 1 + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| gameType | string | 游戏类型 | +| leaderboards | object | 按游戏关卡分组的排行榜,key为游戏关卡 | + +**leaderboards对象内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| rank | int | 用户在此排行榜中的排名 | +| score | int | 用户在此排行榜中的积分 | +| gameLevel | string | 游戏关卡 | +| records | array | 排行榜记录列表 | + +**records数组内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| id | int | 记录ID | +| cardId | string | 卡ID | +| userName | string | 用户名称 | +| score | int | 游戏得分 | +| gameDuration | int | 游戏时长(秒) | +| playTime | string | 游戏时间(格式化字符串) | +| gameLevel | string | 游戏关卡 | +| gameType | string | 游戏类型 | +| skinId | string | 皮肤ID | +| playerCount | int | 共同游戏的玩家数量 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "cwyz-score-save", + "data": { + "gameType": "standard", + "leaderboards": { + "1": { + "rank": 3, + "score": 1500, + "gameLevel": "1", + "records": [ + { + "id": 123, + "cardId": "9876543210", + "userName": "玩家088", + "score": 2000, + "gameDuration": 300, + "playTime": "2025-05-28 14:30:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_001", + "playerCount": 1 + }, + { + "id": 124, + "cardId": "8765432109", + "userName": "玩家072", + "score": 1800, + "gameDuration": 280, + "playTime": "2025-05-28 15:20:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_002", + "playerCount": 1 + }, + { + "id": 125, + "cardId": "1234567890", + "userName": "玩家001", + "score": 1500, + "gameDuration": 260, + "playTime": "2025-05-28 16:10:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_003", + "playerCount": 1 + } + ] + } + } + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(必填参数缺失) | +| 20 | 数据库错误(保存积分失败) | +| 40 | 用户不存在 | + +**备注**: +1. 如果提供了金币(golds)参数且大于0,系统会自动调用保存金币记录的功能。 +2. 如果提供了宝石(gemstone)参数且大于0,系统会自动调用保存宝石记录的功能。 +3. 积分数据会根据游戏类型和游戏关卡进行分类,便于后续查询。 +4. 响应中的排行榜数据包含当前用户的排名和指定数量的最高分记录。 +5. 如果用户卡ID不存在,系统会尝试创建一个游客记录。 + +#### 3.3.2 获取游戏排行榜 (cwyz-query-score-top) + +该接口用于获取游戏排行榜信息。 + +**请求命令**:`cwyz-query-score-top` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| gameType | string | 是 | 游戏类型 | +| gameLevel | string | 否 | 游戏关卡,不传则返回所有关卡的排行榜 | +| topLimit | int | 否 | 需要查询的排行榜条数,默认为10 | +| isGlobal | bool | 否 | 是否获取全网排名,默认为false(即默认获取本地排名) | + +**请求示例**: + +```json +{ + "command": "cwyz-query-score-top", + "data": { + "gameType": "standard", + "gameLevel": "1", + "topLimit": 10, + "isGlobal": false + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| gameType | string | 游戏类型 | +| leaderboards | object | 按游戏关卡分组的排行榜,key为游戏关卡 | + +**leaderboards对象内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| rank | int | 用户在此排行榜中的排名 | +| score | int | 用户在此排行榜中的积分 | +| gameLevel | string | 游戏关卡 | +| records | array | 排行榜记录列表 | + +**records数组内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| id | int | 记录ID | +| cardId | string | 卡ID | +| userName | string | 用户名称 | +| score | int | 游戏得分 | +| gameDuration | int | 游戏时长(秒) | +| playTime | string | 游戏时间(格式化字符串) | +| gameLevel | string | 游戏关卡 | +| gameType | string | 游戏类型 | +| skinId | string | 皮肤ID | +| playerCount | int | 共同游戏的玩家数量 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "cwyz-query-score-top", + "data": { + "gameType": "standard", + "leaderboards": { + "1": { + "rank": 3, + "score": 1500, + "gameLevel": "1", + "records": [ + { + "id": 123, + "cardId": "9876543210", + "userName": "玩家088", + "score": 2000, + "gameDuration": 300, + "playTime": "2025-05-28 14:30:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_001", + "playerCount": 1 + }, + { + "id": 124, + "cardId": "8765432109", + "userName": "玩家072", + "score": 1800, + "gameDuration": 280, + "playTime": "2025-05-28 15:20:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_002", + "playerCount": 1 + }, + { + "id": 125, + "cardId": "1234567890", + "userName": "玩家001", + "score": 1500, + "gameDuration": 260, + "playTime": "2025-05-28 16:10:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_003", + "playerCount": 1 + } + ] + } + } + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(必填参数缺失) | +| 20 | 数据库错误(获取排行榜失败) | +| 40 | 用户不存在 | + +**备注**: +1. 排行榜数据包含当前用户的排名和指定数量的最高分记录。 +2. 如果用户卡ID不存在,系统会尝试创建一个游客记录。 + +#### 3.3.3 获取游戏时长排行榜 (cwyz-query-duration-top) + +该接口用于获取游戏时长排行榜信息。 + +**请求命令**:`cwyz-query-duration-top` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| gameType | string | 是 | 游戏类型 | +| gameLevel | string | 否 | 游戏关卡,不传则返回所有关卡的排行榜 | +| topLimit | int | 否 | 需要查询的排行榜条数,默认为10 | +| isGlobal | bool | 否 | 是否获取全网排名,默认为false(即默认获取本地排名) | + +**请求示例**: + +```json +{ + "command": "cwyz-query-duration-top", + "data": { + "gameType": "standard", + "gameLevel": "1", + "topLimit": 10, + "isGlobal": false + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| gameType | string | 游戏类型 | +| leaderboards | object | 按游戏关卡分组的排行榜,key为游戏关卡 | + +**leaderboards对象内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| rank | int | 用户在此排行榜中的排名 | +| duration | int | 用户在此排行榜中的游戏时长(秒) | +| gameLevel | string | 游戏关卡 | +| records | array | 排行榜记录列表 | + +**records数组内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| id | int | 记录ID | +| cardId | string | 卡ID | +| userName | string | 用户名称 | +| score | int | 游戏得分 | +| gameDuration | int | 游戏时长(秒) | +| playTime | string | 游戏时间(格式化字符串) | +| gameLevel | string | 游戏关卡 | +| gameType | string | 游戏类型 | +| skinId | string | 皮肤ID | +| playerCount | int | 共同游戏的玩家数量 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "cwyz-query-duration-top", + "data": { + "gameType": "standard", + "leaderboards": { + "1": { + "rank": 2, + "duration": 280, + "gameLevel": "1", + "records": [ + { + "id": 123, + "cardId": "9876543210", + "userName": "玩家088", + "score": 1800, + "gameDuration": 320, + "playTime": "2025-05-28 14:30:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_001", + "playerCount": 1 + }, + { + "id": 124, + "cardId": "1234567890", + "userName": "玩家001", + "score": 1500, + "gameDuration": 280, + "playTime": "2025-05-28 15:20:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_002", + "playerCount": 1 + }, + { + "id": 125, + "cardId": "8765432109", + "userName": "玩家072", + "score": 1200, + "gameDuration": 240, + "playTime": "2025-05-28 16:10:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_003", + "playerCount": 1 + } + ] + } + } + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(游戏类型为空) | +| 20 | 数据库错误(获取排行榜失败) | + +**备注**: +1. 该接口专门用于获取按游戏时长排序的排行榜。 +2. 排行榜数据按游戏时长降序排列。 +3. 如果设置isGlobal为true,将获取全网的排行榜数据,可能需要更长的响应时间。 + +#### 3.3.4 统一获取游戏排行榜 (cwyz-query-top) + +该接口统一了获取积分排行榜和时长排行榜的功能,通过topType参数区分不同类型的排行榜。 + +**请求命令**:`cwyz-query-top` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| gameType | string | 是 | 游戏类型 | +| gameLevel | string | 否 | 游戏关卡,不传则返回所有关卡的排行榜 | +| topLimit | int | 否 | 需要查询的排行榜条数,默认为10 | +| topType | int | 是 | 排行榜类型:0=积分排行榜,1=时长排行榜 | +| isGlobal | bool | 否 | 是否获取全网排名,默认为false(即默认获取本地排名) | + +**请求示例**: + +```json +{ + "command": "cwyz-query-top", + "data": { + "gameType": "standard", + "gameLevel": "1", + "topLimit": 10, + "topType": 0, + "isGlobal": false + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| gameType | string | 游戏类型 | +| topType | int | 排行榜类型:0=积分排行榜,1=时长排行榜 | +| leaderboards | object | 按游戏关卡分组的排行榜,key为游戏关卡 | + +**leaderboards对象内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| rank | int | 用户在此排行榜中的排名 | +| score | int | 用户在此排行榜中的积分(当topType=0时有效) | +| duration | int | 用户在此排行榜中的游戏时长(当topType=1时有效) | +| gameLevel | string | 游戏关卡 | +| records | array | 排行榜记录列表 | + +**records数组内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| id | int | 记录ID | +| cardId | string | 卡ID | +| userName | string | 用户名称 | +| score | int | 游戏得分 | +| gameDuration | int | 游戏时长(秒) | +| playTime | string | 游戏时间(格式化字符串) | +| gameLevel | string | 游戏关卡 | +| gameType | string | 游戏类型 | +| skinId | string | 皮肤ID | +| playerCount | int | 共同游戏的玩家数量 | + +**响应示例(积分排行榜)**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "cwyz-query-top", + "data": { + "gameType": "standard", + "topType": 0, + "leaderboards": { + "1": { + "rank": 3, + "score": 1500, + "gameLevel": "1", + "records": [ + { + "id": 123, + "cardId": "9876543210", + "userName": "玩家088", + "score": 2000, + "gameDuration": 300, + "playTime": "2025-05-28 14:30:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_001", + "playerCount": 1 + }, + { + "id": 124, + "cardId": "8765432109", + "userName": "玩家072", + "score": 1800, + "gameDuration": 280, + "playTime": "2025-05-28 15:20:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_002", + "playerCount": 1 + }, + { + "id": 125, + "cardId": "1234567890", + "userName": "玩家001", + "score": 1500, + "gameDuration": 260, + "playTime": "2025-05-28 16:10:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_003", + "playerCount": 1 + } + ] + } + } + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(游戏类型为空或排行榜类型无效) | +| 20 | 数据库错误(获取排行榜失败) | + +**备注**: +1. 该接口可以根据topType参数灵活获取不同类型的排行榜。 +2. 当topType=0时,排行榜按积分降序排列;当topType=1时,排行榜按游戏时长降序排列。 +3. 如果设置isGlobal为true,将获取全网的排行榜数据,可能需要更长的响应时间。 +4. 推荐使用该接口代替单独的积分排行榜和时长排行榜接口,提高代码复用性。 + +#### 3.3.5 保存出卡记录 (cwyz-outcard-save) + +该接口用于记录游戏中玩家获得卡片的信息。 + +**请求命令**:`cwyz-outcard-save` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| cardId | string | 是 | 卡ID,用于关联用户 | +| cardStar | int | 是 | 卡片星级 | +| cardType | string | 是 | 卡片类型 | +| cardName | string | 是 | 卡片名称 | +| gameType | string | 是 | 游戏类型 | +| playerIdx | int | 否 | 玩家索引,默认为1 | + +**请求示例**: + +```json +{ + "command": "cwyz-outcard-save", + "data": { + "cardId": "1234567890", + "cardStar": 4, + "cardType": "monster", + "cardName": "火焰龙", + "gameType": "standard", + "playerIdx": 1 + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| success | bool | 操作是否成功 | +| cardId | string | 卡ID | +| userName | string | 用户名称 | +| cardStar | int | 卡片星级 | +| cardType | string | 卡片类型 | +| cardName | string | 卡片名称 | +| drawTime | string | 出卡时间(格式化字符串) | +| playerIdx | int | 玩家索引 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "cwyz-outcard-save", + "data": { + "success": true, + "cardId": "1234567890", + "userName": "玩家001", + "cardStar": 4, + "cardType": "monster", + "cardName": "火焰龙", + "drawTime": "2025-05-28 16:30:45", + "playerIdx": 1 + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(必填参数缺失) | +| 20 | 数据库错误(保存出卡记录失败) | +| 40 | 用户不存在 | + +**备注**: +1. 出卡记录会保存在本地数据库中,并在网络可用时上传到服务器。 +2. 出卡时间使用服务器时间,确保统一性。 +3. 卡片星级通常为1-5,表示卡片的稀有程度。 +4. 卡片类型可以是游戏定义的任何类型,如"monster"、"magic"、"trap"等。 + +#### 3.3.6 保存硬币记账 (cwyz-coin-save) + +该接口用于记录玩家投币和消耗硬币的信息。 + +**请求命令**:`cwyz-coin-save` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| cardId | string | 是 | 卡ID,用于关联用户 | +| coinCount | int | 是 | 硬币数量 | +| type | int | 是 | 类型:1=投币,2=消耗 | +| playerIdx | int | 否 | 玩家索引,默认为1 | + +**请求示例**: + +```json +{ + "command": "cwyz-coin-save", + "data": { + "cardId": "1234567890", + "coinCount": 5, + "type": 1, + "playerIdx": 1 + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| success | bool | 操作是否成功 | +| cardId | string | 卡ID | +| userName | string | 用户名称 | +| coinCount | int | 硬币数量 | +| type | int | 操作类型:1=投币,2=消耗 | +| balance | int | 当前余额 | +| processTime | string | 处理时间(格式化字符串) | +| playerIdx | int | 玩家索引 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "cwyz-coin-save", + "data": { + "success": true, + "cardId": "1234567890", + "userName": "玩家001", + "coinCount": 5, + "type": 1, + "balance": 15, + "processTime": "2025-05-28 17:15:30", + "playerIdx": 1 + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(必填参数缺失或硬币数量为0) | +| 20 | 数据库错误(保存硬币记录失败) | +| 40 | 用户不存在 | +| 50 | 余额不足(当type=2,消耗硬币时) | + +**备注**: +1. 硬币记账会记录玩家的投币和消耗情况,便于统计和分析。 +2. 类型为1表示投币(增加余额),类型为2表示消耗(减少余额)。 +3. 响应中的balance字段表示操作后的硬币余额。 +4. 如果是消耗操作且余额不足,将返回错误码50。 +5. 所有操作都会记录在硬币记账表中,用于后续统计和审计。 + +### 3.4 4G网络控制接口 + +#### 3.4.1 查询4G模块信息 (query-4g-info) + +该接口用于查询4G网络模块的详细信息,包括网络状态、信号强度、SIM卡信息等。 + +**请求命令**:`query-4g-info` + +**请求参数**: +无需参数 + +**请求示例**: + +```json +{ + "command": "query-4g-info", + "data": {} +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| mnc | string | 网络MNC码 | +| cid | string | 基站CID | +| lac | string | 位置区域码 | +| serialPort | string | 串口名称 | +| dbm | int | 信号强度 | +| revision | string | 模块固件版本 | +| sim | string | SIM卡ICCID | +| imsi | string | SIM卡IMSI | +| imei | string | 设备IMEI | +| ndisEnabled | bool | NDIS网卡状态 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "query-4g-info", + "data": { + "mnc": "01", + "cid": "123456", + "lac": "7890", + "serialPort": "COM3", + "dbm": -65, + "revision": "EG25GGBR07A08M2G", + "sim": "898600123456789012345", + "imsi": "460012345678901", + "imei": "862512345678901", + "ndisEnabled": true + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 80 | 4G模块不存在 | +| 81 | 4G模块通信错误 | + +**备注**: +1. 信号强度(dbm)通常在-50到-120之间,数值越大(越接近0)表示信号越强。 +2. ndisEnabled表示4G网卡是否启用,true表示已启用,false表示已禁用。 +3. 如果设备没有4G模块,将返回错误码80。 +4. 该接口仅查询信息,不会改变任何网络设置。 + +#### 3.4.2 禁用4G网络 (stop-4g-net) + +该接口用于禁用4G网络,可用于节省流量或解决网络冲突问题。 + +**请求命令**:`stop-4g-net` + +**请求参数**: +无需参数 + +**请求示例**: + +```json +{ + "command": "stop-4g-net", + "data": {} +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| success | bool | 操作是否成功 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "stop-4g-net", + "data": { + "success": true + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 80 | 4G模块不存在 | +| 81 | 4G模块通信错误 | +| 82 | 网络已经处于禁用状态 | + +**备注**: +1. 该接口会关闭4G网卡,停止所有网络通信。 +2. 操作成功后,设备将无法通过4G网络连接互联网,但可以通过其他网络接口(如WiFi、有线网络)连接。 +3. 4G网络禁用后,可通过start-4g-net接口重新启用。 +4. 如果设备没有4G模块,将返回错误码80。 + +#### 3.4.3 启用4G网络 (start-4g-net) + +该接口用于启用4G网络,恢复设备的移动网络连接。 + +**请求命令**:`start-4g-net` + +**请求参数**: +无需参数 + +**请求示例**: + +```json +{ + "command": "start-4g-net", + "data": {} +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| success | bool | 操作是否成功 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "start-4g-net", + "data": { + "success": true + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 80 | 4G模块不存在 | +| 81 | 4G模块通信错误 | +| 83 | 网络已经处于启用状态 | +| 84 | SIM卡异常 | + +**备注**: +1. 该接口会启用4G网卡,恢复移动网络连接。 +2. 操作成功后,设备将能够通过4G网络连接互联网。 +3. 网络连接过程可能需要几秒到几十秒不等,取决于网络信号强度和运营商网络状况。 +4. 如果设备没有4G模块或SIM卡异常,将返回相应的错误码。 + +### 3.5 世宇接口状态 + +#### 3.5.1 检查世宇接口状态 (check-unis-net-state) + +该接口用于检查与世宇服务器的连接状态。 + +**请求命令**:`check-unis-net-state` + +**请求参数**: +无需参数 + +**请求示例**: + +```json +{ + "command": "check-unis-net-state", + "data": {} +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| state | int | 世宇网络连接状态: 0-断开连接 1-有线网络 2-4G网络 3-服务异常 4-系统异常 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "check-unis-net-state", + "data": { + "state": 1 + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | + +**网络状态代码说明**: + +| 网络状态码 | 描述 | 说明 | +|-----------|------|------| +| 0 | 网络断开 | 无网络连接 | +| 1 | 有线网络 | 有线网络连接正常且能访问世宇服务器 | +| 2 | 4G网络 | 4G网络连接正常且能访问世宇服务器 | +| 3 | 服务异常 | 网络连接正常但无法登录世宇服务器 | +| 4 | 系统异常 | 网络连接正常但无法获取登录凭证 | + +**备注**: +1. 该接口用于检查业务插件与世宇服务器的连接状态。 +2. 检查过程包括网络连接检测和世宇服务器登录尝试。 +3. 有线网络和4G网络状态表示网络连接正常且可成功登录世宇服务器。 +4. 服务异常表示网络连接正常但无法登录世宇服务器,可能是服务器问题。 +5. 系统异常表示网络连接正常但无法获取登录凭证,可能是配置问题。 + +#### 3.5.2 获取系统信息 (get-system-info) + +该接口用于获取系统综合信息,包括网络状态、版本信息、磁盘信息和剩余点数。 + +**请求命令**:`get-system-info` + +**请求参数**: +无需参数 + +**请求示例**: + +```json +{ + "command": "get-system-info", + "data": {} +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| networkState | int | 网络状态代码: 0-断开连接 1-有线网络 2-4G网络 3-服务异常 4-系统异常 | +| networkStateDesc | string | 网络状态描述文本 | +| versionInfo | object | 版本信息对象 | +| diskInfos | array | 磁盘信息数组 | +| remainingPoints | int | 剩余点数 | + +**versionInfo对象内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| gameVersion | string | 游戏版本 | +| updaterVersion | string | 更新器版本 | +| businessVersion | string | 业务模块版本 | +| consoleVersion | string | 控制台版本 | +| deviceId | string | 设备ID | + +**diskInfos数组内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| driveLetter | string | 盘符 | +| freeSpace | string | 可用空间(格式化后的字符串) | +| totalSpace | string | 总空间(格式化后的字符串) | +| usedSpace | string | 已用空间(格式化后的字符串) | +| freePercent | float | 可用空间百分比 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "get-system-info", + "data": { + "networkState": 1, + "networkStateDesc": "有线网络", + "versionInfo": { + "gameVersion": "1.0.5", + "updaterVersion": "1.2.0", + "businessVersion": "1.1.0", + "consoleVersion": "1.0.8", + "deviceId": "ABCDEF123456" + }, + "diskInfos": [ + { + "driveLetter": "C:", + "freeSpace": "50.5 GB", + "totalSpace": "100 GB", + "usedSpace": "49.5 GB", + "freePercent": 50.5 + }, + { + "driveLetter": "D:", + "freeSpace": "120 GB", + "totalSpace": "500 GB", + "usedSpace": "380 GB", + "freePercent": 24.0 + } + ], + "remainingPoints": 100 + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | + +**备注**: +1. 该接口汇总了系统的多项信息,便于快速了解系统状态。 +2. 网络状态检测逻辑与check-unis-net-state接口保持一致。 +3. 版本信息通过向更新器发送get-version-info指令获取。 +4. 磁盘信息按盘符字母顺序排列。 +5. 剩余点数与get-remaining-points接口返回的值一致。 diff --git a/4Archives/宠物宇宙/用户卡及游戏信息处理过程设计文档.md b/1Project/宠物宇宙/硬件交互/用户卡及游戏信息处理过程设计文档.md similarity index 100% rename from 4Archives/宠物宇宙/用户卡及游戏信息处理过程设计文档.md rename to 1Project/宠物宇宙/硬件交互/用户卡及游戏信息处理过程设计文档.md diff --git a/1Project/开发文章/将开发文章阅读并分类.md b/1Project/开发文章/将开发文章阅读并分类.md index 9a3d38f..5ef1b1a 100644 --- a/1Project/开发文章/将开发文章阅读并分类.md +++ b/1Project/开发文章/将开发文章阅读并分类.md @@ -1,4 +1,5 @@ +### GAS优先!! - [ ] [焦虑、内耗、爱破防,真的是你的锅吗?硬核心理学让你从此掌控自我!-我要等到什么时候-稍后再看-哔哩哔哩视频](https://www.bilibili.com/list/watchlater?oid=114079968532107&bvid=BV1YM9gYdECb&spm_id_from=333.1007.top_right_bar_window_view_later.content.click) - [ ] [动作游戏框架05.扩展Timeline:使用组合,而非继承,来扩展Timeline的基础功能-我要等到什么时候-稍后再看-哔哩哔哩视频](https://www.bilibili.com/list/watchlater?oid=114522652147889&bvid=BV1HKJAzyEZ5&spm_id_from=333.1007.top_right_bar_window_view_later.content.click) diff --git a/2Areas/提升效率/未命名.md b/2Areas/提升效率/未命名.md new file mode 100644 index 0000000..a653333 --- /dev/null +++ b/2Areas/提升效率/未命名.md @@ -0,0 +1,5 @@ + +[【全网首发】专注力与创造力的秘诀|大脑炎症与创伤修复|脑科学与大脑默认模式网络|本世纪最详尽脑网络_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1DdXLYNEGz/?spm_id_from=333.788.recommend_more_video.17&vd_source=c0e8ba1ae97ae182776824f6b7c45879) +评论摘要 + +大道至简: 第一步先把身体搞好,优先级排序睡眠、饮食、运动。第二步减少干扰,黄片、游戏、小说、电影能免则免。第三步专项训练,冥想和正念。第四步才是术,番茄工作法、todolist、心流理论之类的。 \ No newline at end of file diff --git a/3Projects/Unity/loxodon/loxodon-framework Public.md b/3Projects/Unity/loxodon/loxodon-framework Public.md new file mode 100644 index 0000000..841147b --- /dev/null +++ b/3Projects/Unity/loxodon/loxodon-framework Public.md @@ -0,0 +1,5 @@ + + +Source:[loxodon-framework/Loxodon.Framework.TextUGUI at master · vovgou/loxodon-framework · GitHub](https://github.com/vovgou/loxodon-framework/tree/master/Loxodon.Framework.TextUGUI) + +--- diff --git a/InBox/loxodon-framework.md b/InBox/loxodon-framework.md new file mode 100644 index 0000000..e69de29 diff --git a/InBox/【Unity插件 - 图标轮廓渲染插件 SDF Image - Quality UI Outlines and Shadow-哔哩哔哩】.md b/InBox/【Unity插件 - 图标轮廓渲染插件 SDF Image - Quality UI Outlines and Shadow-哔哩哔哩】.md new file mode 100644 index 0000000..bb22d63 --- /dev/null +++ b/InBox/【Unity插件 - 图标轮廓渲染插件 SDF Image - Quality UI Outlines and Shadow-哔哩哔哩】.md @@ -0,0 +1,3 @@ + + + https://b23.tv/tZzXJrB \ No newline at end of file diff --git a/InBox/网络/封装可扩展网络请求框架.md b/InBox/网络/封装可扩展网络请求框架.md new file mode 100644 index 0000000..902b0e5 --- /dev/null +++ b/InBox/网络/封装可扩展网络请求框架.md @@ -0,0 +1,5 @@ + +Source:[Unity网络请求封装实战:手把手教你打造一套可扩展的网络请求框架](https://mp.weixin.qq.com/s/p9qDdJqHj-7x58XAPNNabA) + +--- + diff --git a/渲染/软渲染/图片/img_v3_02n6_ff40a1a4-d813-45f7-b132-6f14a74cfd7g.jpg b/渲染/软渲染/图片/img_v3_02n6_ff40a1a4-d813-45f7-b132-6f14a74cfd7g.jpg new file mode 100644 index 0000000..7f4f666 Binary files /dev/null and b/渲染/软渲染/图片/img_v3_02n6_ff40a1a4-d813-45f7-b132-6f14a74cfd7g.jpg differ diff --git a/渲染/软渲染/图片/业务插件(RTwoGameBusiness)TCP接口设计说明.md b/渲染/软渲染/图片/业务插件(RTwoGameBusiness)TCP接口设计说明.md new file mode 100644 index 0000000..2db50d1 --- /dev/null +++ b/渲染/软渲染/图片/业务插件(RTwoGameBusiness)TCP接口设计说明.md @@ -0,0 +1,1541 @@ +# 业务插件(RTwoGameBusiness)TCP接口说明 + +## 1. 文档概述 + +### 1.1 版本 + +| 版本号 | 日期 | 作者 | 变更内容 | 状态 | +|-------|------|------|---------|------| +| 1.0 | 2025-05-29 | JJX | 初始创建 | 正式发布 | +| 1.1 | 2025-06-15 | JJX | 添加get-system-info接口说明和更新check-unis-net-state接口说明 | 正式发布 | + +### 1.2 目的 + +本文档详细描述RTwoGameBusiness业务插件提供的TCP接口规范,用于游戏客户端与业务插件之间的通信。该文档面向开发人员、测试人员和集成人员,提供接口的详细说明、参数格式、错误码以及使用示例。 + +### 1.3 适用范围 + +- 开发人员:用于实现游戏客户端与业务插件的通信 +- 测试人员:用于验证接口功能和性能 +- 集成人员:用于系统集成和故障排查 +- 维护人员:用于系统维护和问题定位 + +### 1.4 接口概述 + +RTwoGameBusiness插件通过TCP协议提供服务,主要包括以下功能类别: + +1. **用户卡功能**:用户信息查询、刷卡登录等 +2. **点数卡功能**:点数查询、充值、扣点等 +3. **游戏记录功能**:游戏积分、金币、宝石、卡牌、投币记录等 +4. **4G网络控制**:4G模块状态查询、启动和停止等 + +## 2. 基础信息 + +### 2.1 服务端口 + +RTwoGameBusiness插件默认监听TCP端口:**12103** + +该端口可通过配置文件修改,修改后需重启插件生效。 + +### 2.2 通信协议 + +- 通信协议:TCP +- 字符编码:UTF-8 +- 数据格式:JSON + +### 2.3 请求格式 + +所有请求都应遵循以下JSON格式: + +```json +{ + "command": "命令名称", + "data": { + // 根据不同命令类型包含不同的参数 + }, + "ts": 1621234567890 // 可选,请求时间戳(毫秒) +} +``` + +### 2.4 响应格式 + +所有响应都遵循以下JSON格式: + +```json +{ + "result": true, // 响应结果,true成功,false失败 + "errMsg": "", // 错误信息,成功时为空 + "statusCode": 0, // 状态码,0表示成功,非0表示各种错误 + "command": "命令名称", // 关联的指令标识 + "data": { // 返回数据,根据不同接口有不同结构 + // 根据不同命令返回不同的数据 + }, + "ts": 1621234567890 // 可选,响应时间戳(毫秒) +} +``` + +## 3. 接口详细说明 + +根据功能分类,本章节将详细介绍RTwoGameBusiness插件提供的所有TCP接口。 + +### 3.1 用户卡功能接口 + +#### 3.1.1 用户信息查询 (select-user-info) + +该接口用于查询用户卡所绑定的用户信息,并可选择性地返回排行榜数据。 + +**请求命令**:`select-user-info` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| cardId | string | 是(与cardSn二选一) | 卡ID | +| cardSn | string | 是(与cardId二选一) | 卡序列号 | +| gameLevel | string | 否 | 游戏关卡,不传则返回所有关卡的排行榜 | +| topLimit | int | 否 | 排行榜条数限制,默认为10 | +| topType | int | 否 | 排行榜类型:0=积分排行榜(默认),1=时长排行榜 | + +**请求示例**: + +```json +{ + "command": "select-user-info", + "data": { + "cardId": "1234567890", + "gameLevel": "1", + "topLimit": 10, + "topType": 0 + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| cardId | string | 卡ID | +| cardSn | string | 卡序列号 | +| userName | string | 用户名称 | +| userAvatar | string | 用户头像URL | +| userSex | int | 用户性别:0-未知 1-男 2-女 | +| topType | int | 排行榜类型:0=积分排行榜,1=时长排行榜 | +| leaderboards | object | 按游戏关卡分组的排行榜,key为游戏关卡 | + +**leaderboards对象内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| rank | int | 用户在此排行榜中的排名 | +| score | int | 用户在此排行榜中的积分(当topType=0时有效) | +| duration | int | 用户在此排行榜中的游戏时长(当topType=1时有效) | +| gameLevel | string | 游戏关卡 | +| records | array | 排行榜记录列表 | + +**records数组内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| id | int | 记录ID | +| cardId | string | 卡ID | +| userName | string | 用户名称 | +| score | int | 游戏得分 | +| gameDuration | int | 游戏时长(秒) | +| playTime | string | 游戏时间(格式化字符串) | +| gameLevel | string | 游戏关卡 | +| gameType | string | 游戏类型 | +| skinId | string | 皮肤ID | +| playerCount | int | 共同游戏的玩家数量 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "select-user-info", + "data": { + "cardId": "1234567890", + "cardSn": "A1B2C3D4", + "userName": "玩家001", + "userAvatar": "http://example.com/avatar/001.jpg", + "userSex": 1, + "topType": 0, + "leaderboards": { + "1": { + "rank": 3, + "score": 1500, + "gameLevel": "1", + "records": [ + { + "id": 123, + "cardId": "9876543210", + "userName": "玩家088", + "score": 2000, + "gameDuration": 300, + "playTime": "2025-05-28 14:30:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_001", + "playerCount": 1 + }, + { + "id": 124, + "cardId": "8765432109", + "userName": "玩家072", + "score": 1800, + "gameDuration": 280, + "playTime": "2025-05-28 15:20:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_002", + "playerCount": 1 + }, + { + "id": 125, + "cardId": "1234567890", + "userName": "玩家001", + "score": 1500, + "gameDuration": 260, + "playTime": "2025-05-28 16:10:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_003", + "playerCount": 1 + } + ] + } + } + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(卡ID和卡序列号都为空) | +| 40 | 用户不存在 | + +**备注**: +1. 卡ID和卡序列号必须至少提供一个,优先使用卡ID查询。 +2. 如果未指定排行榜类型,默认返回积分排行榜。 +3. 如果未指定游戏关卡,将返回所有关卡的排行榜数据。 +4. 排行榜数据按分数或时长降序排列。 + +#### 3.1.2 刷卡登录 (cwyz-swipe-card) + +该接口用于处理游戏中的刷卡操作,关联用户与游戏。 + +**请求命令**:`cwyz-swipe-card` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| cardSn | string | 是 | 卡序列号 | +| playerIdx | int | 是 | 玩家索引,用于多人游戏时区分不同玩家位置 | + +**请求示例**: + +```json +{ + "command": "cwyz-swipe-card", + "data": { + "cardSn": "A1B2C3D4", + "playerIdx": 1 + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| cardId | string | 卡ID | +| cardSn | string | 卡序列号 | +| userName | string | 用户名称 | +| userAvatar | string | 用户头像URL | +| userSex | int | 用户性别:0-未知 1-男 2-女 | +| playerIdx | int | 玩家索引 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "cwyz-swipe-card", + "data": { + "cardId": "1234567890", + "cardSn": "A1B2C3D4", + "userName": "玩家001", + "userAvatar": "http://example.com/avatar/001.jpg", + "userSex": 1, + "playerIdx": 1 + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(卡序列号为空) | +| 40 | 用户卡不存在 | +| 30 | 网络错误(与服务器通信失败) | + +**备注**: +1. 刷卡操作会尝试从服务器获取最新的用户信息,如果网络不可用,会使用本地存储的用户信息。 +2. 玩家索引用于区分多人游戏时的不同位置,通常从1开始,对应游戏机的不同位置。 +3. 如果卡片未绑定用户,会返回默认的用户信息。 + +### 3.2 点数卡功能接口 + +#### 3.2.1 查询剩余点数 (get-remaining-points) + +该接口用于查询当前游戏机剩余的点数,用于显示给用户或判断是否有足够点数执行出卡操作。 + +**请求命令**:`get-remaining-points` + +**请求参数**: +无需参数 + +**请求示例**: + +```json +{ + "command": "get-remaining-points", + "data": {} +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| remainingPoints | int | 剩余点数 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "get-remaining-points", + "data": { + "remainingPoints": 100 + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 20 | 数据库错误(读取点数卡信息失败) | + +**备注**: +1. 此接口会返回所有已绑定点数卡的剩余点数总和。 +2. 如果没有任何点数卡,返回的剩余点数为0。 +3. 点数信息优先从本地数据库获取,确保即使在网络不可用时也能正常工作。 + +#### 3.2.2 绑定点卡 (bind-point-card) + +该接口用于绑定新的点数卡到游戏机上。 + +**请求命令**:`bind-point-card` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| cardCode | string | 是 | 点卡卡号 | + +**请求示例**: + +```json +{ + "command": "bind-point-card", + "data": { + "cardCode": "PC12345678" + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| remainingPoints | int | 绑定后的剩余点数 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "bind-point-card", + "data": { + "remainingPoints": 100 + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(卡号为空) | +| 20 | 数据库错误(绑定点数卡失败) | +| 60 | 卡片不存在(点卡号无效) | +| 61 | 点卡已使用 | + +**备注**: +1. 绑定点卡后,点数将自动添加到游戏机的总点数中。 +2. 一个点卡只能被绑定一次,绑定后不能重复使用。 +3. 点卡绑定后立即生效,无需重启游戏机。 + +#### 3.2.3 出卡扣点 (deduct-points) + +该接口用于游戏出卡时扣除相应点数。 + +**请求命令**:`deduct-points` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| pointsToDeduct | int | 否 | 需要扣除的点数,默认为1 | +| playerIdx | int | 否 | 机台位置索引,默认为1 | + +**请求示例**: + +```json +{ + "command": "deduct-points", + "data": { + "pointsToDeduct": 1, + "playerIdx": 1 + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| remainingPoints | int | 扣除后的剩余点数 | +| isUploaded | bool | 是否已上报到服务器 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "deduct-points", + "data": { + "remainingPoints": 99, + "isUploaded": true + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(扣点数量无效) | +| 20 | 数据库错误(扣点操作失败) | +| 50 | 点数不足 | + +**备注**: +1. 扣点操作会根据当前配置的扣点模式执行(本地模式、实时模式或混合模式)。 +2. 如果使用本地模式,操作会先在本地执行,然后在适当时机上报到服务器。 +3. 如果使用实时模式,操作会直接上报到服务器,并立即返回结果。 +4. 如果点数不足,将返回错误码50。 +5. 每次扣点操作都会记录在扣点记录表中,用于后续统计和审计。 + +### 3.3 游戏记录功能接口 + +#### 3.3.1 保存游戏积分 (cwyz-score-save) + +该接口用于保存玩家的游戏积分和相关游戏数据,同时可以获取游戏排行榜信息。 + +**请求命令**:`cwyz-score-save` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| cardId | string | 是 | 卡ID,用于关联用户 | +| score | int | 是 | 游戏得分 | +| gameLevel | string | 是 | 游戏关卡 | +| gameType | string | 是 | 游戏类型 | +| topLimit | int | 否 | 排行榜总数,默认为10 | +| gameDuration | int | 否 | 游戏时长(秒) | +| golds | int | 否 | 获得金币数量 | +| gemstone | int | 否 | 获得的未鉴定宝石数量 | +| playerIdx | int | 否 | 玩家索引,默认为1 | +| skinId | string | 否 | 皮肤ID | +| playerCount | int | 否 | 共同游戏的玩家数量,默认为1 | + +**请求示例**: + +```json +{ + "command": "cwyz-score-save", + "data": { + "cardId": "1234567890", + "score": 1500, + "gameLevel": "1", + "gameType": "standard", + "topLimit": 10, + "gameDuration": 300, + "golds": 50, + "gemstone": 2, + "playerIdx": 1, + "skinId": "skin_001", + "playerCount": 1 + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| gameType | string | 游戏类型 | +| leaderboards | object | 按游戏关卡分组的排行榜,key为游戏关卡 | + +**leaderboards对象内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| rank | int | 用户在此排行榜中的排名 | +| score | int | 用户在此排行榜中的积分 | +| gameLevel | string | 游戏关卡 | +| records | array | 排行榜记录列表 | + +**records数组内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| id | int | 记录ID | +| cardId | string | 卡ID | +| userName | string | 用户名称 | +| score | int | 游戏得分 | +| gameDuration | int | 游戏时长(秒) | +| playTime | string | 游戏时间(格式化字符串) | +| gameLevel | string | 游戏关卡 | +| gameType | string | 游戏类型 | +| skinId | string | 皮肤ID | +| playerCount | int | 共同游戏的玩家数量 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "cwyz-score-save", + "data": { + "gameType": "standard", + "leaderboards": { + "1": { + "rank": 3, + "score": 1500, + "gameLevel": "1", + "records": [ + { + "id": 123, + "cardId": "9876543210", + "userName": "玩家088", + "score": 2000, + "gameDuration": 300, + "playTime": "2025-05-28 14:30:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_001", + "playerCount": 1 + }, + { + "id": 124, + "cardId": "8765432109", + "userName": "玩家072", + "score": 1800, + "gameDuration": 280, + "playTime": "2025-05-28 15:20:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_002", + "playerCount": 1 + }, + { + "id": 125, + "cardId": "1234567890", + "userName": "玩家001", + "score": 1500, + "gameDuration": 260, + "playTime": "2025-05-28 16:10:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_003", + "playerCount": 1 + } + ] + } + } + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(必填参数缺失) | +| 20 | 数据库错误(保存积分失败) | +| 40 | 用户不存在 | + +**备注**: +1. 如果提供了金币(golds)参数且大于0,系统会自动调用保存金币记录的功能。 +2. 如果提供了宝石(gemstone)参数且大于0,系统会自动调用保存宝石记录的功能。 +3. 积分数据会根据游戏类型和游戏关卡进行分类,便于后续查询。 +4. 响应中的排行榜数据包含当前用户的排名和指定数量的最高分记录。 +5. 如果用户卡ID不存在,系统会尝试创建一个游客记录。 + +#### 3.3.2 获取游戏排行榜 (cwyz-query-score-top) + +该接口用于获取游戏排行榜信息。 + +**请求命令**:`cwyz-query-score-top` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| gameType | string | 是 | 游戏类型 | +| gameLevel | string | 否 | 游戏关卡,不传则返回所有关卡的排行榜 | +| topLimit | int | 否 | 需要查询的排行榜条数,默认为10 | +| isGlobal | bool | 否 | 是否获取全网排名,默认为false(即默认获取本地排名) | + +**请求示例**: + +```json +{ + "command": "cwyz-query-score-top", + "data": { + "gameType": "standard", + "gameLevel": "1", + "topLimit": 10, + "isGlobal": false + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| gameType | string | 游戏类型 | +| leaderboards | object | 按游戏关卡分组的排行榜,key为游戏关卡 | + +**leaderboards对象内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| rank | int | 用户在此排行榜中的排名 | +| score | int | 用户在此排行榜中的积分 | +| gameLevel | string | 游戏关卡 | +| records | array | 排行榜记录列表 | + +**records数组内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| id | int | 记录ID | +| cardId | string | 卡ID | +| userName | string | 用户名称 | +| score | int | 游戏得分 | +| gameDuration | int | 游戏时长(秒) | +| playTime | string | 游戏时间(格式化字符串) | +| gameLevel | string | 游戏关卡 | +| gameType | string | 游戏类型 | +| skinId | string | 皮肤ID | +| playerCount | int | 共同游戏的玩家数量 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "cwyz-query-score-top", + "data": { + "gameType": "standard", + "leaderboards": { + "1": { + "rank": 3, + "score": 1500, + "gameLevel": "1", + "records": [ + { + "id": 123, + "cardId": "9876543210", + "userName": "玩家088", + "score": 2000, + "gameDuration": 300, + "playTime": "2025-05-28 14:30:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_001", + "playerCount": 1 + }, + { + "id": 124, + "cardId": "8765432109", + "userName": "玩家072", + "score": 1800, + "gameDuration": 280, + "playTime": "2025-05-28 15:20:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_002", + "playerCount": 1 + }, + { + "id": 125, + "cardId": "1234567890", + "userName": "玩家001", + "score": 1500, + "gameDuration": 260, + "playTime": "2025-05-28 16:10:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_003", + "playerCount": 1 + } + ] + } + } + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(必填参数缺失) | +| 20 | 数据库错误(获取排行榜失败) | +| 40 | 用户不存在 | + +**备注**: +1. 排行榜数据包含当前用户的排名和指定数量的最高分记录。 +2. 如果用户卡ID不存在,系统会尝试创建一个游客记录。 + +#### 3.3.3 获取游戏时长排行榜 (cwyz-query-duration-top) + +该接口用于获取游戏时长排行榜信息。 + +**请求命令**:`cwyz-query-duration-top` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| gameType | string | 是 | 游戏类型 | +| gameLevel | string | 否 | 游戏关卡,不传则返回所有关卡的排行榜 | +| topLimit | int | 否 | 需要查询的排行榜条数,默认为10 | +| isGlobal | bool | 否 | 是否获取全网排名,默认为false(即默认获取本地排名) | + +**请求示例**: + +```json +{ + "command": "cwyz-query-duration-top", + "data": { + "gameType": "standard", + "gameLevel": "1", + "topLimit": 10, + "isGlobal": false + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| gameType | string | 游戏类型 | +| leaderboards | object | 按游戏关卡分组的排行榜,key为游戏关卡 | + +**leaderboards对象内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| rank | int | 用户在此排行榜中的排名 | +| duration | int | 用户在此排行榜中的游戏时长(秒) | +| gameLevel | string | 游戏关卡 | +| records | array | 排行榜记录列表 | + +**records数组内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| id | int | 记录ID | +| cardId | string | 卡ID | +| userName | string | 用户名称 | +| score | int | 游戏得分 | +| gameDuration | int | 游戏时长(秒) | +| playTime | string | 游戏时间(格式化字符串) | +| gameLevel | string | 游戏关卡 | +| gameType | string | 游戏类型 | +| skinId | string | 皮肤ID | +| playerCount | int | 共同游戏的玩家数量 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "cwyz-query-duration-top", + "data": { + "gameType": "standard", + "leaderboards": { + "1": { + "rank": 2, + "duration": 280, + "gameLevel": "1", + "records": [ + { + "id": 123, + "cardId": "9876543210", + "userName": "玩家088", + "score": 1800, + "gameDuration": 320, + "playTime": "2025-05-28 14:30:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_001", + "playerCount": 1 + }, + { + "id": 124, + "cardId": "1234567890", + "userName": "玩家001", + "score": 1500, + "gameDuration": 280, + "playTime": "2025-05-28 15:20:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_002", + "playerCount": 1 + }, + { + "id": 125, + "cardId": "8765432109", + "userName": "玩家072", + "score": 1200, + "gameDuration": 240, + "playTime": "2025-05-28 16:10:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_003", + "playerCount": 1 + } + ] + } + } + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(游戏类型为空) | +| 20 | 数据库错误(获取排行榜失败) | + +**备注**: +1. 该接口专门用于获取按游戏时长排序的排行榜。 +2. 排行榜数据按游戏时长降序排列。 +3. 如果设置isGlobal为true,将获取全网的排行榜数据,可能需要更长的响应时间。 + +#### 3.3.4 统一获取游戏排行榜 (cwyz-query-top) + +该接口统一了获取积分排行榜和时长排行榜的功能,通过topType参数区分不同类型的排行榜。 + +**请求命令**:`cwyz-query-top` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| gameType | string | 是 | 游戏类型 | +| gameLevel | string | 否 | 游戏关卡,不传则返回所有关卡的排行榜 | +| topLimit | int | 否 | 需要查询的排行榜条数,默认为10 | +| topType | int | 是 | 排行榜类型:0=积分排行榜,1=时长排行榜 | +| isGlobal | bool | 否 | 是否获取全网排名,默认为false(即默认获取本地排名) | + +**请求示例**: + +```json +{ + "command": "cwyz-query-top", + "data": { + "gameType": "standard", + "gameLevel": "1", + "topLimit": 10, + "topType": 0, + "isGlobal": false + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| gameType | string | 游戏类型 | +| topType | int | 排行榜类型:0=积分排行榜,1=时长排行榜 | +| leaderboards | object | 按游戏关卡分组的排行榜,key为游戏关卡 | + +**leaderboards对象内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| rank | int | 用户在此排行榜中的排名 | +| score | int | 用户在此排行榜中的积分(当topType=0时有效) | +| duration | int | 用户在此排行榜中的游戏时长(当topType=1时有效) | +| gameLevel | string | 游戏关卡 | +| records | array | 排行榜记录列表 | + +**records数组内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| id | int | 记录ID | +| cardId | string | 卡ID | +| userName | string | 用户名称 | +| score | int | 游戏得分 | +| gameDuration | int | 游戏时长(秒) | +| playTime | string | 游戏时间(格式化字符串) | +| gameLevel | string | 游戏关卡 | +| gameType | string | 游戏类型 | +| skinId | string | 皮肤ID | +| playerCount | int | 共同游戏的玩家数量 | + +**响应示例(积分排行榜)**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "cwyz-query-top", + "data": { + "gameType": "standard", + "topType": 0, + "leaderboards": { + "1": { + "rank": 3, + "score": 1500, + "gameLevel": "1", + "records": [ + { + "id": 123, + "cardId": "9876543210", + "userName": "玩家088", + "score": 2000, + "gameDuration": 300, + "playTime": "2025-05-28 14:30:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_001", + "playerCount": 1 + }, + { + "id": 124, + "cardId": "8765432109", + "userName": "玩家072", + "score": 1800, + "gameDuration": 280, + "playTime": "2025-05-28 15:20:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_002", + "playerCount": 1 + }, + { + "id": 125, + "cardId": "1234567890", + "userName": "玩家001", + "score": 1500, + "gameDuration": 260, + "playTime": "2025-05-28 16:10:00", + "gameLevel": "1", + "gameType": "standard", + "skinId": "skin_003", + "playerCount": 1 + } + ] + } + } + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(游戏类型为空或排行榜类型无效) | +| 20 | 数据库错误(获取排行榜失败) | + +**备注**: +1. 该接口可以根据topType参数灵活获取不同类型的排行榜。 +2. 当topType=0时,排行榜按积分降序排列;当topType=1时,排行榜按游戏时长降序排列。 +3. 如果设置isGlobal为true,将获取全网的排行榜数据,可能需要更长的响应时间。 +4. 推荐使用该接口代替单独的积分排行榜和时长排行榜接口,提高代码复用性。 + +#### 3.3.5 保存出卡记录 (cwyz-outcard-save) + +该接口用于记录游戏中玩家获得卡片的信息。 + +**请求命令**:`cwyz-outcard-save` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| cardId | string | 是 | 卡ID,用于关联用户 | +| cardStar | int | 是 | 卡片星级 | +| cardType | string | 是 | 卡片类型 | +| cardName | string | 是 | 卡片名称 | +| gameType | string | 是 | 游戏类型 | +| playerIdx | int | 否 | 玩家索引,默认为1 | + +**请求示例**: + +```json +{ + "command": "cwyz-outcard-save", + "data": { + "cardId": "1234567890", + "cardStar": 4, + "cardType": "monster", + "cardName": "火焰龙", + "gameType": "standard", + "playerIdx": 1 + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| success | bool | 操作是否成功 | +| cardId | string | 卡ID | +| userName | string | 用户名称 | +| cardStar | int | 卡片星级 | +| cardType | string | 卡片类型 | +| cardName | string | 卡片名称 | +| drawTime | string | 出卡时间(格式化字符串) | +| playerIdx | int | 玩家索引 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "cwyz-outcard-save", + "data": { + "success": true, + "cardId": "1234567890", + "userName": "玩家001", + "cardStar": 4, + "cardType": "monster", + "cardName": "火焰龙", + "drawTime": "2025-05-28 16:30:45", + "playerIdx": 1 + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(必填参数缺失) | +| 20 | 数据库错误(保存出卡记录失败) | +| 40 | 用户不存在 | + +**备注**: +1. 出卡记录会保存在本地数据库中,并在网络可用时上传到服务器。 +2. 出卡时间使用服务器时间,确保统一性。 +3. 卡片星级通常为1-5,表示卡片的稀有程度。 +4. 卡片类型可以是游戏定义的任何类型,如"monster"、"magic"、"trap"等。 + +#### 3.3.6 保存硬币记账 (cwyz-coin-save) + +该接口用于记录玩家投币和消耗硬币的信息。 + +**请求命令**:`cwyz-coin-save` + +**请求参数**: + +| 参数名 | 类型 | 必填 | 说明 | +|-------|------|------|------| +| cardId | string | 是 | 卡ID,用于关联用户 | +| coinCount | int | 是 | 硬币数量 | +| type | int | 是 | 类型:1=投币,2=消耗 | +| playerIdx | int | 否 | 玩家索引,默认为1 | + +**请求示例**: + +```json +{ + "command": "cwyz-coin-save", + "data": { + "cardId": "1234567890", + "coinCount": 5, + "type": 1, + "playerIdx": 1 + } +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| success | bool | 操作是否成功 | +| cardId | string | 卡ID | +| userName | string | 用户名称 | +| coinCount | int | 硬币数量 | +| type | int | 操作类型:1=投币,2=消耗 | +| balance | int | 当前余额 | +| processTime | string | 处理时间(格式化字符串) | +| playerIdx | int | 玩家索引 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "cwyz-coin-save", + "data": { + "success": true, + "cardId": "1234567890", + "userName": "玩家001", + "coinCount": 5, + "type": 1, + "balance": 15, + "processTime": "2025-05-28 17:15:30", + "playerIdx": 1 + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 10 | 参数错误(必填参数缺失或硬币数量为0) | +| 20 | 数据库错误(保存硬币记录失败) | +| 40 | 用户不存在 | +| 50 | 余额不足(当type=2,消耗硬币时) | + +**备注**: +1. 硬币记账会记录玩家的投币和消耗情况,便于统计和分析。 +2. 类型为1表示投币(增加余额),类型为2表示消耗(减少余额)。 +3. 响应中的balance字段表示操作后的硬币余额。 +4. 如果是消耗操作且余额不足,将返回错误码50。 +5. 所有操作都会记录在硬币记账表中,用于后续统计和审计。 + +### 3.4 4G网络控制接口 + +#### 3.4.1 查询4G模块信息 (query-4g-info) + +该接口用于查询4G网络模块的详细信息,包括网络状态、信号强度、SIM卡信息等。 + +**请求命令**:`query-4g-info` + +**请求参数**: +无需参数 + +**请求示例**: + +```json +{ + "command": "query-4g-info", + "data": {} +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| mnc | string | 网络MNC码 | +| cid | string | 基站CID | +| lac | string | 位置区域码 | +| serialPort | string | 串口名称 | +| dbm | int | 信号强度 | +| revision | string | 模块固件版本 | +| sim | string | SIM卡ICCID | +| imsi | string | SIM卡IMSI | +| imei | string | 设备IMEI | +| ndisEnabled | bool | NDIS网卡状态 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "query-4g-info", + "data": { + "mnc": "01", + "cid": "123456", + "lac": "7890", + "serialPort": "COM3", + "dbm": -65, + "revision": "EG25GGBR07A08M2G", + "sim": "898600123456789012345", + "imsi": "460012345678901", + "imei": "862512345678901", + "ndisEnabled": true + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 80 | 4G模块不存在 | +| 81 | 4G模块通信错误 | + +**备注**: +1. 信号强度(dbm)通常在-50到-120之间,数值越大(越接近0)表示信号越强。 +2. ndisEnabled表示4G网卡是否启用,true表示已启用,false表示已禁用。 +3. 如果设备没有4G模块,将返回错误码80。 +4. 该接口仅查询信息,不会改变任何网络设置。 + +#### 3.4.2 禁用4G网络 (stop-4g-net) + +该接口用于禁用4G网络,可用于节省流量或解决网络冲突问题。 + +**请求命令**:`stop-4g-net` + +**请求参数**: +无需参数 + +**请求示例**: + +```json +{ + "command": "stop-4g-net", + "data": {} +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| success | bool | 操作是否成功 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "stop-4g-net", + "data": { + "success": true + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 80 | 4G模块不存在 | +| 81 | 4G模块通信错误 | +| 82 | 网络已经处于禁用状态 | + +**备注**: +1. 该接口会关闭4G网卡,停止所有网络通信。 +2. 操作成功后,设备将无法通过4G网络连接互联网,但可以通过其他网络接口(如WiFi、有线网络)连接。 +3. 4G网络禁用后,可通过start-4g-net接口重新启用。 +4. 如果设备没有4G模块,将返回错误码80。 + +#### 3.4.3 启用4G网络 (start-4g-net) + +该接口用于启用4G网络,恢复设备的移动网络连接。 + +**请求命令**:`start-4g-net` + +**请求参数**: +无需参数 + +**请求示例**: + +```json +{ + "command": "start-4g-net", + "data": {} +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| success | bool | 操作是否成功 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "start-4g-net", + "data": { + "success": true + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | +| 80 | 4G模块不存在 | +| 81 | 4G模块通信错误 | +| 83 | 网络已经处于启用状态 | +| 84 | SIM卡异常 | + +**备注**: +1. 该接口会启用4G网卡,恢复移动网络连接。 +2. 操作成功后,设备将能够通过4G网络连接互联网。 +3. 网络连接过程可能需要几秒到几十秒不等,取决于网络信号强度和运营商网络状况。 +4. 如果设备没有4G模块或SIM卡异常,将返回相应的错误码。 + +### 3.5 世宇接口状态 + +#### 3.5.1 检查世宇接口状态 (check-unis-net-state) + +该接口用于检查与世宇服务器的连接状态。 + +**请求命令**:`check-unis-net-state` + +**请求参数**: +无需参数 + +**请求示例**: + +```json +{ + "command": "check-unis-net-state", + "data": {} +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| state | int | 世宇网络连接状态: 0-断开连接 1-有线网络 2-4G网络 3-服务异常 4-系统异常 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "check-unis-net-state", + "data": { + "state": 1 + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | + +**网络状态代码说明**: + +| 网络状态码 | 描述 | 说明 | +|-----------|------|------| +| 0 | 网络断开 | 无网络连接 | +| 1 | 有线网络 | 有线网络连接正常且能访问世宇服务器 | +| 2 | 4G网络 | 4G网络连接正常且能访问世宇服务器 | +| 3 | 服务异常 | 网络连接正常但无法登录世宇服务器 | +| 4 | 系统异常 | 网络连接正常但无法获取登录凭证 | + +**备注**: +1. 该接口用于检查业务插件与世宇服务器的连接状态。 +2. 检查过程包括网络连接检测和世宇服务器登录尝试。 +3. 有线网络和4G网络状态表示网络连接正常且可成功登录世宇服务器。 +4. 服务异常表示网络连接正常但无法登录世宇服务器,可能是服务器问题。 +5. 系统异常表示网络连接正常但无法获取登录凭证,可能是配置问题。 + +#### 3.5.2 获取系统信息 (get-system-info) + +该接口用于获取系统综合信息,包括网络状态、版本信息、磁盘信息和剩余点数。 + +**请求命令**:`get-system-info` + +**请求参数**: +无需参数 + +**请求示例**: + +```json +{ + "command": "get-system-info", + "data": {} +} +``` + +**响应参数**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| networkState | int | 网络状态代码: 0-断开连接 1-有线网络 2-4G网络 3-服务异常 4-系统异常 | +| networkStateDesc | string | 网络状态描述文本 | +| versionInfo | object | 版本信息对象 | +| diskInfos | array | 磁盘信息数组 | +| remainingPoints | int | 剩余点数 | + +**versionInfo对象内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| gameVersion | string | 游戏版本 | +| updaterVersion | string | 更新器版本 | +| businessVersion | string | 业务模块版本 | +| consoleVersion | string | 控制台版本 | +| deviceId | string | 设备ID | + +**diskInfos数组内部结构**: + +| 参数名 | 类型 | 说明 | +|-------|------|------| +| driveLetter | string | 盘符 | +| freeSpace | string | 可用空间(格式化后的字符串) | +| totalSpace | string | 总空间(格式化后的字符串) | +| usedSpace | string | 已用空间(格式化后的字符串) | +| freePercent | float | 可用空间百分比 | + +**响应示例**: + +```json +{ + "result": true, + "errMsg": "", + "statusCode": 0, + "command": "get-system-info", + "data": { + "networkState": 1, + "networkStateDesc": "有线网络", + "versionInfo": { + "gameVersion": "1.0.5", + "updaterVersion": "1.2.0", + "businessVersion": "1.1.0", + "consoleVersion": "1.0.8", + "deviceId": "ABCDEF123456" + }, + "diskInfos": [ + { + "driveLetter": "C:", + "freeSpace": "50.5 GB", + "totalSpace": "100 GB", + "usedSpace": "49.5 GB", + "freePercent": 50.5 + }, + { + "driveLetter": "D:", + "freeSpace": "120 GB", + "totalSpace": "500 GB", + "usedSpace": "380 GB", + "freePercent": 24.0 + } + ], + "remainingPoints": 100 + } +} +``` + +**错误码说明**: + +| 状态码 | 说明 | +|-------|------| +| 0 | 成功 | +| 1 | 通用错误 | + +**备注**: +1. 该接口汇总了系统的多项信息,便于快速了解系统状态。 +2. 网络状态检测逻辑与check-unis-net-state接口保持一致。 +3. 版本信息通过向更新器发送get-version-info指令获取。 +4. 磁盘信息按盘符字母顺序排列。 +5. 剩余点数与get-remaining-points接口返回的值一致。