Browse Source

世界boss定时触发文件完成

cyzhao 3 months ago
parent
commit
642c9cddec

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

@@ -591,7 +591,12 @@ class CmdCode {
     /**
      * 6829 领取奖励
      */
-    const fight_WorldBoss_ClaimRewards = 6829;
+    const fight_WorldBoss_claimRewards = 6829;
+    
+    /*
+     * 世界boss 结算
+     */
+    const fight_WorldBoss_settle = 6830;
     
 // </editor-fold>
 // <editor-fold defaultstate="collapsed" desc="系统操作码 - 69xx">

+ 5 - 5
Gameserver/App/configs/GameConfig.php

@@ -73,15 +73,15 @@ class GameConfig {
      * @return mixed
      */
     private static function get_hash_item($modelName, $itemId) {
-        if (self::isCG()) {
-            $data = self::$modelName();
+        if (self::isCG()) {        
+            $data = self::$modelName();         
             if (property_exists($data, $itemId)) {
                 return $data->$itemId;
             }
-        } else {
+        } else {           
             $key = 'gamecfg-' . self::CV() . $modelName . self::zoneid();
             return gMem()->hget($key, $itemId);
-        }
+        }             
         return null;
     }
 // </editor-fold>
@@ -1177,7 +1177,7 @@ class GameConfig {
     }
     /**
     * 世界boss排名奖励
-    * @return \worldboss_rankreward
+    * @return \sm_worldboss_rankreward
     */
     public static function worldboss_rankreward()
     { 

+ 21 - 1
Gameserver/App/process/EmailProc.php

@@ -335,6 +335,8 @@ class EmailProc {
         $mail = new Ins_Email(null, enum_Mail_Type::SysTemMail, "月卡奖励", #
                 $cardName . "每日奖励", $reward);
         self::InsertMail($zoneid, $uid, $mail);
+        
+        EmailProc::IsExistRedTip();
     }
 
     /**
@@ -394,6 +396,8 @@ class EmailProc {
                 "感谢您在首轮删档测试活动中充值{$rmbNum}元. 特此返还{$num}钻石, 请查收. 祝您生活愉快!"
                 , "$itemid, $num");
         self::InsertMail($zoneid, $uid, $mail);
+        
+        EmailProc::IsExistRedTip();
     }
 
     /**
@@ -407,6 +411,7 @@ class EmailProc {
         $mail = new Ins_Email(null, enum_Mail_Type::SysTemMail, "内部测试-道具发放邮件", #
                 "请领取", "$itemid, $num");
         self::InsertMail($zoneid, $uid, $mail);
+        EmailProc::IsExistRedTip();
     }
 
     //----------------拍卖邮件
@@ -588,6 +593,18 @@ class EmailProc {
 
 // </editor-fold>
 //
+
+// <editor-fold defaultstate="collapsed" desc="   世界boss邮件 ">    
+    
+    public static function SendWorldBossRewardMail($zoneid, $uid, $reward) {
+        $mail = new Ins_Email(null, enum_Mail_Type::SysTemMail, "世界boss当前轮次排名奖励", #
+                "世界boss当前轮次排名奖励!", $reward);
+        self::InsertMail($zoneid, $uid, $mail);
+    }
+    
+// </editor-fold>
+//    
+    
 // <editor-fold defaultstate="collapsed" desc="   商城邮件
 // ">
 
@@ -602,6 +619,8 @@ class EmailProc {
         $mail = new Ins_Email(null, enum_Mail_Type::ShopMail, "资源月卡每日奖励", #
                 "资源月卡每日奖励!", $reward);
         self::InsertMail($zoneid, $uid, $mail);
+        
+        EmailProc::IsExistRedTip();
     }
 
     /**
@@ -615,6 +634,7 @@ class EmailProc {
         $mail = new Ins_Email(null, enum_Mail_Type::SysTemMail, "激活码兑换礼包奖励", #
                 "激活码兑换礼包奖励!", $reward);
         self::InsertMail($zoneid, $uid, $mail);
+        EmailProc::IsExistRedTip();
     }
 
 // </editor-fold>
@@ -641,7 +661,7 @@ class EmailProc {
             }
         }
         self::logMail($zoneid, $uid, $mail);                                    # 将邮件写入Mysql中     
-        EmailProc::IsExistRedTip();
+        
         //        CornerSignEventProc::OnNewMails();                                      # 角标更新
         return $mail->mailId;
     }

+ 146 - 60
Gameserver/App/process/FightProc.php

@@ -69,11 +69,13 @@ class FightProc {
             case CmdCode::fight_WorldBoss_rankInfo:                             # 6826 世界boss的排名信息
                 return self::GetWorldBoss_RankInfo();
             case CmdCode::fight_WorldBoss_getRankDamageVal:                     # 6827 当前轮次下 自己的最高伤害值
-                return self::GetWorldBoss_RankDamageVal();    
+                return self::GetWorldBoss_RankDamageVal();
             case CmdCode::fight_WorldBoss_getSelfRank:                          # 6827 获取自己的排名信息
                 return self::GetWorldBoss_GetSelfRank();
-            case CmdCode::fight_WorldBoss_ClaimRewards:                         # 6829 领取奖励
-                return self::GetWorldBoss_ClaimRewards();         
+            case CmdCode::fight_WorldBoss_claimRewards:                         # 6829 领取奖励
+                return self::GetWorldBoss_ClaimRewards();
+            case CmdCode::fight_WorldBoss_settle:                               # 6830 世界boss结算
+                return self::WorldBoss_settle();
             default:
                 Err(ErrCode::cmd_err);
         }
@@ -1034,14 +1036,14 @@ class FightProc {
      * @param type $id
      */
     static function isFunUnlock($id) {
-        $funMo = GameConfig::fun_unlock_getItem($id);
+        $funMo = GameConfig::fun_unlock_getItem($id);                 
         if ($funMo->unlockType1 != null && self::unlockCondition($funMo->unlockType1, $funMo->unlockParas1)) {
             return true;
         }
 
         if ($funMo->unlockType2 != null && self::unlockCondition($funMo->unlockType2, $funMo->unlockParas2)) {
             return true;
-        }
+        }      
         return false;
     }
 
@@ -1053,7 +1055,7 @@ class FightProc {
         $funUnlock = false;
         switch ($conditionId) {
             case Enum_FunUnlockType::battle_Gate:
-                $gateId = $paras;
+                $gateId = $paras;                           
                 if (ctx()->gates->GateList->$gateId->fightNum > 0) {
                     $funUnlock = true;
                 }
@@ -1423,10 +1425,10 @@ class FightProc {
 
         if ($type == 1) {
             $lv = gMem()->zrevrank(MemKey_GameRun::Rank_MainGateIndex_Zone_zset(req()->zoneid), $uid);
-        } else if($type == 2){
+        } else if ($type == 2) {
             $lv = gMem()->zrevrank(MemKey_GameRun::Rank_FightPower_Zone_zset(req()->zoneid), $uid);
         } elseif ($type == 3) {
-            $memKey = self::GetWorldBoss_DamageMemKey();            
+            $memKey = self::GetWorldBoss_DamageMemKey();
             $lv = gMem()->zrevrank($memKey, $uid);
         }
 
@@ -1872,16 +1874,85 @@ class FightProc {
     }
 
     // </editor-fold>
-// <editor-fold defaultstate="collapsed" desc="世界boss 排行榜">  
+// <editor-fold defaultstate="collapsed" desc=" 世界boss 排行榜">  
 
     /**
-     * 一个赛季完成后 排名数据清理掉  同时轮次要改变
+     * 结算世界boss排行奖励[定时发放奖励接口]
      */
-    public static function ResetWorldBossRank() {
-        if (!FightProc::isFunUnlock(25)) {
+    public static function triggerSettleRankReward_worldBoss() {
+        //校验下是否处在发放奖励信息的时间点 【每个轮次最后一天的最后10分钟】                             
+        $mo = GameConfig::subfun_unlock_getItem(Enum_SubFunType::WorldBoss);       
+        
+        if ($mo == null) {
+            return;
+        }
+        if(now() < $mo->startTs){
+            return;
+        }
+        
+        echo '----发放世界boss的排行奖励程序开始运行-----';
+        $memKey = MemKey_GameRun::WorldBoss_StartTs(req()->zoneid);
+        $mem = gMem();
+
+        $ts = $mem->get($memKey);
+        if ($ts == 0) {
+            $ts = $mo->startTs;
+        }
+
+        $curDay = TimeUtil::totalDays();
+        $endDay = TimeUtil::totalDays($ts);
+
+        $num = $curDay - $endDay;
+        $num += 1;
+
+        $yushu = $num % 3;
+
+        $tomorrowMidnight = strtotime('tomorrow', now()); //明天0点时间
+
+        $chaizhi = $tomorrowMidnight - now();
+       
+        if ($yushu == 0 && $chaizhi <= 10 * 60) {
+            $damageMemKey = self::GetWorldBoss_DamageMemKey();
+            echo '发放奖励的menkey===============:';
+            echo "$damageMemKey";
+            if ($mem->exists($damageMemKey)) {               
+                FightProc::settleRankReward_worldBoss();
+            }
+        }
+                
+        echo '----世界boss的排行奖励-发放完成----';
+    }
+
+    public static function settleRankReward_worldBoss() {
+        echo '----开始发放世界boss的排行奖励-----';
+        $dic = GameConfig::worldboss_rankreward();
+        if ($dic == null) {
             return;
         }
 
+        $memKey = self::GetWorldBoss_DamageMemKey();
+        foreach ($dic as $id => $mo) {
+            $list = gMem()->zrevrange($memKey, $mo->rank_start - 1, $mo->rank_end - 1, true);
+           
+            if (count($list) == 0) {
+                continue;
+            }
+            foreach ($list as $uid => $score) {              
+                EmailProc::SendWorldBossRewardMail(req()->zoneid, $uid, $mo->reward);
+                gMem()->zrem($memKey, $uid);
+            }
+        }
+                
+//        $list = gMem()->zrevrange($memKey, 0, GameConfig::glc2()->WorldBoss_RankRewardStatistics, true);       
+//        if (count($list) <= 0) {
+//            gMem()->delete($memKey);
+//        }
+    }
+
+    /**
+     * 重置每个赛季的开始时间 一个重置每个赛季的开始时间赛季完成后  排名数据清理掉  同时轮次要改变 [定时接口]
+     */
+    public static function ResetWorldBossRank_StartTs() {       
         $mo = GameConfig::subfun_unlock_getItem(Enum_SubFunType::WorldBoss);
         if ($mo == null) {
             return;
@@ -1889,7 +1960,7 @@ class FightProc {
         if (now() < $mo->startTs) {
             return;
         }
-
+        echo '赛季的开始时间重置程序开始运行**********';
         $memKey = MemKey_GameRun::WorldBoss_StartTs(req()->zoneid);
         $mem = gMem();
 
@@ -1899,11 +1970,13 @@ class FightProc {
             $mem->set($memKey, $mo->startTs);
             $ts = $mo->startTs;
         }
-        if (now() - $ts >= $durationTs) {
-            $nextTs = TimeUtil::getNextDayTs($mo->startTs, $mo->ts);
+
+        if (now() - $ts > $durationTs) {
+            $nextTs = TimeUtil::getNextDayTs($ts, $mo->ts);
             $mem->set($memKey, $nextTs); //下一轮赛季的开始时间回存   
+            echo '完成重置下一个赛季的开始时间';
             //清理排行榜
-            self::ClearWorldBossRank();
+            //self::ClearWorldBossRank();
         }
     }
 
@@ -1919,15 +1992,17 @@ class FightProc {
         }
         $mem->deleteMulti($arr);
     }
-    
+
+    /**
+     * 每天登录的时候 检测轮次变化
+     */
     public static function ResetTurnNum() {
         $num = self::GetCurTurnNum();
-        if($num != ctx()->privateState->worldBoss_turnNum){
+        if ($num != ctx()->privateState->worldBoss_turnNum) {
             ctx()->privateState->worldBoss_turnNum = $num;
-            ctx()->privateState->worldBoss_received = array();          
+            ctx()->privateState->worldBoss_received = array();
         }
     }
-    
 
     /**
      * 当前所在世界boss 的轮次 //当前轮次可以算出来
@@ -1946,19 +2021,19 @@ class FightProc {
         return $num + 1;
     }
 
-    public static function GetWorldBoss_DamageMemKey(){
+    public static function GetWorldBoss_DamageMemKey() {
         $num = self::GetCurTurnNum();
         $memKey = MemKey_GameRun::WorldBoss_Rank($num, req()->zoneid);
         return $memKey;
     }
-    
+
     /**
      * 世界boss榜  伤害值入榜
      * @param type $gateIndex
      */
     public static function Ranking_DamageVal($damageVal) {
         //$num = self::GetCurTurnNum();
-        $memKey = self::GetWorldBoss_DamageMemKey();// MemKey_GameRun::WorldBoss_Rank($num, req()->zoneid);
+        $memKey = self::GetWorldBoss_DamageMemKey(); // MemKey_GameRun::WorldBoss_Rank($num, req()->zoneid);
         $mem = gMem();
 
         $uid = req()->uid;
@@ -1984,21 +2059,20 @@ class FightProc {
         //list() = req()->paras;
 
         $selfIsHasRank = 0; //本人是否上榜 0未上榜没有排名 1上榜则selfRank就是排名
-       
         //$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);               
+                $rankInfo = self::initOtherUidRankInfo($uid, $score, 3);
                 if ($rankInfo->uid == req()->uid && $index <= $rankStatistics) {
                     $selfIsHasRank = 1;
                     $selfRank = $rankInfo;
@@ -2016,86 +2090,98 @@ class FightProc {
         $ret = array(
             'rankInfo' => $retArr,
             'selfRank' => $selfRank,
-            'selfIsHasRank' => $selfIsHasRank,        
+            'selfIsHasRank' => $selfIsHasRank,
         );
         return Resp::ok($ret);
     }
-    
+
     /**
      * 6827 当前轮次下 自己的最高伤害值
      * @return type
-     */ 
+     */
     public static function GetWorldBoss_RankDamageVal() {
-        $val = gMem()->zscore(self::GetWorldBoss_DamageMemKey(), req()->uid);        
-        if($val == null){
+        $val = gMem()->zscore(self::GetWorldBoss_DamageMemKey(), req()->uid);
+        if ($val == null) {
             $val = 0;
-        }              
+        }
         UserProc::updateUserInfo();
         $ret = array(
-            'DamageVal' => intval($val),           
+            'DamageVal' => intval($val),
         );
         return Resp::ok($ret);
     }
-    
+
     /**
      * 6828 获取自己的排名信息
      * @return type
      */
-    public static function GetWorldBoss_GetSelfRank() {           
+    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 = gMem()->zscore(self::GetWorldBoss_DamageMemKey(), req()->uid);
+        if ($damageval == null) {
             $damageval = 0;
-        } 
-        $ins_rank = self::initOtherUidRankInfo(req()->uid, $damageval, 3);            
-        
+        }
+        $ins_rank = self::initOtherUidRankInfo(req()->uid, $damageval, 3);
+
         UserProc::updateUserInfo();
         $ret = array(
             '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){
+    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);    
-        
+        }
+        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){
+            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,          
+            'cash' => ctx()->baseInfo->cash,
+            'reward' => StoreProc::$reward,
+            'reward_Gem' => StoreProc::$reward_Gem,
+            'reward_equip' => StoreProc::$reward_equip,
         );
         return Resp::ok($ret);
     }
-    
+
+    /**
+     * 6830 世界boss结算
+     */
+    public static function WorldBoss_settle() {
+        list($damageNum) = req()->paras; //战斗结束伤害值      
+        //校验每个轮次最后10分钟, 不能战斗
+
+
+        self::Ranking_DamageVal($damageNum);
+
+        UserProc::updateUserInfo();
+        return Resp::ok(array());
+    }
+
 // </editor-fold>    
 }

+ 10 - 0
Gameserver/App/triggers/cyzhao.php

@@ -0,0 +1,10 @@
+<?php
+
+namespace loyalsoft;
+include_once dirname(__FILE__) . '/../main.php';
+
+new Req('{"uid":"0AD47A961006418C24E000EDF5AC0501","cmd":6000,"paras":[1722393844],"ts":1722393875,"zoneid":1,"SN":14,"TK":"4dbkqpf2","CV":"unityEditor"}');
+req()->uid = "0AD47A961006418C24E000EDF5AC0501";
+req()->zoneid = 1;
+
+echo FightProc::ResetWorldBossRank_StartTs();

+ 10 - 0
Gameserver/App/triggers/triggerSettleRankReward_WorldBoss.php

@@ -0,0 +1,10 @@
+<?php
+
+namespace loyalsoft;
+include_once dirname(__FILE__) . '/../main.php';
+
+new Req('{"uid":"0AD47A961006418C24E000EDF5AC0501","cmd":6000,"paras":[1722393844],"ts":1722393875,"zoneid":1,"SN":14,"TK":"4dbkqpf2","CV":"unityEditor"}');
+req()->uid = "0AD47A961006418C24E000EDF5AC0501";
+req()->zoneid = 1;
+
+echo FightProc::triggerSettleRankReward_worldBoss();

+ 6 - 0
Gameserver/App/triggers/trigger_resetWorldBossRank_StartTs.php

@@ -0,0 +1,6 @@
+<?php
+
+namespace loyalsoft;
+include_once dirname(__FILE__) . '/../main.php';
+
+echo FightProc::ResetWorldBossRank_StartTs();