Explorar o código

世界boss需求修改完成

cyzhao hai 2 meses
pai
achega
d2254fd328

+ 1 - 1
Gameserver/App/base/MemKey_GameRun.php

@@ -12,7 +12,7 @@ namespace loyalsoft;
 class MemKey_GameRun {
     // <editor-fold defaultstate="collapsed" desc="世界boss 排行榜">  
     /**
-     * 世界boss 开启时间记录
+     * 世界boss 开启时间记录【废弃】
      * @param type $zoneid
      * @return type
      */

+ 17 - 1
Gameserver/App/configs/GameConfig.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2025-04-07 17:28:44
+ // 日期: 2025-04-08 17:10:28
 ////////////////////
 
 namespace loyalsoft;
@@ -1336,6 +1336,22 @@ class GameConfig {
         return self::get_hash_item('pet_attr', "$rarity-$qual");
     }
     /**
+    * 世家boss轮次表
+    * @return \worldboss_turnnum
+    */
+    public static function worldboss_turnnum()
+    { 
+        static $a = null; 
+        return self::initValue($a, 'worldboss_turnnum');
+    }
+    /**
+    * @return \sm_worldboss_turnnum worldboss_turnnum item数据 
+    */
+    public static function worldboss_turnnum_getItem($itemid)
+    { 
+        return self::get_hash_item('worldboss_turnnum', $itemid);
+    }
+    /**
     * 当前版本(时间戳)
     * @return \ver
     */

+ 17 - 1
Gameserver/App/model/Const/GameConfig.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2025-04-08 10:50:39
+ // 日期: 2025-04-09 15:03:54
 ////////////////////
 
 /**
@@ -1334,6 +1334,22 @@ class GameConfig {
         return self::get_hash_item('pet_attr', "$rarity-$qual");
     }
     /**
+    * 世家boss轮次表
+    * @return \worldboss_turnnum
+    */
+    public static function worldboss_turnnum()
+    { 
+        static $a = null; 
+        return self::initValue($a, 'worldboss_turnnum');
+    }
+    /**
+    * @return \sm_worldboss_turnnum worldboss_turnnum item数据 
+    */
+    public static function worldboss_turnnum_getItem($itemid)
+    { 
+        return self::get_hash_item('worldboss_turnnum', $itemid);
+    }
+    /**
     * 当前版本(时间戳)
     * @return \ver
     */

+ 1 - 1
Gameserver/App/model/Const/sm_gate.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2025-03-14 16:22:01
+ // 日期: 2025-04-09 11:56:03
 ////////////////////
 
 

+ 1 - 1
Gameserver/App/model/Const/sm_gate_unlock.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2025-03-14 16:22:01
+ // 日期: 2025-04-09 11:56:03
 ////////////////////
 
 

+ 1 - 11
Gameserver/App/model/Const/sm_glc2.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2025-03-28 14:32:45
+ // 日期: 2025-04-09 15:06:40
 ////////////////////
 
 
@@ -83,11 +83,6 @@ class sm_glc2
     */
     public $FlipCardLotteryTask;
 
-    /**
-    * @var String 世界boss的bossId信息  
-    */
-    public $WorldBoss_BossId;
-
     /**
     * @var Int32 世界boss上榜排名  
     */
@@ -103,11 +98,6 @@ class sm_glc2
     */
     public $WorldBoss_RankRewardStatistics;
 
-    /**
-    * @var String 世界boss的bossId对应的关卡  
-    */
-    public $WorldBoss_gateId;
-
     /**
     * @var Int32 该区域最多展示8个灵宠  
     */

+ 1 - 1
Gameserver/App/model/Const/sm_predicate.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2025-03-26 11:43:22
+ // 日期: 2025-04-09 14:20:52
 ////////////////////
 
 

+ 47 - 0
Gameserver/App/model/Const/sm_worldboss_turnnum.php

@@ -0,0 +1,47 @@
+<?php
+////////////////////
+ // 由CodeGenerator创建。
+ // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
+ // author: gwang 
+ // 日期: 2025-04-08 15:59:32
+////////////////////
+
+
+/**
+ * Static Model worldboss_turnnum 世家boss轮次表
+ */
+class sm_worldboss_turnnum
+{
+
+    /**
+    * @var Int32 轮次id  
+    */
+    public $turnId;
+
+    /**
+    * @var String 开始时间  
+    */
+    public $startTs;
+
+    /**
+    * @var String 结束时间  
+    */
+    public $endTs;
+
+    /**
+    * @var Int32 关卡id default(0) 
+    */
+    public $gateId;
+
+    /**
+    * @var Int32 bossId default(0) 
+    */
+    public $bossId;
+
+    /**
+    * @var Int32 对应世界boss伤害表里的orderId  
+    */
+    public $orderId;
+
+}
+

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

@@ -537,13 +537,7 @@ class Info_PrivateState extends Object_ext {
      * @var type
      */
     public $flipCardNum_turnNum = 0;
-    
-    /**
-     * 世界boss开始时间
-     * @var type
-     */
-    public $worldBoss_startTs = 0;
-    
+      
     /**
      * 世界boss 当前轮次
      * @var type

+ 8 - 0
Gameserver/App/process/EmailProc.php

@@ -603,6 +603,14 @@ class EmailProc {
         self::InsertMail($zoneid, $uid, $mail);
     }
     
+    public static function SendWorldBossDamageRewardMail($zoneid, $uid, $reward) {
+        $str = "本轮世界boss战中,您有未领取的伤害阶段挑战奖励,现已通过邮件发放,请及时查收!";
+        $mail = new Ins_Email(null, enum_Mail_Type::SysTemMail, "世界boss挑战阶段奖励", #
+                $str, $reward);
+        self::InsertMail($zoneid, $uid, $mail);
+    }
+    
+    
 // </editor-fold>
 //    
     

+ 115 - 79
Gameserver/App/process/FightProc.php

@@ -1318,7 +1318,7 @@ class FightProc {
 
         $score = self::GetRankScoreUid($uid, 2);
         //$power = self::countUserFightPower();
-        $power = FightPower_Calculate::GetFightPower();   
+        $power = FightPower_Calculate::GetFightPower();
         $arr = array();
         $arr["$uid"] = self::createScore($power);
         $mem->zadd($memKey, $arr);
@@ -1879,7 +1879,7 @@ class FightProc {
     /**
      * 结算世界boss排行奖励[定时发放奖励接口]
      */
-    public static function triggerSettleRankReward_worldBoss() {      
+    public static function triggerSettleRankReward_worldBoss() {
         //校验下是否处在发放奖励信息的时间点 【每个轮次最后一天的最后10分钟】                             
         $mo = GameConfig::subfun_unlock_getItem(Enum_SubFunType::WorldBoss);
 
@@ -1891,38 +1891,27 @@ class FightProc {
         }
 
         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();
+        $turnNum = self::GetCurTurnNum();
+        $turnnumMo = GameConfig::worldboss_turnnum_getItem($turnNum);
+        if ($turnnumMo != null) {
+            $lastDay = TimeUtil::totalDays($turnnumMo->endTs);
+            if ($curDay == $lastDay && $turnnumMo->endTs - now() < 600) {
+                $damageMemKey = self::GetWorldBoss_DamageMemKey();
+                echo '发放奖励的menkey===============:';
+                echo "$damageMemKey";
+                $mem = gMem();
+                if ($mem->exists($damageMemKey)) {
+                    FightProc::settleRankReward_worldBoss($turnnumMo->orderId);
+                }
             }
         }
 
         echo '----世界boss的排行奖励-发放完成----';
     }
 
-    public static function settleRankReward_worldBoss() {
+    public static function settleRankReward_worldBoss($orderId) {
         echo '----开始发放世界boss的排行奖励-----';
         $dic = GameConfig::worldboss_rankreward();
         if ($dic == null) {
@@ -1939,7 +1928,8 @@ class FightProc {
             }
 
             foreach ($list as $uid => $score) {
-                $index += 1;
+                $index += 1;               
+                self::settleDamageReward_worldBoss($orderId,$uid,$score);
                 EmailProc::SendWorldBossRewardMail(req()->zoneid, $uid, $mo->reward, $index);
             }
         }
@@ -1951,35 +1941,48 @@ class FightProc {
 //        }
     }
 
+    public static function settleDamageReward_worldBoss($orderId,$uid,$demageVal) {            
+        $demageList = GameConfig::worldboss_demagereward_getItemArray($orderId);
+        
+        $userInfo = UserProc::getUserGame(req()->zoneid, $uid);
+        $worldBoss_received = $userInfo->privateState->worldBoss_received;
+        foreach ($demageList as $dMo) {
+            if ($demageVal >= $dMo->demageValId && !in_array($dMo->demageValId, $worldBoss_received)) {
+                EmailProc::SendWorldBossDamageRewardMail(req()->zoneid, $uid, $dMo->reward);
+            }
+        } 
+    }
+
     /**
-     * 重置每个赛季的开始时间 一个重置每个赛季的开始时间赛季完成后  排名数据清理掉  同时轮次要改变 [定时接口]
+     * 重置每个赛季的开始时间 一个重置每个赛季的开始时间赛季完成后  排名数据清理掉  同时轮次要改变 [定时接口]----废弃
      */
     public static function ResetWorldBossRank_StartTs() {
-        $mo = GameConfig::subfun_unlock_getItem(Enum_SubFunType::WorldBoss);
-        if ($mo == null) {
-            return;
-        }
-        if (now() < $mo->startTs) {
-            return;
-        }
-        echo '赛季的开始时间重置程序开始运行**********';
-        $memKey = MemKey_GameRun::WorldBoss_StartTs(req()->zoneid);
-        $mem = gMem();
-
-        $ts = $mem->get($memKey);
-        $durationTs = $mo->ts * 24 * 60 * 60;
-        if ($ts == null && now() - $mo->startTs < $durationTs) {
-            $mem->set($memKey, $mo->startTs);
-            $ts = $mo->startTs;
-        }
-
-        if (now() - $ts > $durationTs) {
-            $nextTs = TimeUtil::getNextDayTs($ts, $mo->ts);
-            $mem->set($memKey, $nextTs); //下一轮赛季的开始时间回存   
-            echo '完成重置下一个赛季的开始时间';
-            //清理排行榜
-            self::ClearWorldBossRank();
-        }
+        return;
+//        $mo = GameConfig::subfun_unlock_getItem(Enum_SubFunType::WorldBoss);
+//        if ($mo == null) {
+//            return;
+//        }
+//        if (now() < $mo->startTs) {
+//            return;
+//        }
+//        echo '赛季的开始时间重置程序开始运行**********';
+//        $memKey = MemKey_GameRun::WorldBoss_StartTs(req()->zoneid);
+//        $mem = gMem();
+//
+//        $ts = $mem->get($memKey);
+//        $durationTs = $mo->ts * 24 * 60 * 60;
+//        if ($ts == null && now() - $mo->startTs < $durationTs) {
+//            $mem->set($memKey, $mo->startTs);
+//            $ts = $mo->startTs;
+//        }
+//
+//        if (now() - $ts > $durationTs) {
+//            $nextTs = TimeUtil::getNextDayTs($ts, $mo->ts);
+//            $mem->set($memKey, $nextTs); //下一轮赛季的开始时间回存   
+//            echo '完成重置下一个赛季的开始时间';
+//            //清理排行榜
+//            self::ClearWorldBossRank();
+//        }
     }
 
     /**
@@ -1999,21 +2002,21 @@ class FightProc {
      * 每天登录的时候 检测轮次变化
      */
     public static function ResetTurnNum() {
-        if(!FightProc::isFunUnlock(25)){
+        if (!FightProc::isFunUnlock(25)) {
             return;
         }
-        
+
         $subMo = GameConfig::subfun_unlock_getItem(Enum_SubFunType::WorldBoss);
-        if(ctx()->privateState->worldBoss_turnNum < 0){
+        if (ctx()->privateState->worldBoss_turnNum < 0) {
             ctx()->privateState->worldBoss_turnNum = 0;
         }
-         
-        if(now() < $subMo->startTs){
+
+        if (now() < $subMo->startTs) {
             return;
         }
-        
+
         $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();
         }
@@ -2023,19 +2026,31 @@ class FightProc {
      * 当前所在世界boss 的轮次 //当前轮次可以算出来
      */
     public static function GetCurTurnNum() {
-        $memKey = MemKey_GameRun::WorldBoss_StartTs(req()->zoneid);
-        $mem = gMem();
-        $ts = $mem->get($memKey);
-
-        $curDay = TimeUtil::totalDays(now());
-        $lastDay = TimeUtil::totalDays($ts);
-
-        $val = $curDay - $lastDay;
-        $num = intval($val / 3);
+        $dic = GameConfig::worldboss_turnnum();
+        foreach ($dic as $turnId => $mo) {
+            if (now() >= $mo->startTs && now() < $mo->endTs) {
+                return $turnId;
+            }
+        }
+        return 0;
 
-        return $num + 1;
+//        $memKey = MemKey_GameRun::WorldBoss_StartTs(req()->zoneid);
+//        $mem = gMem();
+//        $ts = $mem->get($memKey);
+//
+//        $curDay = TimeUtil::totalDays(now());
+//        $lastDay = TimeUtil::totalDays($ts);
+//
+//        $val = $curDay - $lastDay;
+//        $num = intval($val / 3);
+//
+//        return $num + 1;
     }
 
+    /**
+     * 世界boss排名榜 memkey
+     * @return type
+     */
     public static function GetWorldBoss_DamageMemKey() {
         $num = self::GetCurTurnNum();
         $memKey = MemKey_GameRun::WorldBoss_Rank($num, req()->zoneid);
@@ -2141,14 +2156,13 @@ class FightProc {
         }
         $ins_rank = self::initOtherUidRankInfo(req()->uid, $damageval, 3);
 
-        $tsMemKey = MemKey_GameRun::WorldBoss_StartTs(req()->zoneid);
-        $ts = gMem()->get($tsMemKey);
-        ctx()->privateState->worldBoss_startTs = $ts;
+        //$tsMemKey = MemKey_GameRun::WorldBoss_StartTs(req()->zoneid);
+        //$ts = gMem()->get($tsMemKey);
+        //ctx()->privateState->worldBoss_startTs = $ts;
 
         UserProc::updateUserInfo();
         $ret = array(
             'selfRank' => $ins_rank,
-            'worldBoss_startTs' => $ts,
         );
         return Resp::ok($ret);
     }
@@ -2169,9 +2183,12 @@ class FightProc {
         my_Assert($damageValId <= $val, ErrCode::active_worldBoss_notClaimRewards);
 
         $turnNum = self::GetCurTurnNum();
-        $list = GameConfig::worldboss_demagereward_getItemArray($turnNum);
+        $turnnumMo = GameConfig::worldboss_turnnum_getItem($turnNum);
+        my_Assert($turnnumMo != null, ErrCode::err_const_no);
+
+        $list = GameConfig::worldboss_demagereward_getItemArray($turnnumMo->orderId);
         foreach ($list as $key => $mo) {
-            if ($mo->demageValId == $damageValId && $mo->orderId == $turnNum) {
+            if ($mo->demageValId == $damageValId && $mo->orderId == $turnnumMo->orderId) {
                 StoreProc::AddMultiItemInStore($mo->reward);
                 break;
             }
@@ -2195,10 +2212,29 @@ class FightProc {
     public static function WorldBoss_settle() {
         list($damageNum) = req()->paras; //战斗结束伤害值      
         //校验每个轮次最后10分钟, 不能战斗
-
         my_Assert(FightProc::isFunUnlock(25), ErrCode::active_funUnlock);
-        self::Ranking_DamageVal($damageNum);
-
+        $tag = true;
+        
+        $curDay = TimeUtil::totalDays();
+        $turnNum = self::GetCurTurnNum();
+        $turnnumMo = GameConfig::worldboss_turnnum_getItem($turnNum);
+        if ($turnnumMo != null) {
+            $lastDay = TimeUtil::totalDays($turnnumMo->endTs);
+            if ($curDay == $lastDay && $turnnumMo->endTs - now() < 600) {
+                $tag = false;
+            }
+        }
+        
+        if (ctx()->privateState->worldBoss_turnNum != $turnNum){
+            ctx()->privateState->worldBoss_turnNum = $turnNum;
+            ctx()->privateState->worldBoss_received = array();
+            $tag = false; 
+        }
+            
+        if($tag){
+            self::Ranking_DamageVal($damageNum);
+        }
+        
         UserProc::updateUserInfo();
         return Resp::ok(array());
     }