cyzhao 3 hónapja
szülő
commit
bd793e9b62

+ 7 - 1
Gameserver/App/base/CmdCode.php

@@ -586,7 +586,13 @@ class CmdCode {
     /**
      * 6828 获取自己的排名
      */
-    const fight_WorldBoss_getSelfRankId = 6828;
+    const fight_WorldBoss_getSelfRank = 6828;
+    
+    /**
+     * 6829 领取奖励
+     */
+    const fight_WorldBoss_ClaimRewards = 6829;
+    
 // </editor-fold>
 // <editor-fold defaultstate="collapsed" desc="系统操作码 - 69xx">
 

+ 5 - 0
Gameserver/App/base/ErrCode.php

@@ -672,6 +672,11 @@ class ErrCode {
      * 抽奖券购买数量超出上限
      */
     const active_flipCardLotteru_buyNumLimit = 3518;
+    
+    /**
+     * 伤害值未达标不能领取该奖励
+     */
+    const active_worldBoss_notClaimRewards = 3519;
 // </editor-fold>
 //
 //   // <editor-fold defaultstate="collapsed" desc="    task 3600    ">

+ 7 - 0
Gameserver/App/model/User/Info_PrivateState.php

@@ -549,6 +549,13 @@ class Info_PrivateState extends Object_ext {
      * @var type
      */
     public $worldBoss_turnNum = 0;
+    
+    /**
+     * 领取奖励记录
+     * @var type
+     */
+    #[ArrayType]
+    public $worldBoss_received = array();
 
     public function initialize() {      
         $this->onlineGiftts = 1;

+ 73 - 15
Gameserver/App/process/FightProc.php

@@ -70,8 +70,10 @@ class FightProc {
                 return self::GetWorldBoss_RankInfo();
             case CmdCode::fight_WorldBoss_getRankDamageVal:                     # 6827 当前轮次下 自己的最高伤害值
                 return self::GetWorldBoss_RankDamageVal();    
-            case CmdCode::fight_WorldBoss_getSelfRankId:                        # 6827 获取自己的排名
-                return self::GetWorldBoss_SelfRankId();        
+            case CmdCode::fight_WorldBoss_getSelfRank:                          # 6827 获取自己的排名信息
+                return self::GetWorldBoss_GetSelfRank();
+            case CmdCode::fight_WorldBoss_ClaimRewards:                         # 6829 领取奖励
+                return self::GetWorldBoss_ClaimRewards();         
             default:
                 Err(ErrCode::cmd_err);
         }
@@ -1917,6 +1919,15 @@ class FightProc {
         }
         $mem->deleteMulti($arr);
     }
+    
+    public static function ResetTurnNum() {
+        $num = self::GetCurTurnNum();
+        if($num != ctx()->privateState->worldBoss_turnNum){
+            ctx()->privateState->worldBoss_turnNum = $num;
+            ctx()->privateState->worldBoss_received = array();          
+        }
+    }
+    
 
     /**
      * 当前所在世界boss 的轮次 //当前轮次可以算出来
@@ -1946,8 +1957,8 @@ class FightProc {
      * @param type $gateIndex
      */
     public static function Ranking_DamageVal($damageVal) {
-        $num = self::GetCurTurnNum();
-        $memKey = MemKey_GameRun::WorldBoss_Rank($num, req()->zoneid);
+        //$num = self::GetCurTurnNum();
+        $memKey = self::GetWorldBoss_DamageMemKey();// MemKey_GameRun::WorldBoss_Rank($num, req()->zoneid);
         $mem = gMem();
 
         $uid = req()->uid;
@@ -1974,17 +1985,21 @@ class FightProc {
 
         $selfIsHasRank = 0; //本人是否上榜 0未上榜没有排名 1上榜则selfRank就是排名
        
-        $num = self::GetCurTurnNum();
-        $memKey = MemKey_GameRun::WorldBoss_Rank($num, req()->zoneid);
-            
+        //$num = self::GetCurTurnNum();
+        //$memKey =  MemKey_GameRun::WorldBoss_Rank($num, req()->zoneid);
+        $memKey = self::GetWorldBoss_DamageMemKey();
         $list = gMem()->zrevrange($memKey, 0, GameConfig::glc2()->WorldBoss_RankRewardStatistics, true);
 
+        $rankStatistics = GameConfig::glc2()->WorldBoss_RankStatistics;
+        
         $selfRank = null;
         $retArr = array();
+        $index = 0;
         if (count($list) > 0) {
             foreach ($list as $uid => $score) {
+                $index += 1;
                 $rankInfo = self::initOtherUidRankInfo($uid, $score, 3);               
-                if ($rankInfo->uid == req()->uid) {
+                if ($rankInfo->uid == req()->uid && $index <= $rankStatistics) {
                     $selfIsHasRank = 1;
                     $selfRank = $rankInfo;
                 }
@@ -2023,21 +2038,64 @@ class FightProc {
     }
     
     /**
-     * 6828 获取自己的排名
+     * 6828 获取自己的排名信息
      * @return type
      */
-    public static function GetWorldBoss_SelfRankId() {       
-        $lv = gMem()->zrevrank(self::GetWorldBoss_DamageMemKey(), req()->uid);
-        if($lv == null){
-            $lv = 0;
-        }
+    public static function GetWorldBoss_GetSelfRank() {           
+//        $lv = gMem()->zrevrank(self::GetWorldBoss_DamageMemKey(), req()->uid);
+//        if($lv == null){
+//            $lv = 0;
+//        }
+        $damageval = gMem()->zscore(self::GetWorldBoss_DamageMemKey(), req()->uid);        
+        if($damageval == null){
+            $damageval = 0;
+        } 
+        $ins_rank = self::initOtherUidRankInfo(req()->uid, $damageval, 3);            
         
         UserProc::updateUserInfo();
         $ret = array(
-            'selfRank' => $lv,
+            'selfRank' => $ins_rank,
             
         );
         return Resp::ok($ret);
     }
+    
+    
+    /**
+     * 6829 领取世界boss奖励
+     * @return type
+     */
+    public static function GetWorldBoss_ClaimRewards() {           
+        list($damageValId) = req()->paras;      
+              
+        my_Assert(!in_array($damageValId, ctx()->privateState->worldBoss_received), ErrCode::active_hasgetted);      
+        
+        $val = gMem()->zscore(self::GetWorldBoss_DamageMemKey(), req()->uid);        
+        if($val == null){
+            $val = 0;
+        } 
+        my_Assert($damageValId <= $val, ErrCode::active_worldBoss_notClaimRewards);    
+        
+        $turnNum = self::GetCurTurnNum();
+        $list = GameConfig::worldboss_demagereward_getItemArray($turnNum);
+        foreach ($list as $key => $mo) {
+            if($mo->demageValId == $damageValId && $mo->orderId == $turnNum){
+                StoreProc::AddMultiItemInStore($mo->reward);
+                break;
+            }
+        }
+        ctx()->privateState->worldBoss_received[] = $damageValId;
+        
+        UserProc::updateUserInfo();
+        $ret = array(
+            'store' => ctx()->store,
+            'cash'=>ctx()->baseInfo->cash,
+            'reward'=> StoreProc::$reward,
+            'reward_Gem'=> StoreProc::$reward_Gem,
+            'reward_equip'=> StoreProc::$reward_equip,          
+        );
+        return Resp::ok($ret);
+    }
+    
 // </editor-fold>    
 }