furic / 排行榜
RESTful API,用于提供排行榜服务和将分数报告给客户端应用程序。
Requires
- php: ^7.2
- furic/game-essentials: ^1.0
- laravel/framework: ~5.8||~6.0||~7.0||~8.0
README
Laravel 5.* 的排行榜管理。此包是在为 Sweaty Chair Studio 中的排行榜解决方案工作时开发的,为玩家提供排行榜。这包括用于读取每日、每周、每月或所有时间的排行榜的 RESTful API,将玩家的分数报告给服务器,以及获取最高排名的奖励。
有两种类型的排行榜
- 高分:标准排行榜,每个玩家在指定期间只有一个最高分。
- 得分总和:汇总每个玩家报告的所有得分的排行榜,例如在指定期间收集最多游戏内物品的季节性活动。
Web 控制台在待办事项列表中。同时,您需要手动在数据库中设置排行榜。
目录
安装
使用 Composer 安装此包
$ composer require furic/leaderboards
如果您正在使用 Laravel 5.5 或更高版本,则安装已完成。否则,请按照以下步骤操作。
打开 config/app.php
并按照以下步骤操作
找到 providers
数组并添加我们的服务提供程序。
'providers' => [ // ... Furic\Leaderboards\LeaderboardsServiceProvider::class ],
配置
要创建数据库中的兑换代码表,请运行以下命令
$ php artisan migrate
用法
排行榜表
| Name | Type | Not Null |
|-----------------|-----------|----------|
| id | integer | ✓ |
| game_id | integer | ✓ |
| timescope | tinyint | ✓ |
| sum_score | boolean | ✓ |
排行榜设置,您需要手动设置此内容。
- 游戏 ID:此排行榜属于哪个游戏。
- 时间范围:排行榜的重复周期:0:所有时间,1 - 每日,2 - 每周,3 - 每月。
- 得分总和:是否应汇总此排行榜的得分,仅在这是“得分总和排行榜”时设置为 true。
排行榜时间范围表
| Name | Type | Not Null |
|-----------------|-----------|----------|
| id | integer | ✓ |
| leaderboard_id | integer | ✓ |
| start_at | date | ✓ |
| end_at | date | ✓ |
| previous_id | integer | |
排行榜时间范围是每个排行榜周期的条目,例如,每日排行榜将每天有一个条目。当第一个玩家在新的周期中报告分数时,将自动创建每个条目。
- 排行榜 ID:此排行榜时间范围属于哪个排行榜。
- 开始日期:此排行榜时间范围开始的日期。
- 结束日期:此排行榜时间范围结束的日期。
- 上一个 ID:上一个排行榜时间范围 ID,用于提供上一期的排名奖励。
排行榜分数表
| Name | Type | Not Null |
|--------------------------|-----------|----------|
| id | integer | ✓ |
| leaderboard_timescope_id | integer | ✓ |
| player_id | integer | ✓ |
| score_sum | integer | ✓ |
| highscore | integer | ✓ |
排行榜分数是排行榜时间范围周期内玩家的分数条目。当玩家报告分数时,将自动创建每个条目。
- 排行榜时间范围 ID:此排行榜分数属于哪个排行榜时间范围。
- 玩家 ID:此排行榜分数属于哪个玩家。
- 得分总和:此排行榜分数的得分总和,仅用于得分总和排行榜。
- 高分:此排行榜分数的高分,仅用于高分排行榜。
排行榜奖励表
| Name | Type | Not Null |
|-----------------|-----------|----------|
| id | integer | ✓ |
| leaderboard_id | integer | ✓ |
| score_sum | integer | |
| score_sum_rank | integer | |
| highscore_rank | integer | |
| type | tinyint | ✓ |
| amount | integer | ✓ |
| item_id | integer | |
排行榜奖励是达到给定排名或得分总和的玩家的奖励,如果您的排行榜有奖励并且您需要手动设置此内容,则此内容是可选的。
- 排行榜 ID:此排行榜奖励属于哪个排行榜。
- 得分总和:此奖励所需的得分总和,例如,收集 5 个糖果获得 100 个硬币。
- 总分排名:获得此奖励所需的总分排名,例如,5位收集最多玩家的100枚硬币。
- 高分排名:获得此奖励所需的高分排名,例如,5位最高分玩家的100枚硬币。
- 类型:奖励项目类型。
- 数量:奖励项目数量。
- 项目ID:奖励项目ID,可选。说明:在总分、总分排名和高分排名中,只设置一个数字;其余两个应为空。低排名将忽略高排名,例如5名和10名的条目,10名的条目将忽略前5名的排名,只奖励5名至10名的排名。
排行榜玩家奖励表
| Name | Type | Not Null |
|--------------------------|-----------|----------|
| id | integer | ✓ |
| leaderboard_timescope_id | integer | ✓ |
| player_id | integer | ✓ |
| score_sum | integer | ✓ |
| score_sum_rank | integer | ✓ |
| highscore_rank | integer | ✓ |
排行榜玩家奖励是每个玩家的奖励条目。每当玩家获得奖励时,就会自动创建一个条目。
- 排行榜时间范围ID:此排行榜玩家奖励属于哪个排行榜时间范围。
- 玩家ID:此排行榜玩家奖励属于哪个玩家。
- 总分:玩家达到的总分,仅用于总分排行榜。
- 总分排名:玩家达到的总分排名,仅用于总分排行榜。
- 高分:玩家达到的高分,仅用于高分排行榜。
API URL
GET <服务器URL>/api/leaderboards
返回包含所有有效排行榜的JSON数组,仅用于调试目的。
GET <服务器URL>/api/leaderboards/{id}
返回包含给定ID的排行榜的JSON数据,仅用于调试目的。
GET <服务器URL>/api/leaderboards/{id}/current
返回包含当前排行榜时间范围和奖励信息的JSON数据。
GET <服务器URL>/api/leaderboards/{id}/score-sums
返回包含玩家总分条目周围所有总分条目的JSON数组。
GET <服务器URL>/api/leaderboards/{id}/highscores
返回包含玩家高分条目周围所有高分条目的JSON数组。
GET <服务器URL>/api/leaderboards/{id}/rewards
返回包含玩家在当前(总分)和之前(排名)排行榜时间范围内可以获得的全部奖励的JSON数据。
POST <服务器URL>/api/leaderboards/{id}/score
报告玩家的得分并创建相关数据库条目。
POST <服务器URL>/api/leaderboards/{id}/reward
报告玩家获得的奖励并创建相关数据库条目。
API文档可以在这里找到。
Unity 客户端存储库
您可以直接将此仓库导入Unity,使用此包与Laravel服务器进行通信:<待添加>
待办事项
- 创建Web控制台以添加/编辑排行榜和上传图片。
- 为Web控制台添加管理员登录。
- 添加测试和工厂。
替代方案
在您开始运行和开发Laravel服务器之前,您应该首先考虑其他排行榜解决方案。
- (仅限移动) App Game Center和Google Play Games排行榜:非常推荐用于移动游戏,但不是跨平台,且如移除黑客得分等控制有限。
- dreamlo:一个免费的跨平台排行榜服务,控制也有限。
- GameSparks/Playfab:包括排行榜在内的完整游戏服务器服务,非常适合中核游戏,但需要良好的JavaScript和数据库知识。
许可
laravel-leaderboards许可协议为MIT许可证。