919 lines
14 KiB
Markdown
919 lines
14 KiB
Markdown
# 游戏云函数 API 文档
|
||
|
||
## 📋 概述
|
||
|
||
本文档详细说明了游戏云函数的所有可用接口,包括认证、数据管理、英雄系统、库存管理等功能。
|
||
|
||
## 🏗️ 项目结构
|
||
|
||
```
|
||
cocos_cloud/
|
||
├── index.js # 路由入口文件
|
||
├── user_init_data.js # 用户初始化数据配置
|
||
├── modules/ # 功能模块目录
|
||
│ ├── auth.js # 认证模块
|
||
│ ├── gameData.js # 基础游戏数据模块
|
||
│ ├── fightHeros.js # 出战英雄模块
|
||
│ ├── heros.js # 英雄管理模块
|
||
│ ├── inventory.js # 库存管理模块
|
||
│ └── response.js # 响应处理模块
|
||
├── README.md # 项目说明文档
|
||
└── API.md # API接口文档
|
||
```
|
||
|
||
## 🚀 通用调用格式
|
||
|
||
```javascript
|
||
wx.cloud.callFunction({
|
||
name: 'cocos_cloud',
|
||
data: {
|
||
cmd: '命令名',
|
||
// 其他参数...
|
||
}
|
||
}).then(res => {
|
||
console.log('调用结果:', res.result);
|
||
}).catch(err => {
|
||
console.error('调用失败:', err);
|
||
});
|
||
```
|
||
|
||
## 📊 通用响应格式
|
||
|
||
```javascript
|
||
{
|
||
code: 200, // 状态码 (200=成功, 负数=错误)
|
||
msg: "Success", // 响应消息
|
||
data: { /* 返回数据 */ }, // 具体数据
|
||
timestamp: 1234567890, // 时间戳
|
||
version: "1.0.0", // 数据版本
|
||
execution_time: 50 // 执行时间(ms)
|
||
}
|
||
```
|
||
|
||
## 🔐 认证相关接口
|
||
|
||
### 1. 用户登录
|
||
获取用户完整信息和游戏数据。
|
||
|
||
```javascript
|
||
// 请求
|
||
{ cmd: 'login' }
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
user_id: "用户ID",
|
||
openid: "微信OpenID",
|
||
regist_time: 1234567890,
|
||
data: { /* 基础游戏数据 */ },
|
||
fight_heros: { /* 出战英雄配置 */ },
|
||
heros: { /* 英雄属性数据 */ },
|
||
items: { /* 道具数据 */ },
|
||
tals: { /* 天赋数据 */ },
|
||
equips: { /* 装备数据 */ },
|
||
data_version: "1.0.0",
|
||
last_save_time: 1234567890
|
||
}
|
||
}
|
||
```
|
||
|
||
### 2. 获取用户信息
|
||
获取用户基本信息(不包含游戏数据)。
|
||
|
||
```javascript
|
||
// 请求
|
||
{ cmd: 'user_info' }
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
user_id: "用户ID",
|
||
openid: "微信OpenID",
|
||
regist_time: 1234567890,
|
||
init_time: 1234567890,
|
||
data_version: "1.0.0",
|
||
last_save_time: 1234567890
|
||
}
|
||
}
|
||
```
|
||
|
||
### 3. 检查版本信息
|
||
检查用户数据版本兼容性。
|
||
|
||
```javascript
|
||
// 请求
|
||
{ cmd: 'version' }
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
user_version: "1.0.0",
|
||
current_version: "1.1.0",
|
||
compatibility: {
|
||
compatible: true,
|
||
needsUpgrade: true,
|
||
message: "Minor version update available"
|
||
},
|
||
init_time: 1234567890,
|
||
regist_time: 1234567890,
|
||
last_save_time: 1234567890
|
||
}
|
||
}
|
||
```
|
||
|
||
### 4. 强制升级数据
|
||
手动触发用户数据结构升级。
|
||
|
||
```javascript
|
||
// 请求
|
||
{ cmd: 'upgrade' }
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
old_version: "1.0.0",
|
||
new_version: "1.1.0",
|
||
upgrade_time: 1234567890,
|
||
// ... 升级后的完整数据
|
||
}
|
||
}
|
||
```
|
||
|
||
## 🎮 基础游戏数据接口
|
||
|
||
### 1. 获取游戏数据
|
||
获取用户的基础游戏数据(金币、钻石、经验等)。
|
||
|
||
```javascript
|
||
// 请求
|
||
{ cmd: 'data_get' }
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
score: 0,
|
||
mission: 1,
|
||
gold: 100,
|
||
diamond: 100,
|
||
meat: 0,
|
||
exp: 0,
|
||
// ... 更多字段
|
||
}
|
||
}
|
||
```
|
||
|
||
### 2. 更新游戏数据
|
||
批量更新基础游戏数据。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'data_update',
|
||
data: {
|
||
gold: 1000,
|
||
diamond: 200,
|
||
exp: 500
|
||
},
|
||
merge: true // 可选,默认true(合并更新)
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
// 更新后的完整数据
|
||
}
|
||
}
|
||
```
|
||
|
||
### 3. 增加指定字段
|
||
增加某个字段的数值。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'data_add',
|
||
field: 'gold',
|
||
amount: 100
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
field: 'gold',
|
||
old_value: 1000,
|
||
new_value: 1100,
|
||
change: 100
|
||
}
|
||
}
|
||
```
|
||
|
||
### 4. 消耗指定字段
|
||
消耗某个字段的数值(会检查是否足够)。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'data_spend',
|
||
field: 'gold',
|
||
amount: 50
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
field: 'gold',
|
||
old_value: 1100,
|
||
new_value: 1050,
|
||
change: -50
|
||
}
|
||
}
|
||
```
|
||
|
||
### 5. 设置指定字段
|
||
直接设置某个字段的值。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'data_set',
|
||
field: 'mission',
|
||
value: 5
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
field: 'mission',
|
||
old_value: 1,
|
||
new_value: 5
|
||
}
|
||
}
|
||
```
|
||
|
||
### 6. 重置游戏数据
|
||
重置基础游戏数据为默认值。
|
||
|
||
```javascript
|
||
// 请求
|
||
{ cmd: 'data_reset' }
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
// 重置后的默认数据
|
||
}
|
||
}
|
||
```
|
||
|
||
## ⚔️ 出战英雄接口
|
||
|
||
### 1. 获取出战英雄配置
|
||
获取当前的出战英雄配置。
|
||
|
||
```javascript
|
||
// 请求
|
||
{ cmd: 'fight_heros_get' }
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
0: 5001, // 位置0: 英雄5001
|
||
1: 5005, // 位置1: 英雄5005
|
||
2: 0, // 位置2: 空
|
||
3: 0, // 位置3: 空
|
||
4: 0 // 位置4: 空
|
||
}
|
||
}
|
||
```
|
||
|
||
### 2. 设置单个出战英雄
|
||
设置指定位置的出战英雄。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'fight_hero_set',
|
||
position: 2,
|
||
hero_id: 5007
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
position: 2,
|
||
old_hero_id: 0,
|
||
new_hero_id: 5007
|
||
}
|
||
}
|
||
```
|
||
|
||
### 3. 批量更新出战英雄
|
||
批量更新多个位置的出战英雄。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'fight_heros_update',
|
||
fight_heros: {
|
||
0: 5001,
|
||
1: 5005,
|
||
2: 5007
|
||
}
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
// 更新后的完整出战配置
|
||
}
|
||
}
|
||
```
|
||
|
||
### 4. 获取激活的出战英雄
|
||
获取当前出战的英雄列表(不包含空位)。
|
||
|
||
```javascript
|
||
// 请求
|
||
{ cmd: 'fight_heros_active' }
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
active_heros: [
|
||
{
|
||
position: 0,
|
||
hero_id: 5001,
|
||
hero_data: { /* 英雄详细数据 */ }
|
||
},
|
||
{
|
||
position: 1,
|
||
hero_id: 5005,
|
||
hero_data: { /* 英雄详细数据 */ }
|
||
}
|
||
],
|
||
total_count: 2
|
||
}
|
||
}
|
||
```
|
||
|
||
### 5. 交换出战英雄位置
|
||
交换两个位置的英雄。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'fight_heros_swap',
|
||
position1: 0,
|
||
position2: 2
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
position1: 0,
|
||
position2: 2,
|
||
hero1_moved_to: 5007,
|
||
hero2_moved_to: 5001
|
||
}
|
||
}
|
||
```
|
||
|
||
### 6. 重置出战英雄
|
||
重置出战英雄配置为默认值。
|
||
|
||
```javascript
|
||
// 请求
|
||
{ cmd: 'fight_heros_reset' }
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
// 重置后的默认配置
|
||
}
|
||
}
|
||
```
|
||
|
||
## 🦸 英雄管理接口
|
||
|
||
### 1. 获取所有英雄
|
||
获取用户拥有的所有英雄数据。
|
||
|
||
```javascript
|
||
// 请求
|
||
{ cmd: 'heros_get' }
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
5001: { uuid: 5001, lv: 10, exp: 500, star: 2, power: 150 },
|
||
5005: { uuid: 5005, lv: 8, exp: 300, star: 1, power: 120 },
|
||
5007: { uuid: 5007, lv: 1, exp: 0, star: 1, power: 90 }
|
||
}
|
||
}
|
||
```
|
||
|
||
### 2. 获取单个英雄
|
||
获取指定英雄的详细数据。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'hero_get',
|
||
hero_id: 5001
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
uuid: 5001,
|
||
lv: 10,
|
||
exp: 500,
|
||
star: 2,
|
||
power: 150
|
||
}
|
||
}
|
||
```
|
||
|
||
### 3. 添加新英雄
|
||
添加新英雄到用户库存。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'hero_add',
|
||
hero_id: 5008,
|
||
hero_data: { // 可选,不提供则使用默认数据
|
||
lv: 1,
|
||
exp: 0,
|
||
star: 1,
|
||
power: 110
|
||
}
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
uuid: 5008,
|
||
lv: 1,
|
||
exp: 0,
|
||
star: 1,
|
||
power: 110
|
||
}
|
||
}
|
||
```
|
||
|
||
### 4. 更新英雄属性
|
||
批量更新英雄的多个属性。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'hero_update',
|
||
hero_id: 5001,
|
||
update_data: {
|
||
lv: 15,
|
||
exp: 800,
|
||
star: 3
|
||
}
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
old_data: { /* 更新前的数据 */ },
|
||
new_data: { /* 更新后的数据 */ }
|
||
}
|
||
}
|
||
```
|
||
|
||
### 5. 设置英雄单个属性
|
||
设置英雄的单个属性值。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'hero_property_set',
|
||
hero_id: 5001,
|
||
property: 'lv',
|
||
value: 20
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
hero_id: 5001,
|
||
property: 'lv',
|
||
old_value: 15,
|
||
new_value: 20
|
||
}
|
||
}
|
||
```
|
||
|
||
### 6. 英雄升级
|
||
英雄升级指定级数。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'hero_levelup',
|
||
hero_id: 5001,
|
||
levels: 3 // 可选,默认1级
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
hero_id: 5001,
|
||
property: 'lv',
|
||
old_value: 20,
|
||
new_value: 23
|
||
}
|
||
}
|
||
```
|
||
|
||
### 7. 删除英雄
|
||
删除指定英雄(会检查是否在出战阵容中)。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'hero_delete',
|
||
hero_id: 5008
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
// 被删除的英雄数据
|
||
}
|
||
}
|
||
```
|
||
|
||
### 8. 获取拥有的英雄ID列表
|
||
获取用户拥有的所有英雄ID。
|
||
|
||
```javascript
|
||
// 请求
|
||
{ cmd: 'heros_owned' }
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
hero_ids: [5001, 5005, 5007],
|
||
total_count: 3
|
||
}
|
||
}
|
||
```
|
||
|
||
## 🎒 库存管理接口
|
||
|
||
库存管理接口支持三种类型的数据:
|
||
- `items`: 道具
|
||
- `tals`: 天赋
|
||
- `equips`: 装备
|
||
|
||
### 1. 获取库存数据
|
||
获取指定类型的所有库存数据。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'inventory_get',
|
||
type: 'items' // 'items', 'tals', 'equips'
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
1001: 5, // 道具1001: 5个
|
||
1002: 3, // 道具1002: 3个
|
||
1003: 0, // 道具1003: 0个
|
||
// ...
|
||
}
|
||
}
|
||
```
|
||
|
||
### 2. 获取单个物品
|
||
获取指定物品的数量。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'inventory_item_get',
|
||
type: 'items',
|
||
item_id: 1001
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
item_id: 1001,
|
||
count: 5
|
||
}
|
||
}
|
||
```
|
||
|
||
### 3. 添加物品
|
||
增加指定物品的数量。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'inventory_item_add',
|
||
type: 'items',
|
||
item_id: 1001,
|
||
count: 10
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
item_id: 1001,
|
||
old_count: 5,
|
||
new_count: 15,
|
||
added: 10
|
||
}
|
||
}
|
||
```
|
||
|
||
### 4. 消耗物品
|
||
消耗指定数量的物品(会检查是否足够)。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'inventory_item_consume',
|
||
type: 'items',
|
||
item_id: 1001,
|
||
count: 3
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
item_id: 1001,
|
||
old_count: 15,
|
||
new_count: 12,
|
||
added: -3
|
||
}
|
||
}
|
||
```
|
||
|
||
### 5. 设置物品数量
|
||
直接设置物品的数量。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'inventory_item_set',
|
||
type: 'items',
|
||
item_id: 1001,
|
||
count: 20
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
item_id: 1001,
|
||
old_count: 12,
|
||
new_count: 20
|
||
}
|
||
}
|
||
```
|
||
|
||
### 6. 批量更新库存
|
||
批量更新多个物品的数量。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'inventory_update',
|
||
type: 'items',
|
||
data: {
|
||
1001: 25,
|
||
1002: 10,
|
||
1003: 5
|
||
},
|
||
merge: true // 可选,默认true(合并更新)
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
// 更新后的完整库存数据
|
||
}
|
||
}
|
||
```
|
||
|
||
### 7. 重置库存
|
||
重置指定类型的库存为默认值。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'inventory_reset',
|
||
type: 'items'
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
// 重置后的默认库存数据
|
||
}
|
||
}
|
||
```
|
||
|
||
### 8. 获取拥有的物品
|
||
获取数量大于0的物品列表。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'inventory_owned',
|
||
type: 'items'
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
owned_items: [
|
||
{ item_id: 1001, count: 25 },
|
||
{ item_id: 1002, count: 10 },
|
||
{ item_id: 1003, count: 5 }
|
||
],
|
||
total_types: 3
|
||
}
|
||
}
|
||
```
|
||
|
||
## 🔄 兼容旧接口
|
||
|
||
为了保持向后兼容,保留了一些旧接口:
|
||
|
||
### 1. 加载数据 (兼容)
|
||
等同于 `login` 命令。
|
||
|
||
```javascript
|
||
// 请求
|
||
{ cmd: 'load' }
|
||
|
||
// 响应:与login相同
|
||
```
|
||
|
||
### 2. 保存数据 (兼容)
|
||
批量保存多种类型的数据。
|
||
|
||
```javascript
|
||
// 请求
|
||
{
|
||
cmd: 'save',
|
||
data: {
|
||
data: { gold: 1000, diamond: 200 },
|
||
fight_heros: { 0: 5001, 1: 5005 },
|
||
heros: { 5001: { lv: 10, exp: 500 } },
|
||
items: { 1001: 10, 1002: 5 },
|
||
tals: { 1001: 1 },
|
||
equips: { 1001: 2 }
|
||
}
|
||
}
|
||
|
||
// 响应
|
||
{
|
||
code: 200,
|
||
data: {
|
||
results: [
|
||
// 各个模块的保存结果
|
||
]
|
||
},
|
||
msg: "All data saved successfully"
|
||
}
|
||
```
|
||
|
||
## ❌ 错误码说明
|
||
|
||
| 错误码 | 说明 | 示例 |
|
||
|-------|------|------|
|
||
| 200 | 成功 | 操作成功完成 |
|
||
| -1 | 操作失败 | 数据库更新失败 |
|
||
| -2 | 未知命令 | 命令不存在 |
|
||
| -3 | 参数错误 | 缺少必需参数或参数格式错误 |
|
||
| -4 | 用户未找到 | 用户不存在或创建失败 |
|
||
| -5 | 系统错误 | 服务器内部错误 |
|
||
| -6 | 资源不足 | 金币、道具等资源不够 |
|
||
| -7 | 资源已存在 | 英雄已存在等 |
|
||
| -8 | 操作被拒绝 | 英雄正在出战中无法删除等 |
|
||
|
||
## 📝 使用示例
|
||
|
||
### 完整的游戏流程示例
|
||
|
||
```javascript
|
||
// 1. 用户登录
|
||
wx.cloud.callFunction({
|
||
name: 'cocos_cloud',
|
||
data: { cmd: 'login' }
|
||
}).then(res => {
|
||
console.log('用户登录成功:', res.result.data);
|
||
|
||
// 2. 增加金币
|
||
return wx.cloud.callFunction({
|
||
name: 'cocos_cloud',
|
||
data: {
|
||
cmd: 'data_add',
|
||
field: 'gold',
|
||
amount: 100
|
||
}
|
||
});
|
||
}).then(res => {
|
||
console.log('金币增加成功:', res.result.data);
|
||
|
||
// 3. 添加新英雄
|
||
return wx.cloud.callFunction({
|
||
name: 'cocos_cloud',
|
||
data: {
|
||
cmd: 'hero_add',
|
||
hero_id: 5008
|
||
}
|
||
});
|
||
}).then(res => {
|
||
console.log('英雄添加成功:', res.result.data);
|
||
|
||
// 4. 设置出战英雄
|
||
return wx.cloud.callFunction({
|
||
name: 'cocos_cloud',
|
||
data: {
|
||
cmd: 'fight_hero_set',
|
||
position: 2,
|
||
hero_id: 5008
|
||
}
|
||
});
|
||
}).then(res => {
|
||
console.log('出战英雄设置成功:', res.result.data);
|
||
}).catch(err => {
|
||
console.error('操作失败:', err);
|
||
});
|
||
```
|
||
|
||
## 🔧 开发调试
|
||
|
||
### 1. 启用调试日志
|
||
在开发环境中,云函数会输出详细的调试日志:
|
||
|
||
```javascript
|
||
// 请求日志
|
||
[data_add] Request from oxxx: { field: 'gold', amount: 100 }
|
||
|
||
// 响应日志
|
||
[data_add] Response (45ms): 200 gold updated successfully
|
||
```
|
||
|
||
### 2. 性能监控
|
||
每个响应都包含 `execution_time` 字段,显示接口执行时间。
|
||
|
||
### 3. 版本管理
|
||
使用 `version` 命令检查数据版本兼容性,确保客户端和服务端数据结构一致。
|
||
|
||
---
|
||
|
||
**版本**: 1.0.0
|
||
**更新时间**: 2024年
|
||
**维护者**: 游戏开发团队
|
||
|
||
|
||
|
||
|
||
|
||
|