cyzhao 7 месяцев назад
Родитель
Сommit
99a03f6e90

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

@@ -173,6 +173,11 @@ class CmdCode {
      * 限时贩售
      */
     const cmd_active_limitTsBuy = 6108;
+    
+    /**
+     * 6109 战令奖励领取
+     */
+    const cmd_active_battlePassDrawReward = 6109;
 // </editor-fold>
 // <editor-fold defaultstate="collapsed" desc="任务操作码 - 62xx">
 

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

@@ -418,6 +418,11 @@ class ErrCode {
      * 没有达到解锁等级
      */
     const evolve_canotUnlock_levelLimit = 3215;
+    
+    /**
+     * 关卡没有被胜利通关
+     */
+    const evolve_GateNoPass = 3216;
 // </editor-fold>
 //
 //   // <editor-fold defaultstate="collapsed" desc="    store 3300    ">
@@ -587,6 +592,16 @@ class ErrCode {
      * 兑换次数已经用完无法再次兑换
      */
     const active_lotteryExchangeNumLimit = 3514;
+    
+    /**
+     * 消耗体力值不足
+     */
+    const active_costTiliNotEnough = 3515;
+    
+    /**
+     * 活跃点数量不足
+     */
+    const active_pointNotEnough = 3516;
 // </editor-fold>
 //
 //   // <editor-fold defaultstate="collapsed" desc="    task 3600    ">

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

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-10-16 12:02:32
+ // 日期: 2024-10-16 16:43:27
 ////////////////////
 
 /**

+ 2 - 2
Gameserver/App/model/Const/sm_activity_battlepass.php

@@ -39,12 +39,12 @@ class sm_activity_battlepass
     /**
     * @var String 初级奖励  
     */
-    public $rewards_base;
+    public $rewards_1;
 
     /**
     * @var String 高级奖励  
     */
-    public $rewards_high;
+    public $rewards_2;
 
 }
 

+ 2 - 2
Gameserver/App/model/Const/sm_activity_battlepass_type.php

@@ -39,12 +39,12 @@ class sm_activity_battlepass_type
     /**
     * @var String 初级奖励  
     */
-    public $rewards_base;
+    public $rewards_1;
 
     /**
     * @var String 高级奖励  
     */
-    public $rewards_high;
+    public $rewards_2;
 
 }
 

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

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-10-16 11:35:52
+ // 日期: 2024-10-16 15:12:53
 ////////////////////
 
 

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

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-10-10 14:35:52
+ // 日期: 2024-10-16 16:43:45
 ////////////////////
 
 

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

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-10-10 14:35:52
+ // 日期: 2024-10-16 16:43:45
 ////////////////////
 
 

+ 13 - 0
Gameserver/App/model/User/Enum_SubFunType.php

@@ -51,4 +51,17 @@ class Enum_SubFunType {
      */
     const LimitTsSale = 8;
     
+    /**
+     * 活跃点战令
+     */
+    const ActivePoint_BattlePass = 9;
+    /**
+     * 体力战令
+     */
+    const Tili_BattleBass = 10;
+    /**
+     * 关卡战令
+     */
+    const Gate_BattleBass = 11;
+    
 }

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

@@ -371,7 +371,56 @@ class Info_PrivateState extends Object_ext {
      */
     #[ArrayType]
     public $limitTsBuy_RewardRecord = array();
-       
+    
+    /**
+     * 战令奖励领取记录
+     */
+    #[ArrayType]
+    public $battlePassRewardReceived = array();
+
+    /**
+     * 关卡战令高级战令购买时间戳记录
+     * @var type
+     */
+    public $battlePass_gate_cost_ts = 0;
+
+    /**
+     * 活跃点战令高级战令购买时间戳记录
+     * @var type
+     */
+    public $battlePass_activePoint_cost_ts = 0;
+
+    /**
+     * 体力战令高级战令购买时间戳记录
+     * @var type
+     */
+    public $battlePass_tili_cost_ts = 0;
+    
+    /**
+     * 关卡战令开启时间戳记录
+     * @var type
+     */
+    //public $battlePass_gate_open_ts = 0;
+
+    /**
+     * 活跃点战令开启时间戳记录
+     * @var type
+     */
+    public $battlePass_activePoint_open_ts = 0;
+
+    /**
+     * 体力战令开启时间戳记录
+     * @var type
+     */
+    public $battlePass_tili_open_ts = 0;
+    
+    /**
+     * 战令统计的 日常周常 活跃点
+     * @var type
+     */
+    public $battlePass_taskPoint = 0;
+
+
     public function initialize() {
 //        $this->junbeiShopNumRecord = new \stdClass();
 //        $this->junbeiShop_AllNumRecord = new \stdClass();

+ 6 - 0
Gameserver/App/model/User/Info_UserBase.php

@@ -113,6 +113,12 @@ class Info_UserBase extends Object_ext {
      * @var type
      */
     public $fRechargePriceReceived = 0;
+    
+    /**
+     * 消耗体力统计
+     * @var type
+     */
+    public $cost_tili = 0;
 
     public function initialize() {
 //        my_Assert(GameConfig::primordial_data(), "找不到账号初始化数据");         # 防御

+ 69 - 0
Gameserver/App/process/ActiveProc.php

@@ -38,6 +38,8 @@ class ActiveProc {
                 return ActiveProc::Day7_AccumulateDrawreward();
             case CmdCode::cmd_active_limitTsBuy:                                # 6108 限时贩售
                 return ActiveProc::LimitTsBuy_Drawreward();
+            case CmdCode::cmd_active_battlePassDrawReward:                      # 6109 战令奖励领取
+                return ActiveProc::BattlePassDrawReward();
             default:
                 Err(ErrCode::cmd_err);
         }
@@ -481,5 +483,72 @@ class ActiveProc {
                     'reward_Gem' => StoreProc::$reward_Gem,
         ));
     }
+    
+    /**
+     * 6109 战令奖励领取
+     */
+    public static function BattlePassDrawReward() {
+        list($type,$id) = req()->paras;                                               
 
+        $mo = GameConfig::activity_battlepass_getItem($id);                     # 查询奖励数据
+        my_Assert(null != $mo, ErrCode::err_const_no);                          # 防御找不到配置
+        $subFunType = $mo->type;
+        $typeId = $mo->typeId;
+        $str = $subFunType.'-'.$type.'-'.$typeId;
+        
+        switch ($subFunType) {
+            case Enum_SubFunType::ActivePoint_BattlePass:
+                $point =ctx()->privateState->battlePass_taskPoint;                         
+                my_Assert($typeId >= $point, ErrCode::active_pointNotEnough);
+
+                break;
+            case Enum_SubFunType::Tili_BattleBass:
+                my_Assert($typeId >= ctx()->base(false)->cost_tili, ErrCode::active_costTiliNotEnough);
+
+                break;
+            case Enum_SubFunType::Gate_BattleBass:
+                my_Assert(StlUtil::dictHasProperty(ctx()->gates->GateList,$typeId), ErrCode::gate_GateNoUnlock);
+                my_Assert(ctx()->gates->GateList->$typeId->pass > 0, ErrCode::evolve_GateNoPass);
+                                                
+                break;
+
+            default:
+                break;
+        }
+        my_Assert(!in_array($str, ctx()->privateState->battlePassRewardReceived), ErrCode::active_hasgetted);
+        $key = 'rewards_'.$type;
+        StoreProc::AddMultiItemInStore($mo->$key);                              # 发放奖励
+        
+        ctx()->privateData(true)->battlePassRewardReceived[] = $str;
+               
+        UserProc::updateUserInfo();                                             # 回存
+        return Resp::ok(array('gold' => ctx()->baseInfo->gold,
+                    'cash' => ctx()->baseInfo->cash,
+                    'store' => ctx()->store,
+                    'heros' => ctx()->heros,
+                    //'privateState' => ctx()->privateState,
+                    'reward' => StoreProc::$reward,
+                    'reward_Gem' => StoreProc::$reward_Gem,
+        ));
+    }
+
+    /**
+     * 重置战令奖励信息 一个月一清理但是不同战令 开始时间不同所以 清理时间也不同
+     * @param type $type
+     */
+    public static function ResetBattlePassReward($type) {
+        $list = ctx()->privateState->battlePassRewardReceived;
+        $rmArr = array();
+        foreach ($list as $str) {
+            $arr = explode('-', $str);
+            if($arr[0] == $type){
+                $rmArr[] = $str;
+            }
+        }
+        
+        foreach ($rmArr as $k) {
+            StlUtil::arrayRemove(ctx()->privateData(true)->battlePassRewardReceived, $k); 
+        }
+    }
+    
 }

+ 14 - 4
Gameserver/App/process/FightProc.php

@@ -246,6 +246,7 @@ class FightProc {
 
         ctx()->gates->fightSweepNum += 1;
         ctx()->baseInfo->Consume_tili($costTili);
+        ctx()->base(true)->cost_tili += $costTili;
 
         $wavesArr = GameConfig::waves_getItemArray($passGateId);
         $count = count($wavesArr);
@@ -386,6 +387,7 @@ class FightProc {
             ctx()->gates()->TowerGateInfo()->TodayChanNum--;                    # 增加次数
         } else {                                                                # 主线剧情
             my_Assert(ctx()->base(true)->Consume_tili($mo->cost_tili), ErrCode::notenough_tili);
+            ctx()->base(true)->cost_tili += $mo->cost_tili;
         }
         UserProc::updateUserInfo();
         return Resp::ok(array("tili" => ctx()->baseInfo->tili, "tili_ts" => ctx()->baseInfo->tili_ts));
@@ -983,20 +985,28 @@ class FightProc {
                 continue;
             }
 
-            if ($mo->type == 1 && $mo->id == Enum_SubFunType::Day7_Happy) {
+            if ($mo->funTypeId == 1 && $mo->id == Enum_SubFunType::Day7_Happy) {
                 TaskProc::Day7TaskReset();
             }
-            if ($mo->type == 2 && $mo->id == Enum_SubFunType::DailyTask) {
+            if ($mo->funTypeId == 2 && $mo->id == Enum_SubFunType::DailyTask) {
                 TaskProc::DailyTaskReset(true);
             }
 
-            if ($mo->type == 2 && $mo->id == Enum_SubFunType::WeekTask) {
+            if ($mo->funTypeId == 2 && $mo->id == Enum_SubFunType::WeekTask) {
                 TaskProc::WeekTaskReset(true);
             }
 
-            if ($mo->type == 5 && $mo->id == Enum_SubFunType::Day7_Sign) {
+            if ($mo->funTypeId == 5 && $mo->id == Enum_SubFunType::Day7_Sign) {
                 ActiveProc::DailyResetDay7Task(true);
             }
+            
+            if ($mo->funTypeId == 5 && $mo->id == Enum_SubFunType::ActivePoint_BattlePass) {
+                ctx()->privateState->battlePass_activePoint_open_ts = now();                            
+            }
+            
+            if ($mo->funTypeId == 5 && $mo->id == Enum_SubFunType::Tili_BattleBass) {
+                ctx()->privateState->battlePass_tili_open_ts = now();   
+            }
         }
     }
 

+ 6 - 2
Gameserver/App/process/TaskProc.php

@@ -91,10 +91,12 @@ class TaskProc {
                 ctx()->task->day7Point += $point;
                 break;
             case Enum_ActiveTaskType::DailyTask:
+                ctx()->privateData()->battlePass_taskPoint += $activePointArr[1];
                 ctx()->task->dailyTaskPoint += $point;
                 TaskProc::OnReceiveTaskPrize();
                 break;
             case Enum_ActiveTaskType::WeekTask:
+                ctx()->privateData()->battlePass_taskPoint += $activePointArr[1];
                 ctx()->task->weekTaskPoint += $point;
                 TaskProc::OnReceiveTaskPrize();
                 break;
@@ -115,6 +117,7 @@ class TaskProc {
                     'gold' => ctx()->baseInfo->gold,
                     'cash' => ctx()->baseInfo->cash,
                     'heros' => ctx()->heros,
+                    'battlePass_taskPoint'=> ctx()->privateData()->battlePass_taskPoint,
         ));
     }
 
@@ -203,13 +206,13 @@ class TaskProc {
                 StoreProc::$reward[] = $ins_activeTaskInfo->mo()->activePoint;
                 break;
             case Enum_ActiveTaskType::DailyTask:
-
+                ctx()->privateData()->battlePass_taskPoint += $activePointArr[1];
                 ctx()->task->dailyTaskPoint += $activePointArr[1];
                 StoreProc::$reward[] = $ins_activeTaskInfo->mo()->activePoint;
                 TaskProc::OnReceiveTaskPrize();
                 break;
             case Enum_ActiveTaskType::WeekTask:
-
+                ctx()->privateData()->battlePass_taskPoint += $activePointArr[1];
                 ctx()->task->weekTaskPoint += $activePointArr[1];
                 StoreProc::$reward[] = $ins_activeTaskInfo->mo()->activePoint;
                 TaskProc::OnReceiveTaskPrize();
@@ -226,6 +229,7 @@ class TaskProc {
                     'gold' => ctx()->baseInfo->gold,
                     'cash' => ctx()->baseInfo->cash,
                     'heros' => ctx()->heros,
+                    'battlePass_taskPoint'=> ctx()->privateData()->battlePass_taskPoint,
         ));
     }
 

+ 19 - 0
Gameserver/App/process/UserProc.php

@@ -498,6 +498,25 @@ class UserProc {
         if (ctx()->privateState->nextDayLogin > 0 && $curDay - $nextDay >= $day) {
             ActiveProc::ResetLimitTsBuy();
         }
+        
+        $nowtime = time(); 
+        $curMonth = date('m', $nowtime); // 当前指定日期的月份        
+        $lastMonth_activePoint = date('m',ctx()->privateState->battlePass_activePoint_open_ts);
+        if($curMonth != $lastMonth_activePoint){
+            ctx()->privateState->battlePass_activePoint_open_ts = now();
+            ctx()->privateData(true)->battlePass_activePoint_cost_ts = 0;
+            ctx()->privateData(true)->battlePass_taskPoint = 0;
+            ActiveProc::ResetBattlePassReward(Enum_SubFunType::ActivePoint_BattlePass);
+        }
+        
+        $lastMonth_tili = date('m',ctx()->privateState->battlePass_tili_open_ts);
+        if($curMonth != $lastMonth_tili){
+            ctx()->privateState->battlePass_tili_open_ts = now();
+            ctx()->privateData(true)->battlePass_tili_cost_ts = 0;
+            ctx()->base()->cost_tili = 0;
+            ActiveProc::ResetBattlePassReward(Enum_SubFunType::Tili_BattleBass);
+        }
+            
     }
 
     static function OnLogin_DateDeal() {