成绩上报与排行榜

    开发者通过使用上报接口进行数据上报后,通过排行榜接口进行成绩的拉取,与展示。

    现QQ轻游戏平台有新旧两套上报、排行榜系统。

    成绩上报与排行榜(新)

    开发者可自定义成绩的支持以下特性:

    • 排序方式 (从大到小、从小到大)
    • 排行榜更新周期默认为一周 (即:每周日0:00进行排行榜清空操作。并支持每月一清,永久不清,具体可以到hudong管理端配置,
    • 必须配置好周期规则后,才能使用数据上报和排行榜功能
      使用自建后台的游戏使用本接口进行成绩上报。
    • 支持多榜单同时上报

      对应例子代码中scoreInfo中score字段为默认榜单,a1,a2,aN等字段为开发者可自定义榜单

    • 支持多榜单排序方式

    对应data.attr中的字段 1: 从大到小 2: 从小到大 3: 累积 4: 直接覆盖 四种排序方式。例如执行 a1排行榜为 从小到大的排序方式,可以设置为 a1: { type: 'rank', order: 2, }

    错误码

    使用排行榜数据的拉取,展示的样式交由开发者自定设计,QQ轻游戏平台不做要求。

    排行榜数据提供 昵称头像url积分 三种数据。此处不提供openId与昵称、头像的对应关系

    1. // 先拉 score 排行榜
    2. var attr = "score";//使用哪一种上报数据做排行,可传入score,a1,a2等
    3. var order = 1; //排序的方法:[ 1: 从大到小(单局),2: 从小到大(单局),3: 由大到小(累积)]
    4. var rankType = 0; //要查询的排行榜类型,0: 好友排行榜,1: 群排行榜,2: 讨论组排行榜,3: C2C二人转 (手Q 7.6.0以上支持)
    5. BK.QQ.getRankListWithoutRoom(attr, order, rankType, function(errCode, cmd, data) {
    6. BK.Script.log(1,1,"getRankListWithoutRoom callback cmd" + cmd + " errCode:" + errCode + " data:" + JSON.stringify(data));
    7. // 返回错误码信息
    8. if (errCode !== 0) {
    9. BK.Script.log(1,1,'获取排行榜数据失败!错误码:' + errCode);
    10. return;
    11. }
    12. // 解析数据
    13. if (data) {
    14. for(var i=0; i < data.data.ranking_list.length; ++i) {
    15. var rd = data.data.ranking_list[i];
    16. // rd 的字段如下:
    17. //var rd = {
    18. // url: '', // 头像的 url
    19. // nick: '', // 昵称
    20. // score: 1, // 分数
    21. // selfFlag: false, // 是否是自己
    22. //};
    23. }
    24. }
    25. // 再拉 a1 的排行榜
    26. BK.QQ.getRankListWithoutRoom('a1', 1, rankType, function(errCode, cmd, data) {
    27. BK.Script.log(1,1,"getRankListWithoutRoom callback cmd" + cmd + " errCode:" + errCode + " data:" + JSON.stringify(data));
    28. // 返回错误码信息
    29. if (errCode !== 0) {
    30. BK.Script.log(1,1,'获取排行榜数据失败!错误码:' + errCode);
    31. return;
    32. }
    33. // 解析数据
    34. if (data) {
    35. for(var i=0; i < data.data.ranking_list.length; ++i) {
    36. var rd = data.data.ranking_list[i];
    37. /// rd 的字段如下:
    38. //var rd = {
    39. // url: '', // 头像的 url
    40. // nick: '', // 昵称
    41. // a1: 1, // 分数
    42. // selfFlag: false, // 是否是自己
    43. //};
    44. }
    45. });
    46. });

    例子:下面为引力球使用本接口进行排行榜展示的例子

    1.1 QQ轻游戏后台成绩上报

    使用QQ轻游戏后台,指使用BK.Room接口进行房间的创建、加入、退出房间等操作。上报的成绩与房间id(roomId)强相关。

    • 游戏正常结束

    • 玩家中途退出

    两种情况均需要将成绩上报至QQ轻游戏后台。需要注意的是无论正常退出还是中途退出,都需要将当局游戏内所有的人的成绩都进行上报。

    例ABCD,四人参加游戏,A中途退出,A需将ABCD四人成绩一律上传。如是单人游戏,也需要将单人成绩上传。

    正常退出:正常上报所有人成绩

    中途退出:将所有人成绩填0上报

    此处需要特别注意的是,游戏使用QQ轻游戏后台与使用自建后台,引擎侧使用的上报接口不一致

    为防止游戏数据造假,开发进行游戏成绩上报时,需上报游戏内所有人的游戏成绩。

    请求:

    1. BK.QQ.getRankList(function (errCode, cmd, data) {
    2. BK.Script.log(1, 1, "getRankList demo callback cmd" + cmd + " errCode:" + errCode + " data:" + JSON.stringify(data));
    3. if(data)
    4. {
    5. var rankList = data.data.rankList;
    6. for(var i=0;i<rankList.length;i++){
    7. BK.Script.log(1, 1, "rankList i:" + i +
    8. " nick:" + rankNode.nick + //昵称
    9. " head:" + rankNode.head + //头像url
    10. " accPoint:"+rankNode.busData.accPoint) //积分
    11. }
    12. }
    13. });

    1.3.获取房间内的用户成绩数据

    回包

    1. errCode 0表示成功其他为异常
    2. data =
    3. {
    4. "data": {
    5. "userRank": [
    6. {
    7. "openId":"100001",
    8. "score":560,
    9. "rank":1,
    10. "a1":123,
    11. ...
    12. "a5":123,
    13. }
    14. ...
    15. ]
    16. }
    17. }

    回包数据

    1. errCode 0表示成功其他为异常
    2. data = {
    3. "data": {
    4. "toOpenId":"12345556645DAGADFGAD" //###请求有传入toOpenId则有返回,没传入则无此字段返回
    5. "myPoint":800 //用户积分