Parcourir la source

主线任务接口

cyzhao il y a 10 mois
Parent
commit
33ef2cda64
33 fichiers modifiés avec 193 ajouts et 662 suppressions
  1. 3 1
      Gameserver/App/configs/GameConfig.php
  2. 1 1
      Gameserver/App/model/Const/GameConfig.php
  3. 7 2
      Gameserver/App/model/Const/sm_activeTask.php
  4. 7 2
      Gameserver/App/model/Const/sm_activeTask_type.php
  5. 1 1
      Gameserver/App/model/Const/sm_announcement.php
  6. 1 1
      Gameserver/App/model/Const/sm_evolve.php
  7. 1 1
      Gameserver/App/model/Const/sm_fun_unlock.php
  8. 1 1
      Gameserver/App/model/Const/sm_gate.php
  9. 1 1
      Gameserver/App/model/Const/sm_gate_unlock.php
  10. 1 1
      Gameserver/App/model/Const/sm_gem.php
  11. 7 2
      Gameserver/App/model/Const/sm_globalsettings.php
  12. 1 1
      Gameserver/App/model/Const/sm_hero.php
  13. 1 1
      Gameserver/App/model/Const/sm_heroType_typeId.php
  14. 1 1
      Gameserver/App/model/Const/sm_item.php
  15. 3 1
      Gameserver/App/model/Const/sm_item_2023_box.php
  16. 2 2
      Gameserver/App/model/Const/sm_plots.php
  17. 1 1
      Gameserver/App/model/Const/sm_predicate.php
  18. 1 1
      Gameserver/App/model/Const/sm_skills.php
  19. 1 1
      Gameserver/App/model/Const/sm_sysmail.php
  20. 0 147
      Gameserver/App/model/Const/sm_task_step.php
  21. 0 73
      Gameserver/App/model/Const/sm_taskcard.php
  22. 1 1
      Gameserver/App/model/Const/sm_waveItem.php
  23. 1 1
      Gameserver/App/model/Const/sm_waves.php
  24. 7 0
      Gameserver/App/model/User/Enum_ActiveTaskCmdType.php
  25. 2 0
      Gameserver/App/model/User/Enum_ActiveTaskType.php
  26. 1 3
      Gameserver/App/model/User/Info_Task.php
  27. 3 0
      Gameserver/App/model/User/Info_UserBase.php
  28. 0 95
      Gameserver/App/model/User/Ins_TaskCard.php
  29. 0 209
      Gameserver/App/model/User/Ins_TaskStep.php
  30. 21 1
      Gameserver/App/model/User/Ins_TaskStep_Active.php
  31. 7 3
      Gameserver/App/process/FightProc.php
  32. 106 106
      Gameserver/App/process/TaskProc.php
  33. 2 0
      Gameserver/App/process/UserProc.php

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

@@ -3,9 +3,11 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-07-30 17:48:35
+ // 日期: 2024-08-05 17:51:50
 ////////////////////
 
+namespace loyalsoft;
+
 /**
  * 常量配置数据 
  */

+ 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-07-30 17:48:35
+ // 日期: 2024-08-05 17:51:50
 ////////////////////
 
 /**

+ 7 - 2
Gameserver/App/model/Const/sm_activeTask.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-07-25 15:05:48
+ // 日期: 2024-08-05 17:35:46
 ////////////////////
 
 
@@ -29,7 +29,7 @@ class sm_activeTask
     public $day;
 
     /**
-    * @var Int32 解锁内容类型 1: 7日狂欢 2 日常 3周常 default(0) 
+    * @var Int32 解锁内容类型 1: 7日狂欢 2 日常 3周常 4 :主线任务 default(0) 
     */
     public $type;
 
@@ -110,5 +110,10 @@ class sm_activeTask
     */
     public $gotoType;
 
+    /**
+    * @var Int32 主线下一个任务id  
+    */
+    public $next;
+
 }
 

+ 7 - 2
Gameserver/App/model/Const/sm_activeTask_type.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-07-25 15:05:48
+ // 日期: 2024-08-05 17:35:46
 ////////////////////
 
 
@@ -29,7 +29,7 @@ class sm_activeTask_type
     public $day;
 
     /**
-    * @var Int32 解锁内容类型 1: 7日狂欢 2 日常 3周常 default(0) 
+    * @var Int32 解锁内容类型 1: 7日狂欢 2 日常 3周常 4 :主线任务 default(0) 
     */
     public $type;
 
@@ -110,5 +110,10 @@ class sm_activeTask_type
     */
     public $gotoType;
 
+    /**
+    * @var Int32 主线下一个任务id  
+    */
+    public $next;
+
 }
 

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

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-06-13 16:05:45
+ // 日期: 2024-08-01 18:35:48
 ////////////////////
 
 

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

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-07-16 17:05:47
+ // 日期: 2024-07-30 16:35:48
 ////////////////////
 
 

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

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-07-23 12:13:42
+ // 日期: 2024-07-31 15:25:56
 ////////////////////
 
 

+ 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 
- // 日期: 2024-07-25 15:36:41
+ // 日期: 2024-08-01 09:15:19
 ////////////////////
 
 

+ 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 
- // 日期: 2024-07-25 15:36:41
+ // 日期: 2024-08-01 09:15:19
 ////////////////////
 
 

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

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-07-17 16:45:48
+ // 日期: 2024-07-31 16:05:48
 ////////////////////
 
 

