diff --git a/ladder-api.md b/ladder-api.md new file mode 100644 index 0000000..fea2c8c --- /dev/null +++ b/ladder-api.md @@ -0,0 +1,211 @@ +# 天梯系统API接口文档 + +## 概述 + +天梯系统API提供与玩家天梯等级、排行榜相关的接口。系统支持基于星星数的等级升降机制和王者分数机制。 + +## 接口列表 + +### 1. 获取排行榜 + +#### 接口地址 +``` +GET /ladder/leaderboard +``` + +#### 请求参数 +无 + +#### 响应数据 +```json +[ + { + "playerId": "string", // 玩家ID + "username": "string", // 玩家用户名 + "avatar": "string", // 玩家头像 + "rankId": "number", // 天梯等级ID + "rankScore": "number", // 王者分数(如果适用) + "stars": "number", // 星星数(如果适用) + "totalWins": "number", // 总胜利场次 + "position": "number" // 排名位置 + } +] +``` + +#### 响应示例 +```json +[ + { + "playerId": "5f1a2b3c4d5e6f7g8h9i0j1k", + "username": "Player1", + "avatar": "avatar_01", + "rankId": 5, + "rankScore": 1250, + "stars": 0, + "totalWins": 128, + "position": 1 + } +] +``` + +### 2. 获取玩家排名位置 + +#### 接口地址 +``` +GET /ladder/position/:playerId +``` + +#### 请求参数 +| 参数名 | 类型 | 必填 | 说明 | +| --------- | ------ | ---- | ------ | +| playerId | string | 是 | 玩家ID | + +#### 响应数据 +```json +{ + "position": "number" // 玩家在排行榜中的位置,未上榜为null +} +``` + +#### 响应示例 +```json +{ + "position": 5 +} +``` + +### 3. 获取玩家天梯信息 + +#### 接口地址 +``` +GET /ladder/rank/:playerId +``` + +#### 请求参数 +| 参数名 | 类型 | 必填 | 说明 | +| --------- | ------ | ---- | ------ | +| playerId | string | 是 | 玩家ID | + +#### 响应数据 +对于开启王者分数机制的玩家: +```json +{ + "rankName": "string", // 天梯阶级名称 + "level": "number", // 天梯等级 + "score": "number", // 王者分数 + "isRankScore": "boolean" // 是否为王者分数机制 +} +``` + +对于普通星星机制的玩家: +```json +{ + "rankName": "string", // 天梯阶级名称 + "level": "number", // 天梯等级 + "stars": "number", // 当前星星数 + "maxStars": "number", // 最大星星数 + "isRankScore": "boolean" // 是否为王者分数机制 +} +``` + +#### 响应示例 +```json +{ + "rankName": "Gold", + "level": 5, + "score": 1250, + "isRankScore": true +} +``` + +### 4. 获取所有天梯配置 + +#### 接口地址 +``` +GET /ladder/config +``` + +#### 请求参数 +无 + +#### 响应数据 +```json +[ + { + "Id": "number", // 天梯ID + "Rank": "number", // 天梯阶级 + "RankName": "string", // 天梯阶级名称 + "Level": "number", // 天梯等级 + "BeginStar": "number", // 升级后初始星星数 + "RankDownStar": "number", // 降级后初始星星数 + "MaxStar": "number", // 当前等级的星星上限 + "WinGetStar": "number", // 胜利时增加的星星数 + "ExtraGetStar": "number", // 连胜时额外增加的星星数 + "LoseLostStar": "number", // 是否失败时减少星星(1为是,0为否) + "LoseRankDown": "number", // 是否失败导致等级下降(1为是,0为否) + "RankScore": "number", // 是否开启天梯分数机制(1为开启) + "AITimes": "number", // 等待多久后改为对战机器人 + "AIDeck": "string", // 机器人卡组的RANK配置 + "WaitTime": "number", // 扩大匹配范围的时间间隔 + "MaxWaitTime": "number" // 王者等级匹配时,扩大分数范围的间隔 + } +] +``` + +#### 响应示例 +```json +[ + { + "Id": 1, + "Rank": 1, + "RankName": "Bronze", + "Level": 1, + "BeginStar": 0, + "RankDownStar": 0, + "MaxStar": 5, + "WinGetStar": 1, + "ExtraGetStar": 0, + "LoseLostStar": 1, + "LoseRankDown": 0, + "RankScore": 0, + "AITimes": 30, + "AIDeck": "bronze_ai", + "WaitTime": 10, + "MaxWaitTime": 20 + } +] +``` + +## 错误响应格式 + +所有接口在出错时都会返回以下格式的错误信息: + +```json +{ + "error": "string" // 错误描述 +} +``` + +## 天梯系统机制说明 + +### 星星机制 +- 玩家通过胜利获得星星,失败可能失去星星 +- 当星星数达到当前等级上限时,玩家升级 +- 当星星数为0且再次失败时,可能降级 + +### 王者分数机制 +- 当玩家达到特定等级后开启王者分数机制 +- 不再使用星星和等级升降,天梯等级固定 +- 玩家首次进入该等级时,获得1000分的初始天梯分数 +- 胜利加分规则: + - 若对手分数 > 玩家分数:加分 = MIN(对手分数 / 玩家分数, 3) * 20 + - 若玩家分数 >= 对手分数:加20分 + - 若对手未开启天梯分数:加20分 +- 失败减分规则: + - 若失败方已有天梯分数:减20分(最低为0分) + - 若失败方未开启天梯分数:根据配置决定是否扣除1颗星星 + +### 排行榜规则 +- 展示天梯等级最高的前100名玩家 +- 排名优先级:天梯等级 > 天梯分数 > 当前天梯星星数 > 玩家胜场数 +- 每天的00:00、12:00、18:00、22:00四个时间点刷新排行榜 \ No newline at end of file