123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- <?php
- namespace loyalsoft;
- /**
- * Description of RankProc 排行榜模块
- * @version
- * 1.0.0 Created at 2020.4.2. by --gwang
- * @author gwang (mail@wanggangzero.cn)
- * @copyright ? 2020.4.2, SJZ LoyalSoft Corporation & gwang. All rights reserved.
- */
- class RankProc {
- /**
- * 处理逻辑分发
- * 所有的Proc中必须有这样一个方法
- * @param Req $req
- */
- static function procMain($req) {
- switch ($req->cmd) {
- case CmdCode::rank_fpower_getRank: # 拉取战斗力榜单信息
- return self::GetFpowerRank($req);
- case CmdCode::rank_fpower_drawReward: # 领取战斗力榜单突破奖励
- break;
- case CmdCode::rank_fpower_getRanking: # 查询玩家战斗力排名
- return self::GetRankingOfUserFightPower($req);
- default:
- return Resp::err(ErrCode::cmd_err);
- }
- }
- /**
- * 拉取战斗力榜单数据
- * @param req $req
- */
- static function GetFpowerRank($req) {
- $RowsPerPage = 10; # 常量:每页数据条数10条
- $MaxRankId = 100; # 常量:最大上榜人数.
- $pageId = $req->paras[0]; # 参数:页码, 从零开始.
- $key = MemKey_GameRun::Game_FightPowerRank_zset($req->zoneid); # redis key
- $startid = 0 + $RowsPerPage * $pageId; # 起始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' => $uinfo->game->name,
- 'level' => $uinfo->game->level,
- 'power' => $fpower,
- 'headImg' => $uinfo->game->img
- );
- }
- Resp::ok($userInfos); # 返回值
- }
- /**
- * 领取战斗力突破奖励
- * @param req $req
- */
- static function DrawFpowerBreakThrougReward($req) {
- $rewardCondition = $req->paras[0]; # 领取奖励的档次条件(战斗力数值)
- $key = MemKey_GameRun::Game_FightPowerRank_zset($req->zoneid); # redis key
- $no1 = $req->mem->zrevrange($key, 0, 0, true); # 取第一名信息
- $_power = 0;
- foreach ($no1 as $uid => $power) { #
- $_power = $power; # 状元的站立值
- break;
- }
- if ($_power < $rewardCondition) { # 不满足领取条件
- return Resp::err(ErrCode::rank_fpower_unlocked);
- }
- $rewardMo = GameConfig::rankreward_fpower_getItem($rewardCondition); # 奖励mo
- StoreProc::AddMultiItemInStore($req, $rewardMo->reward, $req->userInfo->game); # 发放奖励字符串.
- return Resp::ok(true);
- }
- /**
- * 查询玩家战斗力排名
- * @param req $req
- */
- static function GetRankingOfUserFightPower($req) {
- $key = MemKey_GameRun::Game_FightPowerRank_zset($req->zoneid); # redis key
- $ranking = $req->mem->zrevrank($key, $req->uid); # 查询排名
- $power = $req->mem->zscore($key, $req->uid); # 查询战斗力
- $ret = array(
- 'ranking' => $ranking,
- 'power' => $power
- );
- return Resp::ok($ret); # 返回
- }
- }
|