+ 7 - 2
Gameserver/App/model/Const/sm_globalsettings.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-07-18 10:22:52
+ // 日期: 2024-08-05 17:22:52
 ////////////////////
 
 
@@ -174,7 +174,7 @@ class sm_globalsettings
     public $tower_refreshCost;
 
     /**
-    * @var int 通关第5关解锁7日活动  
+    * @var int 通关第关解锁7日活动  
     */
     public $GateUnlock_7DayActive;
 
@@ -248,5 +248,10 @@ class sm_globalsettings
     */
     public $skillRefreshNum_Limit_Guanggao;
 
+    /**
+    * @var int 主线任务起始任务id  
+    */
+    public $FirstMainTaskId;
+
 }
 

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

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-07-25 14:35:48
+ // 日期: 2024-08-02 15:29:02
 ////////////////////
 
 

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

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-07-25 14:35:48
+ // 日期: 2024-08-02 15:29:02
 ////////////////////
 
 

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

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-07-25 09:25:44
+ // 日期: 2024-07-30 17:21:26
 ////////////////////
 
 

+ 3 - 1
Gameserver/App/model/Const/sm_item_2023_box.php

@@ -34,7 +34,9 @@ class sm_item_2023_box
     public $type;
 
     /**
-    * @var String 宝箱里内容信息  
+    * @var String 宝箱里内容信息
+    *  随机类型:道具数量最小值-数量最大值;道具ID:道具随机权重,道具ID:道具权重....(多道具“,”分隔)
+    *  固定类型:道具ID,道具数量;道具ID,道具数量;....(多道具“,”分隔)  
     */
     public $contents;
 

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

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-07-17 17:58:42
+ // 日期: 2024-08-01 17:04:24
 ////////////////////
 
 
@@ -45,7 +45,7 @@ class sm_plots
     public $position;
 
     /**
-    * @var Int32 显式时间:(自战斗开始以来的秒数)(stage类型>=3的时候生效)  
+    * @var Int32 显式时间:(波次id)(stage类型>=3的时候生效)  
     */
     public $fireTs;
 

+ 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 
- // 日期: 2024-07-25 15:35:14
+ // 日期: 2024-08-02 14:50:46
 ////////////////////
 
 

+ 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-07-25 15:05:48
+ // 日期: 2024-08-05 12:05:48
 ////////////////////
 
 

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

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-06-07 18:24:36
+ // 日期: 2024-08-05 16:41:11
 ////////////////////
 
 

+ 0 - 147
Gameserver/App/model/Const/sm_task_step.php

@@ -1,147 +0,0 @@
-<?php
-////////////////////
- // 由CodeGenerator创建。
- // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
- // author: gwang 
- // 日期: 2024-03-20 15:21:24
-////////////////////
-
-
-/**
- * Static Model task_step 任务表
- */
-class sm_task_step
-{
-
-    /**
-    * @var Int32 索引 default(0) 
-    */
-    public $id;
-
-    /**
-    * @var String 名称  
-    */
-    public $name;
-
-    /**
-    * @var Int32 类型(1.主线任务;2.每日任务;3.特殊任务;4.软引导;5.任务卡; 999 新手引导) default(0) 
-    */
-    public $type;
-
-    /**
-    * @var Int32 等级要求(未达到等级时, 前往变为等级提示) default(0) 
-    */
-    public $minlv;
-
-    /**
-    * @var String 图标  
-    */
-    public $icon;
-
-    /**
-    * @var String 图片  
-    */
-    public $img;
-
-    /**
-    * @var String [言灵] 前置任务列表(多个任务id逗号隔开,没有则置空)  
-    */
-    public $prelist;
-
-    /**
-    * @var String [言灵] 任务的起始动作(动作表id逗号隔开,没有则置空)  
-    */
-    public $startact;
-
-    /**
-    * @var Int32 指令类型(默认为cmd的百位数) default(0) 
-    */
-    public $cmdtype;
-
-    /**
-    * @var Int32 事件件码指令(详见文档) default(0) 
-    */
-    public $cmd;
-
-    /**
-    * @var String 参数 (若参数为多个,需要自己跟策划约定好解析规则)这里面都是用的==判断  
-    */
-    public $paras;
-
-    /**
-    * @var Int32 条件计数 (max)(>=max) default(1) 
-    */
-    public $num;
-
-    /**
-    * @var String [神宠] 奖励串 (言灵单条任务不计奖励, 放到任务卡上. 任务完成放到)  
-    */
-    public $prizes;
-
-    /**
-    * @var String 下一个任务(如果是任务卡的子任务则填下一个子任务id,如果是最后一个子任务则填0) default(0) 
-    */
-    public $next;
-
-    /**
-    * @var String 【废弃】如果发生重新登录或者切换场景的情况,回撤到指定的步骤id(2022.3.3)(该步骤的完成度也回撤)(2022.8有了地图数据存储后无需回撤了) default(0) 
-    */
-    public $fallback;
-
-    /**
-    * @var String 描述  
-    */
-    public $des;
-
-    /**
-    * @var String 其他  
-    */
-    public $etc;
-
-    /**
-    * @var Int32 vip等级要求 default(0) 
-    */
-    public $vip;
-
-    /**
-    * @var String [神宠] 任务起始限时  
-    */
-    public $start;
-
-    /**
-    * @var String [神宠] 任务结束限时  
-    */
-    public $end;
-
-    /**
-    * @var Int32 是否自动完成(0= 否 1=是 如果是任务卡的子任务则固定填1) default(0) 
-    */
-    public $isauto;
-
-    /**
-    * @var String [言灵] 任务的结束动作(格式同起始动作)  
-    */
-    public $finishact;
-
-    /**
-    * @var String [神宠] 是否触发剧情 default(0) 
-    */
-    public $storyid;
-
-    /**
-    * @var Int32 [神宠] 是否存在场景npc(某些场景需生成特定npc形象) default(0) 
-    */
-    public $npcid;
-
-    /**
-    * @var Int32 触发新手引导步骤 default(0) 
-    */
-    public $guideid;
-
-    /**
-    * @var String 前往  
-    */
-    public $goto_module;
-
-}
-

