RankProc.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. namespace loyalsoft;
  3. /**
  4. * Description of RankProc 排行榜模块
  5. * @version
  6. * 1.0.0 Created at 2020.4.2. by --gwang
  7. * @author gwang (mail@wanggangzero.cn)
  8. * @copyright ? 2020.4.2, SJZ LoyalSoft Corporation & gwang. All rights reserved.
  9. */
  10. class RankProc {
  11. /**
  12. * 处理逻辑分发
  13. * 所有的Proc中必须有这样一个方法
  14. * @param Req $req
  15. */
  16. static function procMain($req) {
  17. switch ($req->cmd) {
  18. case CmdCode::rank_fpower_getRank: # 拉取战斗力榜单信息
  19. return self::GetFpowerRank($req);
  20. case CmdCode::rank_fpower_drawReward: # 领取战斗力榜单突破奖励
  21. break;
  22. case CmdCode::rank_fpower_getRanking: # 查询玩家战斗力排名
  23. return self::GetRankingOfUserFightPower($req);
  24. default:
  25. return Resp::err(ErrCode::cmd_err);
  26. }
  27. }
  28. /**
  29. * 拉取战斗力榜单数据
  30. * @param req $req
  31. */
  32. static function GetFpowerRank($req) {
  33. $RowsPerPage = 10; # 常量:每页数据条数10条
  34. $MaxRankId = 100; # 常量:最大上榜人数.
  35. $pageId = $req->paras[0]; # 参数:页码, 从零开始.
  36. $key = MemKey_GameRun::Game_FightPowerRank_zset($req->zoneid); # redis key
  37. $startid = 0 + $RowsPerPage * $pageId; # 起始id
  38. $endId = $startid + $RowsPerPage - 1; # 结束id
  39. if ($endId > $MaxRankId) { # 榜单长度
  40. $endId = $MaxRankId;
  41. }
  42. $uids = $req->mem->zrevrange($key, $startid, $endId, true); # 取上榜玩家
  43. $userInfos = array(); # 玩家信息
  44. foreach ($uids as $uid => $fpower) {
  45. $uinfo = UserProc::getUserInfo($req->mem, $req->zoneid, $uid); # 读取玩家信息
  46. $userInfos[] = array(# # 拼装玩家信息
  47. 'uid' => $uid,
  48. 'name' => $uinfo->game->name,
  49. 'level' => $uinfo->game->level,
  50. 'power' => $fpower,
  51. 'headImg' => $uinfo->game->img
  52. );
  53. }
  54. Resp::ok($userInfos); # 返回值
  55. }
  56. /**
  57. * 领取战斗力突破奖励
  58. * @param req $req
  59. */
  60. static function DrawFpowerBreakThrougReward($req) {
  61. $rewardCondition = $req->paras[0]; # 领取奖励的档次条件(战斗力数值)
  62. $key = MemKey_GameRun::Game_FightPowerRank_zset($req->zoneid); # redis key
  63. $no1 = $req->mem->zrevrange($key, 0, 0, true); # 取第一名信息
  64. $_power = 0;
  65. foreach ($no1 as $uid => $power) { #
  66. $_power = $power; # 状元的站立值
  67. break;
  68. }
  69. if ($_power < $rewardCondition) { # 不满足领取条件
  70. return Resp::err(ErrCode::rank_fpower_unlocked);
  71. }
  72. $rewardMo = GameConfig::rankreward_fpower_getItem($rewardCondition); # 奖励mo
  73. StoreProc::AddMultiItemInStore($req, $rewardMo->reward, $req->userInfo->game); # 发放奖励字符串.
  74. return Resp::ok(true);
  75. }
  76. /**
  77. * 查询玩家战斗力排名
  78. * @param req $req
  79. */
  80. static function GetRankingOfUserFightPower($req) {
  81. $key = MemKey_GameRun::Game_FightPowerRank_zset($req->zoneid); # redis key
  82. $ranking = $req->mem->zrevrank($key, $req->uid); # 查询排名
  83. $power = $req->mem->zscore($key, $req->uid); # 查询战斗力
  84. $ret = array(
  85. 'ranking' => $ranking,
  86. 'power' => $power
  87. );
  88. return Resp::ok($ret); # 返回
  89. }
  90. }