Pārlūkot izejas kodu

fixed: 排行榜中的bug

gwang 4 gadi atpakaļ
vecāks
revīzija
0f7960e58f
2 mainītis faili ar 38 papildinājumiem un 46 dzēšanām
  1. 35 25
      Gameserver/Amfphp/process/RankProc.php
  2. 3 21
      Gameserver/Amfphp/test.php

+ 35 - 25
Gameserver/Amfphp/process/RankProc.php

@@ -13,7 +13,7 @@ class RankProc {
 
     /**
      * 处理逻辑分发
-     * 所有的Proc中必须有这样一个方法 
+     * 所有的Proc中必须有这样一个方法
      */
     static function procMain() {
         switch (req()->cmd) {
@@ -42,21 +42,23 @@ class RankProc {
     }
 
     /**
-     * 查询指定榜单的top1 
+     * 查询指定榜单的top1
      * @param type $key
      * @return type
      */
     static function _RankGetTop1($key) {
         $no1 = gMem()->zrevrange($key, 0, 0, true);                             # 取第一名信息
-        foreach ($no1 as $uid => $score) {                                      # 
-            $uinfo = UserProc::getUserInfo(req()->zoneid, $uid);                # 读取玩家信息
-            return array(#                                                      # 拼装玩家信息
-                'uid' => $uid,
-                'name' => my_null_default($uinfo->game->baseInfo->name, ""),
-                'level' => my_null_default($uinfo->game->baseInfo->level, 1),
-                'score' => my_null_default($score, 0),
-                'headImg' => my_null_default($uinfo->game->baseInfo->headImg, "")
-            );
+        if (count($no1) > 0) {
+            foreach ($no1 as $uid => $score) {                                  # 即使只有一行也用的遍历
+                $uinfo = UserProc::getUserInfo(req()->zoneid, $uid);            # 读取玩家信息
+                return array(#                                                  # 拼装玩家信息
+                    'uid' => $uid,
+                    'name' => my_null_default($uinfo->game->baseInfo->name, ""),
+                    'level' => my_null_default($uinfo->game->baseInfo->level, 1),
+                    'score' => my_null_default($score, 0),
+                    'headImg' => my_null_default($uinfo->game->baseInfo->headImg, "")
+                );
+            }
         }
         return null;                                                            # 未找到
     }
@@ -65,14 +67,18 @@ class RankProc {
     //   <editor-fold defaultstate="collapsed" desc="  战斗力榜  ">
 
     /**
-     * [6607] 排行榜 - 查询战力榜突破记录 
+     * [6607] 排行榜 - 查询战力榜突破记录
      */
     static function GetFpowerBreachLog() {
         $key = MemKey_GameRun::Game_Rank_FPowerBreakLog_hash(req()->zoneid);     # redis key 战力榜突破记录
         $kv = gMem()->hgetall($key);
         $ret = array();
         foreach ($kv as $condition => $uid) {
-            $uinfo = UserProc::getUserInfo(req()->zoneid, $uid);      # 读取玩家信息
+            $uinfo = UserProc::getUserInfo(req()->zoneid, $uid);                # 读取玩家信息
+            if (empty($uinfo)) {
+                CLog::err("未找到战力突破榜玩家$uid");
+                continue;
+            }
             $ret[$condition] = array(#                                          # 拼装玩家信息
                 'uid' => $uid,
                 'name' => my_null_default($uinfo->game->baseInfo->name, ""),
@@ -85,7 +91,7 @@ class RankProc {
     }
 
     /**
-     * [6601]拉取战斗力榜单数据 
+     * [6601]拉取战斗力榜单数据
      */
     static function GetFpowerRank() {
         $RowsPerPage = 10;                                                      # 常量:每页数据条数10条
@@ -95,13 +101,17 @@ class RankProc {
         $key = MemKey_GameRun::Game_FightPowerRank_zset(req()->zoneid);          # redis key
         $startid = 0 + $RowsPerPage * ($pageId - 1);                            # 起始id
         $endId = $startid + $RowsPerPage - 1;                                   # 结束id
-        if ($endId > $MaxRankId) {                                              # 榜单长度 
+        if ($endId > $MaxRankId) {                                              # 榜单长度
             $endId = $MaxRankId;
         }
         $uids = gMem()->zrevrange($key, $startid, $endId, true);                # 取上榜玩家
         $userInfos = array();                                                   # 玩家信息
         foreach ($uids as $uid => $score) {
-            $uinfo = UserProc::getUserInfo(req()->zoneid, $uid);      # 读取玩家信息
+            $uinfo = UserProc::getUserInfo(req()->zoneid, $uid);                # 读取玩家信息
+            if (empty($uinfo)) {
+                CLog::err("未找到战力榜玩家$uid");
+                continue;
+            }
             $userInfos[] = array(#                                              # 拼装玩家信息
                 'uid' => $uid,
                 'name' => my_null_default($uinfo->game->baseInfo->name, ""),
@@ -120,7 +130,7 @@ class RankProc {
     }
 
     /**
-     * [6602]领取战斗力突破奖励 
+     * [6602]领取战斗力突破奖励
      */
     static function DrawFpowerBreakThrougReward() {
         $rewardCondition = req()->paras[0];                                      # 领取奖励的档次条件(战斗力数值)
@@ -128,7 +138,7 @@ class RankProc {
         $key = MemKey_GameRun::Game_FightPowerRank_zset(req()->zoneid);          # redis key
         $no1 = gMem()->zrevrange($key, 0, 0, true);                             # 取第一名信息
         $_power = 0;
-        foreach ($no1 as $uid => $power) {                                      # 
+        foreach ($no1 as $uid => $power) {                                      #
             $_power = $power;                                                   # 状元的站立值
             break;
         }
@@ -157,11 +167,11 @@ class RankProc {
             'ranking' => $ranking + 1, #                                        # 修正下排名(zset中是从零开始的)
             'power' => intval($power)
         );
-        return Resp::ok($ret);                                                  # 返回  
+        return Resp::ok($ret);                                                  # 返回
     }
 
     /**
-     * [6604] 排行榜查询战斗力最高值 
+     * [6604] 排行榜查询战斗力最高值
      */
     static function RankGetAllTop1() {
         $key_fPower = MemKey_GameRun::Game_FightPowerRank_zset(req()->zoneid);   # redis key 战力榜
@@ -203,7 +213,7 @@ class RankProc {
     }
 
     /**
-     * [6606] 领取通关榜突破奖励 
+     * [6606] 领取通关榜突破奖励
      */
     static function DrawPassgateReward() {
         $rewardCondition = req()->paras[0];                                      # 领取奖励的档次条件(战斗力数值)
@@ -212,7 +222,7 @@ class RankProc {
         $key = MemKey_GameRun::Game_Rank_passgate_zset(req()->zoneid);           # redis key
         $no1 = gMem()->zrevrange($key, 0, 0, true);                             # 取第一名信息
         $score = 0;
-        foreach ($no1 as $uid => $_score) {                                     # 
+        foreach ($no1 as $uid => $_score) {                                     #
             $score = $_score;                                                   # 状元的通关记录
             break;
         }
@@ -242,7 +252,7 @@ class RankProc {
         $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) {                                              # 榜单长度 
+        if ($endId > $MaxRankId) {                                              # 榜单长度
             $endId = $MaxRankId;
         }
         $uids = gMem()->zrevrange($key, $startid, $endId, true);                # 取上榜玩家
@@ -279,11 +289,11 @@ class RankProc {
             'ranking' => $ranking + 1, #                                        # 修正下排名(zset中是从零开始的)
             'power' => $power #                                                 # 通关记录
         );
-        return Resp::ok($ret);                                                  # 返回  
+        return Resp::ok($ret);                                                  # 返回
     }
 
     // </editor-fold>
-    // 
+    //
     // <editor-fold defaultstate="collapsed" desc="  辅助方法  ">
 
     /**

+ 3 - 21
Gameserver/Amfphp/test.php

@@ -14,25 +14,7 @@ echoLine("phpver: " . PHP_VERSION . PHP_EOL);
 //
 //var_dump(date('YmdH'));
 $index = 785555550;
+$key = 'gamerun-BossFight-byDateHour-zone1-2021052721';
+$kv = gMem()->zrevrange($key, 0, 0, true);
 
-//$mo = GameConfig::endless_tower_getItem($index);                        # 取配置信息
-//my_Assert(isset($mo), ErrCode::err_const_no);                           # 防御
-//$rsArr = str_replace(',', ';', $mo->rewardList);                                    # 拆解
-//$rsArr = str_replace('_', ',', $rsArr);
-//var_dump($rsArr);
-//function getWorldbossRankReward($index) {
-//    $arr = (array) GameConfig::worldboss_rankreward();
-//    foreach ($arr as $i => $v) {
-//        isEditor() and $v = new \sm_worldboss_rankreward();
-//        if ($index >= $v->minRank && $index <= $v->maxRank) {
-//            return $v;
-//        }
-//    }
-//    return $arr[max(array_keys($arr))];
-//}
-//
-//var_dump(getWorldbossRankReward($index));
-$uid_name = "wanggang-uc__小小鸟";
-
-$uid = substr($uid_name, 0, strpos($uid_name, "__"));
-var_dump($uid);
+var_dump($kv);