+ 0 - 73
Gameserver/App/model/Const/sm_taskcard.php

@@ -1,73 +0,0 @@
-<?php
-////////////////////
- // 由CodeGenerator创建。
- // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
- // author: gwang 
- // 日期: 2024-03-20 15:21:24
-////////////////////
-
-
-/**
- * Static Model taskcard 任务卡
- */
-class sm_taskcard
-{
-
-    /**
-    * @var Int32 用途未知!!请到数据库中添加字段注释。  
-    */
-    public $id;
-
-    /**
-    * @var Int32 查询用的ID  
-    */
-    public $typeId;
-
-    /**
-    * @var String 任务名称 default(0) 
-    */
-    public $taskName;
-
-    /**
-    * @var Int32 类型:1:日程 default(0) 
-    */
-    public $type;
-
-    /**
-    * @var String 任务描述 default(0) 
-    */
-    public $taskDesc;
-
-    /**
-    * @var String 前往  
-    */
-    public $goto_module;
-
-    /**
-    * @var String 常规任务卡, 言灵任务卡,
-    *    
-    */
-    public $cardType;
-
-    /**
-    * @var String 任务步骤id default(0) 
-    */
-    public $tasksteps;
-
-    /**
-    * @var String 完成后获得的新任务卡id  
-    */
-    public $newTaskCard;
-
-    /**
-    * @var Int32 任务完成累计加的值 default(0) 
-    */
-    public $score;
-
-    /**
-    * @var String 奖励  
-    */
-    public $reward;
-
-}
-

+ 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-07-25 17:05:48
+ // 日期: 2024-08-05 17:35:48
 ////////////////////
 
 

+ 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-07-25 17:05:48
+ // 日期: 2024-08-05 17:35:48
 ////////////////////
 
 

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

