|
@@ -26,11 +26,17 @@ class RankProc {
|
|
|
return self::GetRankingOfUserFightPower($req);
|
|
|
case CmdCode::rank_fpower_getTop1Power: # 6604 查询top1战斗力
|
|
|
return self::RankFpowerGetTop1Power($req);
|
|
|
+ case CmdCode::rank_passgate_getrank: # 6605 查询通关榜榜单信息
|
|
|
+ return self::GetPassgateRank($req);
|
|
|
+
|
|
|
default:
|
|
|
return Resp::err(ErrCode::cmd_err);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+//
|
|
|
+// <editor-fold defaultstate="collapsed" desc=" 战斗力榜 ">
|
|
|
+
|
|
|
/**
|
|
|
* [6601]拉取战斗力榜单数据
|
|
|
* @param req $req
|
|
@@ -96,7 +102,7 @@ class RankProc {
|
|
|
$ranking = $req->mem->zrevrank($key, $req->uid); # 查询排名
|
|
|
$power = $req->mem->zscore($key, $req->uid); # 查询战斗力
|
|
|
$ret = array(
|
|
|
- 'ranking' => $ranking,
|
|
|
+ 'ranking' => $ranking + 1, # # 修正下排名(zset中是从零开始的)
|
|
|
'power' => $power
|
|
|
);
|
|
|
return Resp::ok($ret); # 返回
|
|
@@ -119,4 +125,74 @@ class RankProc {
|
|
|
return Resp::ok(array('uid' => $_uid, "power" => $_power));
|
|
|
}
|
|
|
|
|
|
+// </editor-fold>
|
|
|
+//
|
|
|
+
|
|
|
+ /**
|
|
|
+ * [6605] 查询通关榜榜单信息
|
|
|
+ * @param type $req
|
|
|
+ * @return type
|
|
|
+ */
|
|
|
+ static function GetPassgateRank($req) {
|
|
|
+ $RowsPerPage = 10; # 常量:每页数据条数10条
|
|
|
+ $MaxRankId = 100; # 常量:最大上榜人数.
|
|
|
+ $pageId = $req->paras[0]; # 参数:页码, 从零开始.
|
|
|
+
|
|
|
+ $key = MemKey_GameRun::Game_Rank_passgate_zset($req->zoneid); # redis key
|
|
|
+ $startid = 0 + $RowsPerPage * ($pageId - 1); # 起始id
|
|
|
+ $endId = $startid + $RowsPerPage - 1; # 结束id
|
|
|
+ if ($endId > $MaxRankId) { # 榜单长度
|
|
|
+ $endId = $MaxRankId;
|
|
|
+ }
|
|
|
+ $uids = $req->mem->zrevrange($key, $startid, $endId, true); # 取上榜玩家
|
|
|
+ $userInfos = array(); # 玩家信息
|
|
|
+ foreach ($uids as $uid => $fpower) {
|
|
|
+ $uinfo = UserProc::getUserInfo($req->mem, $req->zoneid, $uid); # 读取玩家信息
|
|
|
+ $userInfos[] = array(# # 拼装玩家信息
|
|
|
+ 'uid' => $uid,
|
|
|
+ 'name' => my_null_default($uinfo->game->name, ""),
|
|
|
+ 'level' => my_null_default($uinfo->game->level, 1),
|
|
|
+ 'power' => my_null_default($fpower, 0),
|
|
|
+ 'headImg' => my_null_default($uinfo->game->img, "")
|
|
|
+ );
|
|
|
+ }
|
|
|
+ return Resp::ok(array('rankInfo' => $userInfos)); # 返回值
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * [6603]查询玩家通关榜排名
|
|
|
+ * @param req $req
|
|
|
+ */
|
|
|
+ static function GetRankingOfUserPassGate($req) {
|
|
|
+ $key = MemKey_GameRun::Game_Rank_passgate_zset($req->zoneid); # redis key
|
|
|
+ $ranking = $req->mem->zrevrank($key, $req->uid); # 查询排名
|
|
|
+ $power = $req->mem->zscore($key, $req->uid); # 查询通关记录
|
|
|
+ $ret = array(
|
|
|
+ 'ranking' => $ranking + 1, # # 修正下排名(zset中是从零开始的)
|
|
|
+ 'power' => $power # # 通关记录
|
|
|
+ );
|
|
|
+ return Resp::ok($ret); # 返回
|
|
|
+ }
|
|
|
+
|
|
|
+ // <editor-fold defaultstate="collapsed" desc=" 辅助方法 ">
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 常量: 最大玩家人数100W(假设单服人数不会超过这个数字)
|
|
|
+ */
|
|
|
+ const MaxUserCount = 1000000;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 辅助方法: 添加玩家通关记录
|
|
|
+ * @param type $uid
|
|
|
+ * @param type $gateId
|
|
|
+ */
|
|
|
+ public static function recordNewPassGateInfo($uid, $gateId) {
|
|
|
+ $key_rank = MemKey_GameRun::Game_Rank_passgate_zset(req()->zoneid); # redis key 通关榜
|
|
|
+ $key_count = MemKey_GameRun::Game_Rank_passgate_count_hash(req()->zoneid); # redis key 通关玩家计数
|
|
|
+ $ranking = req()->mem->hincrby($key_count, $gateId, 1); # 添加通关计数
|
|
|
+ $score = $gateId . (self::MaxUserCount - $ranking); # 计算通关记录的积分值
|
|
|
+ req()->mem->zadd($key_rank, array("$uid" => $score)); # 更新玩家的通关记录
|
|
|
+ }
|
|
|
+
|
|
|
+// </editor-fold>
|
|
|
}
|