@@ -15,6 +15,13 @@ class Enum_ActiveTaskCmdType extends Enum {
     const FightNumChallengeGate = 203;       //参与挑战副本1次
     const PassLayer_ChallengeGate = 204;       //通关挑战关卡第X层 paras:null  num:层数
     
+
+    const FightGate_X = 206;       //206: 进入第X关;参数1:关卡ID;参数2:进入次数
+    const PassMainChallengeGate_X_Num = 207;       //207: 通关主线挑战第X关的X模式1次;参数1:关卡ID;参数2:难度(1普通,2困难,3噩梦)
+    const RankPrize_Num = 208;       //208: 领取排行榜元宝奖励X次;参数1:无;参数2:次数(数值)
+    const UserLevel_X = 209;       //209: 玩家等级到达X级;参数1:无;参数2:等级(数值)
+    
+    
 //    const FightNumRaceGate = 204;       //参与竞速副本1次
 //    const PassNumRaceGate = 205;       //通关竞速副本5次
     

+ 2 - 0
Gameserver/App/model/User/Enum_ActiveTaskType.php

@@ -10,4 +10,6 @@ class Enum_ActiveTaskType extends Enum {
     const Day7 = 1;      
     const DailyTask = 2;          
     const WeekTask = 3;
+    
+    const MainTask = 4;
 }

+ 1 - 3
Gameserver/App/model/User/Info_Task.php

@@ -57,8 +57,6 @@ class Info_Task extends Object_ext{
      * @var type
      */
     public $achieveDic = null;
-
-    //------上面全部旧字段
     
     /**
      * 活动任务信息
@@ -112,7 +110,7 @@ class Info_Task extends Object_ext{
             $this->activeTaskInfo->$length = $ins_TaskStep_Active;
         }
         $this->activeTaskLength = $length;
-              
+                             
     }
 
     public function __construct($arg = null) {

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

@@ -277,6 +277,9 @@ class Info_UserBase extends Object_ext {
                 $nextLevel = $curLevel + 1;                              
                 my_Assert(CommUtil::isPropertyExists($cfgLVs, $nextLevel), ErrCode::err_const_no); // "取英雄升级常量数据失败." . $nextLevel . "级");
                 $this->maxXp = $cfgLVs->$nextLevel->xp_need;
+                
+                TaskProc::OnUserLevel_X($this->level);
+                
 //                StatProc::UserLevel($nowlv);                                  # 等级统计
             } else {                                                            # 如果已到达最大等级则仅补齐缺失的经验即可
                 $this->xp = $this->maxXp;                                       # 经验不能超过最大值

+ 0 - 95
Gameserver/App/model/User/Ins_TaskCard.php

@@ -1,95 +0,0 @@
-<?php
-
-namespace loyalsoft;
-
-/**
- * Description of TaskCardVo
- * 任务卡
- * @author gwang
- */
-class Ins_TaskCard extends Object_ext {
-
-    /**
-     * @var type 这个物品在玩家身上唯一的id
-     */
-    public $uid = 0;
-
-    /**
-     * @var type 当前已完成步骤数量
-     */
-    public $count = 0;
-
-    /**
-     * @var type 查询用的id
-     */
-    public $typeId = 0;
-
-    /**
-     * @var int 任务状态未完成/已完成:0/1
-     */
-    public $state = 2;
-
-    /**
-     * @var array[]当前任务步骤数据 
-     */
-    public $curSteps;
-
-    /**
-     * 
-     * @return type
-     */
-    public function mo() {
-        $mo = GameConfig::taskcard_getItem($this->typeId);
-        my_Assert(null != $mo, ErrCode::err_const_no);
-        return $mo;
-    }
-
-    public function __construct($args = 0) {
-        if (isInt($args)) {
-            $this->typeId = $args;
-            $arr = array();
-            $cfg = GameConfig::taskcard_getItem($this->typeId);
-            my_Assert(null != $cfg, ErrCode::err_const_no);
-            foreach (explode(',', $cfg->tasksteps) as $taskStepTypeId) {
-                $arr [] = new Ins_TaskStep($taskStepTypeId);
-            }
-            $this->curSteps = $arr;
-        } else {
-            parent::__construct($args);
-        }
-    }
-
-    /**
-     * @return boolean 分析任务卡是否已经完成所有步骤
-     */
-    public function IsFinish() {
-        if ($this->state >= Enum_TaskCardStateType::finish) {                   # 已经完成
-            return true;
-        }
-        $isFinish = true;
-        foreach ($this->curSteps as &$tsp) {                                    # 初期里面只有一个任务
-            $tsp = new Ins_TaskStep($tsp);
-            if (!$tsp->isFinish()) {
-                $isFinish = false;
-                break;
-            }
-        }
-        return $isFinish;
-    }
-
-    public function AddStep($stpid) {
-        $exists = false;
-        foreach ($this->curSteps as $stp) {
-//            $stp = new Ins_TaskStep($stp);
-            if ($stp->typeId == $stpid) {
-                $exists = true;
-            }
-        }
-        if (!$exists) {
-            $newstp = new Ins_TaskStep($stpid);
-            $this->curSteps[] = $newstp;
-//            $newstp->doStartAct();
-        }
-    }
-
-}

+ 0 - 209
Gameserver/App/model/User/Ins_TaskStep.php

@@ -1,209 +0,0 @@
-<?php
-
-namespace loyalsoft;
-
-/**
- * 任务步骤, 用于任务卡功能(三组合一)
- * @author gwang(wanggangzero@qq.com)
- */
-class Ins_TaskStep extends Object_ext {
-    
-    /**
-     * @var type 查询用的id
-     */
-    public $typeId = 0;
-
-    /**
-     * @var int 计数器
-     */
-    public $cur = 0;
-
-    /**
-     * @var int start/finish act已执行(0:startAct未执行,1:StartAct已执行且finishAct未执行,2:finishAct已执行)
-     */
-    public $actState = 0;    
-
-    /**
-     * @return \sm_task_step mo 获取对应的模板数据
-     */
-    public function mo() {
-        $mo = GameConfig::task_step_getItem($this->typeId);
-        my_Assert(null != $mo, ErrCode::err_const_no);
-        return $mo;
-    }
-
-    /**
-     * @return int 计数最大值
-     */
-    public function max() {
-        return $this->mo()->num;
-    }
-
-    /**
-     * @return string[] 参数数组
-     */
-    private function paras() {
-        return explode(',', $this->mo()->paras);
-    }
-
-    /**
-     * @return float 当前进度
-     */
-    public function progress() {
-        return $this->cur / $this->max();
-    }
-
-    /**
-     * 是否完成
-     * @return bool
-     */
-    public function isFinish() {
-        return $this->cur >= $this->max();
-    }
-
-    /**
-     * 构造函数
-     * @param type $args
-     */
-    public function __construct($args) {
-        if (isInt($args)) {
-            $this->typeId = $args;
-        } else {
-            parent::__construct($args);
-        }
-    }
-
-    /**
-     * 是否状态型任务---2022-7-29最新备注:add类型的只能动作触发-不能在这里添加类型 ;set类型只动作触发不添加在这,要是满足条件就完成任务就添加在这
-     * @param type $cmd
-     */
-    function isStatusType() {
-        return false;
-//        return $this->mo()->cmd == Enum_TaskCmdType::GainItem                   # 获取道具
-//                || $this->mo()->cmd == Enum_TaskCmdType::HeroLevelUpTo;          # 唤灵师等级达到x级
-        //|| $this->mo()->cmd == Enum_TaskCmdType::UpgradeXYanlingToNStar;#言灵突破升星
-    }
-
-    /**
-     * 自动对齐可能出现统计失误的状态型任务计数
-     * @return boolean 是否有修改
-     */
-    function autoCalcStatusCur() {
-        if ($this->isStatusType()) {
-            $mo = $this->mo();
-            if ($mo != null) {
-                $cur = $this->calcStatusCur();
-                if ($cur > $this->max()) {
-                    $cur = $this->max();
-                }
-                if ($this->cur != $cur) {
-                    $this->cur = $cur;
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * @return int 计算状态类的进度
-     */
-    function calcStatusCur() {
-        $mo = $this->mo();
-        $paras = $this->paras();
-        $para0 = "";
-        $para1 = "";
-        $para2 = "";
-
-        if (count($paras) >= 1) {
-            $para0 = $paras[0];
-        }
-
-        if (count($paras) >= 2) {
-            $para1 = $paras[1];
-        }
-
-        if (count($paras) >= 3) {
-            $para2 = $paras[2];
-        }
-
-//        switch ($mo->cmd) {           
-//            case Enum_TaskCmdType::passEndlessCarbonN:                          # 通关无尽塔X层
-////                isEditor() and $hero = new Ins_UserHero();
-//                $num = ctx()->privateState->endlessTower - 1;
-//                return $num;               
-//            default:
-//                break;
-//        }
-        return 0;
-    }
-
-    /**
-     * 检查任务条件(与petmini采用相同的参数和判定方法2020年12月12日11:38:02)
-     * @param Ins_TaskEventArgs $taskCardEvent
-     * @return bool
-     */
-    public function check_new($taskCardEvent) {
-        if ($taskCardEvent->taskType != $this->mo()->cmd) {                     # 事件类型匹配
-            return false;
-        }
-        if ($this->isStatusType()) {                                            # 状态检查类任务
-            return $this->autoCalcStatusCur();
-        }
-        if ($this->isFinish()) {
-            return false;
-        }
-        if (strlen($this->mo()->paras) <= 0) {                                  # 无参数
-            return true;
-        }
-
-        $paras = $this->paras();
-        $index = 0;
-        foreach ($taskCardEvent->paras as $para) {                              # 其他任务, 执行参数判定
-            if ($index < count($paras)) {
-                if (strpos($para, "|") !== false) {                             # 某个条件是"或"的关系, 即有多重可能值, 满足其一即可
-                    $paraList = explode("|", $para);
-                    foreach ($paraList as $paraItem) {
-                        if ($paraItem == $paras[$index]) {
-                            continue;                                           # 满足某一个即可, 继续判断下一个条件.
-                        }
-                    }
-                } else {                                                        # only one, 不存在"或"的判定
-                    if ($para != $paras[$index]) {                              # 直接匹配
-                        return false;                                           # 一但没匹配上, 直接返回false就好了.
-                    }
-                }
-            }                                                                   # 参数中多余的数据就直接跳过,不比较了(因为自己不需要判断那么多参数)
-            $index++;
-        }
-        return true;                                                            # 走到最后则判定满足条件.
-    }
-
-    /**
-     * 推进任务进度(采用和petmini相同的推进算法,2020年12月12日11:38:22)
-     * @param Ins_TaskEventArgs $taskParam
-     */
-    public function propel($taskParam) {
-//        var_dump($taskParam);
-        switch ($taskParam->ope) {
-            case Enum_PropelType::set:
-                $this->cur = $taskParam->val;
-                break;
-            case Enum_PropelType::add:
-                $this->cur += $taskParam->val;
-                break;
-            case Enum_PropelType::inc:
-                $this->cur += 1;
-                break;
-            case Enum_PropelType::max:
-                if ($taskParam->val > $this->cur) {
-                    $this->cur = $taskParam->val;
-                }
-                break;
-            case Enum_PropelType::stat:
-
-                break;
-        }
-    }
-
-}

+ 21 - 1
Gameserver/App/model/User/Ins_TaskStep_Active.php

@@ -92,7 +92,8 @@ class Ins_TaskStep_Active extends Object_ext {
     function isStatusType() {
         return $this->mo()->cmd == Enum_ActiveTaskCmdType::SetSpecialQualGem || $this->mo()->cmd == Enum_ActiveTaskCmdType::DailyLogin #
                || $this->mo()->cmd == Enum_ActiveTaskCmdType::AnyEquipUpLevel_X || $this->mo()->cmd == Enum_ActiveTaskCmdType::AllEquipUpLevel_X || $this->mo()->cmd == Enum_ActiveTaskCmdType::OnLogin_X #
-               || $this->mo()->cmd == Enum_ActiveTaskCmdType::PassLayer_ChallengeGate;
+               || $this->mo()->cmd == Enum_ActiveTaskCmdType::PassLayer_ChallengeGate || $this->mo()->cmd == Enum_ActiveTaskCmdType::UserLevel_X || $this->mo()->cmd == Enum_ActiveTaskCmdType::RankPrize_Num#
+               || $this->mo()->cmd == Enum_ActiveTaskCmdType::PassMainChallengeGate_X_Num;
     }
 
     function calcStatusCur() {
@@ -115,6 +116,25 @@ class Ins_TaskStep_Active extends Object_ext {
         }
 
         switch ($mo->cmd) {
+            case Enum_ActiveTaskCmdType::PassMainChallengeGate_X_Num:
+                $gateId = $para0;
+                $gateInfo = ctx()->gates->GateList->$gateId;
+                $state = $gateInfo->tz_state;
+                        
+                if($state >= $para1){
+                    return 1;
+                }
+                return 0;
+            case Enum_ActiveTaskCmdType::RankPrize_Num:
+                $arr = ctx()->privateState->rankReward_drawed_MainGate;
+                $num = count($arr);
+                
+                $arr2 = ctx()->privateState->rankReward_drawed_fightPower;
+                $num += count($arr2);
+                
+                return $num;
+            case Enum_ActiveTaskCmdType::UserLevel_X:
+                return ctx()->baseInfo->level;
             case Enum_ActiveTaskCmdType::DailyLogin:                            # 每日登录                 
                 return 1;        
             case Enum_ActiveTaskCmdType::SetSpecialQualGem:                     # 镶嵌3个普通品质以上宝石 

+ 7 - 3
Gameserver/App/process/FightProc.php

@@ -53,7 +53,6 @@ class FightProc {
                 return self::IsExistRankReward();
             case CmdCode::fight_evolveUnlock:                                   # 6818 启灵解锁
                 return self::EvolveUnlock();
-
             case CmdCode::fight_MainTZPass:                                     # 6819 主线挑战--通关
                 return self::MainTZPass();
             case CmdCode::fight_MainTZGetReward:                                # 6820 主线挑战--领取奖励
@@ -86,6 +85,8 @@ class FightProc {
         my_Assert($gateInfo->pass, ErrCode::gate_GateNoUnlock);                 # 通关后解锁难度1
         my_Assert($gateInfo->tz_state + 1 >= $index, ErrCode::gate_GateNoUnlock); # 通关上一难度解锁当前难度
         $gateInfo->tz_state = $index;
+        
+        TaskProc::OnPassMainChallengeGate_X_Num($gateId, $index);
         TaskProc::OnKillCommonNumMonster($killMonsterNum);
         TaskProc::OnKillleaderNumMonster($killBossNum);
         UserProc::updateUserInfo();
@@ -109,7 +110,7 @@ class FightProc {
     }
 
     /**
-     * 6805 进化解锁
+     * 6818 启灵解锁
      * @return type
      */
     public static function EvolveUnlock() {
@@ -658,7 +659,8 @@ class FightProc {
         TaskProc::OnFightNumMainGate();
         TaskProc::OnKillCommonNumMonster($killMonsterNum);
         TaskProc::OnKillleaderNumMonster($killBossNum);
-
+        TaskProc::OnFightGate_X($gateId);
+        
         UserProc::updateUserInfo();
         $ret = array(
             'gates' => ctx()->gates,
@@ -1127,6 +1129,8 @@ class FightProc {
         if (gMem()->hexists($memKey, $gateId)) {
             StoreProc::AddMultiItemInStore($mo->reward);
             ctx()->privateState->rankReward_drawed_MainGate[] = $gateId;
+            
+            TaskProc::OnRankPrize_Num();
         }
 
         $tag = self::isExistNoDrawed_MainGate();

+ 106 - 106
Gameserver/App/process/TaskProc.php

@@ -62,10 +62,10 @@ class TaskProc {
 
         $mo = GameConfig::activepointreward_getItem($type, $typeId);
         my_Assert($mo != null, ErrCode::err_const_no);
-                           
+
         StoreProc::AddMultiItemInStore($mo->reward);
-        
-        $strId = $type . "-" . $typeId;      
+
+        $strId = $type . "-" . $typeId;
         my_Assert(!in_array($strId, ctx()->task->activePointReceived), ErrCode::task_RepeatReviced_ActivePointBox);
         ctx()->task->activePointReceived[] = $strId;
 
@@ -74,8 +74,8 @@ class TaskProc {
                     "store" => ctx()->store,
                     "reward" => StoreProc::$reward,
                     'reward_Gem' => StoreProc::$reward_Gem,
-                    'gold'=> ctx()->baseInfo->gold,
-                    'cash'=> ctx()->baseInfo->cash,
+                    'gold' => ctx()->baseInfo->gold,
+                    'cash' => ctx()->baseInfo->cash,
         ));
     }
 
@@ -89,30 +89,31 @@ class TaskProc {
         my_Assert(StlUtil::dictHasProperty(ctx()->task->activeTaskInfo, $uid), ErrCode::task_NoExist);
 
         $ins_activeTaskInfo = new Ins_TaskStep_Active(ctx()->task->activeTaskInfo->$uid);
-        if($ins_activeTaskInfo->mo()->type == Enum_ActiveTaskType::Day7){
-            my_Assert(ctx()->task->day7_startTs > 0, ErrCode::task_NotOpen_Day7Happy);       
+        if ($ins_activeTaskInfo->mo()->type == Enum_ActiveTaskType::Day7) {
+            my_Assert(ctx()->task->day7_startTs > 0, ErrCode::task_NotOpen_Day7Happy);
             $startDay = TimeUtil::totalDays(ctx()->task->day7_startTs);
             $endDay = $startDay + 6;
-            my_Assert(TimeUtil::totalDays() <= $endDay, ErrCode::task_DownTsLimit);            
-            
+            my_Assert(TimeUtil::totalDays() <= $endDay, ErrCode::task_DownTsLimit);
+
             $num = TimeUtil::totalDays() - $startDay;
-            my_Assert($ins_activeTaskInfo->mo()->day <= $num+1, ErrCode::task_DownTsLimit);                           
-        }        
+            my_Assert($ins_activeTaskInfo->mo()->day <= $num + 1, ErrCode::task_DownTsLimit);
+        }
         my_Assert($ins_activeTaskInfo->cur >= $ins_activeTaskInfo->max(), ErrCode::task_CanotPriceReviced);
         my_Assert($ins_activeTaskInfo->state == Enum_TaskCardStateType::finish, ErrCode::task_CanotPriceReviced);
 
-        if($ins_activeTaskInfo->mo()->prizes != null){
+        if ($ins_activeTaskInfo->mo()->prizes != null) {
             $reward = explode(',', $ins_activeTaskInfo->mo()->prizes);
-            if(GameConfig::item_getItem($reward[0])->itemType == 201){
+            if (GameConfig::item_getItem($reward[0])->itemType == 201) {
                 SystemProc::GetGem_GreaterOrangeQual_Active(req()->zoneid, ctx()->baseInfo->name, $reward[0]);
             }
-            
         }
-        
+
         StoreProc::AddMultiItemInStore($ins_activeTaskInfo->mo()->prizes);
         ctx()->task->activeTaskInfo->$uid->state = Enum_TaskCardStateType::drawed;
         ctx()->task->activeTaskInfo->$uid->drawTs = now();
 
+        self::InitNextMainTask($uid);
+        
         $activePointArr = explode(',', $ins_activeTaskInfo->mo()->activePoint);
         switch ($ins_activeTaskInfo->mo()->type) {
             case Enum_ActiveTaskType::Day7:
@@ -129,17 +130,30 @@ class TaskProc {
         }
 
         StoreProc::$reward[] = $ins_activeTaskInfo->mo()->activePoint;
-                
+
         UserProc::updateUserInfo();
         return Resp::ok(array("task" => ctx()->task,
                     "store" => ctx()->store,
                     'reward' => StoreProc::$reward,
-                    'reward_Gem' => StoreProc::$reward_Gem,   
-                    'gold'=> ctx()->baseInfo->gold,
-                    'cash'=> ctx()->baseInfo->cash,
+                    'reward_Gem' => StoreProc::$reward_Gem,
+                    'gold' => ctx()->baseInfo->gold,
+                    'cash' => ctx()->baseInfo->cash,
         ));
     }
 
+    static function InitNextMainTask($uid) {
+        $ins_activeTaskInfo = new Ins_TaskStep_Active(ctx()->task->activeTaskInfo->$uid);
+        if ($ins_activeTaskInfo->mo()->type != Enum_ActiveTaskType::MainTask) {
+            return;
+        }
+        
+        StlUtil::dictRemove(ctx()->task->activeTaskInfo, $uid);
+        $nextId = $ins_activeTaskInfo->mo()->next;        
+        if ($nextId != null) {           
+            self::MainTaskInit($nextId);
+        }
+    }
+
     /**
      * 6203 领取成就奖励
      * @return type
@@ -182,86 +196,14 @@ class TaskProc {
         ));
     }
 
-    /**
-     * 初始化成就信息
-     */
-    public static function initAchieveData() {
-//        $dic = GameConfig::achieve_new();
-//        if($dic == null){
-//            return;
-//        }
-//        
-//        $achieveDic = ctx()->task->achieveDic;
-//        if(count((array)$achieveDic) > 0){
-//            return;
-//        }
-//        
-//        foreach ($dic as $key => $value) {
-//            $item = new Ins_Achieve();
-//            $typeId = $value->typeId;
-//            $item->typeId = $typeId;
-//            $item->cmd = $value->cmd;
-//            //$item->max = explode(',', $value->condition)[0];
-//            $item->max = $value->num;
-//            $achieveDic->$typeId = $item;
-//        }
-//        ctx()->task->achieveDic = $achieveDic;
-    }
-
-    //检测成就条件
-    public static function CheckAchieveConditions($arg) {
-        $achieveDic = ctx()->task->achieveDic;
-        foreach ($achieveDic as $key => $value) {
-            $achieve = new Ins_Achieve($value);
-            $tag = false;
-            if ($achieve->cmd == $arg->taskType) {
-                $mo = $achieve->getAchieveMo();
-                if ($mo->paras == $arg->paras[0]) {//暂定,若有多个参数,在进行解析
-                    $tag = true;
-                }
-            }
-
-            if ($tag) {//找到正确数据
-                switch ($arg->ope) {
-                    case Enum_PropelType::set:
-                        $achieve->val = $arg->val;
-                        break;
-                    case Enum_PropelType::add:
-                        $achieve->val += $arg->val;
-                        break;
-                    default:
-                        break;
-                }
-            }
-        }
-
-        ctx()->task->achieveDic = $achieveDic;
-        UserProc::updateUserInfo();
-    }
-
-    //-------------------成就条件检测
-    //单件装备等级达到X级
-    static function accumulateEquiplevel_one($lv) {
-        $taskEventArg = new Ins_TaskEventArgs(Enum_AchieveType::equiplevel_one, Enum_PropelType::set, $lv, array());
-        //self::CheckAchieveConditions($taskEventArg);                
-    }
-
-    //累计消耗X钻石
-    static function accumulateCostCash($num) {
-        $taskEventArg = new Ins_TaskEventArgs(Enum_AchieveType::accumulateCostCash, Enum_PropelType::add, $num, array());
-        //self::CheckAchieveConditions($taskEventArg);                           
-    }
-
-    //------------------------------------------------------
-
     public static function getTaskInfo() {
-        list($type) = req()->paras; //武器uid
+        //list($type) = req()->paras; //武器uid
 
         return Resp::ok(array("task" => ctx()->task,
         ));
     }
 
-    static function ResetTask() {    
+    static function ResetTask() {
         self::DailyTaskReset();
         self::ClearDay7Task();
         $week = date("w");
@@ -305,7 +247,7 @@ class TaskProc {
                 ctx()->task->day7Point = 0;
                 ctx()->task->day7_startTs = now();
                 self::initActiveTask(Enum_ActiveTaskType::Day7);
-                self::autoRecoverState_activeTask();               
+                self::autoRecoverState_activeTask();
             }
         }
     }
@@ -322,9 +264,9 @@ class TaskProc {
             foreach ($arr as $uid) {
                 StlUtil::dictRemove(ctx()->task->activeTaskInfo, $uid);
             }
-        }               
+        }
     }
-    
+
     /**
      * 清理活跃点宝箱领取记录
      * @param type $type
@@ -334,16 +276,15 @@ class TaskProc {
         $arr = array();
         foreach ($reward as $val) {
             $str = explode('-', $val);
-            if($str[0] == $type){
-                $arr[] = $val; 
+            if ($str[0] == $type) {
+                $arr[] = $val;
             }
         }
-        if(count($arr) > 0){
+        if (count($arr) > 0) {
             foreach ($arr as $sId) {
                 StlUtil::arrayRemove(ctx()->task->activePointReceived, $sId);
             }
-        }     
-        
+        }
     }
 
     static function initActiveTask($type) {
@@ -358,7 +299,7 @@ class TaskProc {
         }
         ctx()->task->activeTaskLength = $length;
     }
-  
+
     /**
      * 日常
      */
@@ -378,10 +319,37 @@ class TaskProc {
         self::initActiveTask(Enum_ActiveTaskType::WeekTask);
 
         self::autoRecoverState_activeTask();
-        ctx()->task->weekTaskPoint = 0;       
-        self::clearActivePointRewardReceived(Enum_ActiveTaskType::WeekTask);              
+        ctx()->task->weekTaskPoint = 0;
+        self::clearActivePointRewardReceived(Enum_ActiveTaskType::WeekTask);
     }
 
+    static function MainTaskInit($id) {
+        $length = ctx()->task->activeTaskLength;
+        $length += 1;
+        $ins_TaskStep_Active = new Ins_TaskStep_Active($id);
+        $ins_TaskStep_Active->uid = $length;
+        $ins_TaskStep_Active->state = Enum_TaskCardStateType::ing;
+        ctx()->task->activeTaskInfo->$length = $ins_TaskStep_Active;
+        ctx()->task->activeTaskLength = $length;
+        self::autoRecoverState_activeTask();
+    }
+
+//    static function MainTaskCheck_oldUserDate() {
+//        $dic = ctx()->task->activeTaskInfo;
+//        $tag = false;
+//        foreach ($dic as $uid => $task) {
+//            $taskItem = new Ins_TaskStep_Active($task);
+//            if ($taskItem->mo()->type == Enum_ActiveTaskType::MainTask) {
+//                $tag = true;
+//                break;
+//            }
+//        }
+//
+//        if (!$tag) {        
+//            self::MainTaskInit(glc()->FirstMainTaskId);          
+//        }
+//    }
+
 // <editor-fold defaultstate="collapsed" desc="不同活动任务监测信息-">
 
     /**
@@ -584,6 +552,38 @@ class TaskProc {
         self::CheckActiveTaskConditions($taskEventArg);
     }
 
+    /**
+     * 206: 进入第X关;参数1:关卡ID;参数2:进入次数
+     */
+    static function OnFightGate_X($gateId) {
+        $taskEventArg = new Ins_TaskEventArgs(Enum_ActiveTaskCmdType::FightGate_X, Enum_PropelType::add, 1, array($gateId));
+        self::CheckActiveTaskConditions($taskEventArg);
+    }
+
+    /**
+     * 207: 通关主线挑战第X关的X模式1次;参数1:关卡ID;参数2:难度(1普通,2困难,3噩梦)
+     */
+    static function OnPassMainChallengeGate_X_Num($gateId, $state) {
+        $taskEventArg = new Ins_TaskEventArgs(Enum_ActiveTaskCmdType::PassMainChallengeGate_X_Num, Enum_PropelType::add, 1, array($gateId, $state));
+        self::CheckActiveTaskConditions($taskEventArg);
+    }
+
+    /**
+     * 208: 领取排行榜元宝奖励X次;参数1:无;参数2:次数(数值)
+     */
+    static function OnRankPrize_Num() {
+        $taskEventArg = new Ins_TaskEventArgs(Enum_ActiveTaskCmdType::RankPrize_Num, Enum_PropelType::add, 1, array());
+        self::CheckActiveTaskConditions($taskEventArg);
+    }
+
+    /**
+     * 209: 玩家等级到达X级;参数1:无;参数2:等级(数值)
+     */
+    static function OnUserLevel_X($lv) {
+        $taskEventArg = new Ins_TaskEventArgs(Enum_ActiveTaskCmdType::UserLevel_X, Enum_PropelType::set, $lv, array());
+        self::CheckActiveTaskConditions($taskEventArg);
+    }
+
 // </editor-fold>
 //
 // <editor-fold defaultstate="collapsed" desc="活动任务是否完成的检测-">
@@ -601,7 +601,7 @@ class TaskProc {
             }
 
             if ($ins_TaskStep_Active->mo()->cmd == $taskParam->taskType) {
-                if ($ins_TaskStep_Active->isStatusType()) {//校验状态类的
+                if ($ins_TaskStep_Active->isStatusType()) {//校验状态类的                                      
                     $cur = $ins_TaskStep_Active->calcStatusCur();
                     if ($cur != $ins_TaskStep_Active->cur) {
                         $ins_TaskStep_Active->cur = $cur;
@@ -696,5 +696,5 @@ class TaskProc {
     }
 
 // </editor-fold>
-//    
+//      
 }

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

@@ -324,6 +324,8 @@ class UserProc {
             $game->RegenNewToken();
             $game->baseInfo->Reset_tilits();
             self::OnLogin_DateDeal();
+            
+            TaskProc::MainTaskInit(glc()->FirstMainTaskId);
             UserProc::updateUserInfo();                                         # 这一步回存操作只有在 userInfo正常存在的情况下才进行
            
             return $resp;