Browse Source

1.添加任务步骤开始事件与完成事件的后端处理逻辑. 2.新增任务步骤完成/开始事件类型:解锁建筑.

gwang 4 years ago
parent
commit
9702d212eb

+ 5 - 0
Gameserver/Amfphp/model/User/Enum_EventActionType.php

@@ -18,4 +18,9 @@ class Enum_EventActionType extends Enum {
      */
     public const StartPlotNPC = 102;
 
+    /**
+     * 解锁建筑:建筑id
+     */
+    public const UnlockBuild = 103;
+
 }

+ 9 - 9
Gameserver/Amfphp/model/User/Enum_TaskCmdType.php

@@ -7,15 +7,15 @@ namespace loyalsoft;
  */
 class Enum_TaskCmdType extends Enum {
 
-    const CommanderLevelUpTo = 11;                                              # 玩家等级达到x级  (num:level,paras:[])
-    const HeroLevelUpTo = 12;                                                   # 唤灵师等级达到x级(num:level,paras:[heroid])
+    const CommanderLevelUpTo = 11;                                              # 玩家等级达到x级  (num:level,paras:[]) (跳关卡选择)
+    const HeroLevelUpTo = 12;                                                   # 唤灵师等级达到x级(num:level,paras:[heroid])(hero属性)
     const HeroGradeUpTo = 13;                                                   # 
     const HeroSegmentNumberTo = 14;                                             # 
     const HeroSkillUnlock = 15;                                                 # 
-    const HeroWearupWeapon_quality = 16;                                        # 唤灵师装备X品质的武器(num:1,paras:[heroId,quality])
-    const HeroWearupYanling = 17;                                               # 唤灵师装备xx(id)言灵 (num:1,paras:[heroId,yanlingid])
+    const HeroWearupWeapon_quality = 16;                                        # 唤灵师装备X品质的武器(num:1,paras:[heroId,quality])(装备界面)
+    const HeroWearupYanling = 17;                                               # 唤灵师装备xx(id)言灵 (num:1,paras:[heroId,yanlingid])(言灵配置界面)
     // -----
-    const PassGateN = 21;                                                       # 通过指定剧情关卡(num:1,paras:[关卡id,难度(1,2,3)])
+    const PassGateN = 21;                                                       # 通过指定剧情关卡(num:1,paras:[关卡id,难度(1,2,3)])(跳关卡选择)
     const passCarbonN = 22;                                                     # 
     const PvPWinNumberTo = 31;
     const PvPScoreTo = 32;
@@ -29,11 +29,11 @@ class Enum_TaskCmdType extends Enum {
     const DailyRankChalenge = 105;
     const DailyShopping = 106;
     // ---------  任务卡  --------
-    const KillMonster = 201;                                                    # 击杀怪物 (num:数量,paras:[怪物id])
+    const KillMonster = 201;                                                    # 击杀怪物 (num:数量,paras:[怪物id]) (跳到某个关卡)
     const GainItem = 202;                                                       # 获得道具 (num:数量,paras:[道具id]
     const PlotOver = 203;                                                       # 对话结束 (num:1,paras:[gateid,stage]
-    const BuyTaskCard_Num = 204;                                                # 购买任务卡_带数量(num:数量,paras:[])
-    const FinishTaskCard_ID = 205;                                              # 完成任务_指定id(num:1,paras:[taskCardId])
-    const DrawSysMail_ID = 206;                                                 # 领取系统邮件_指定id(num:1,paras:[邮件id])
+    const BuyTaskCard_Num = 204;                                                # 购买任务卡_带数量(num:数量,paras:[]) (跳任务卡商店)
+    const FinishTaskCard_ID = 205;                                              # 完成任务_指定id(num:1,paras:[taskCardId]) (无前往)
+    const DrawSysMail_ID = 206;                                                 # 领取系统邮件_指定id(num:1,paras:[邮件id]) (跳邮件界面)
 
 }

+ 3 - 1
Gameserver/Amfphp/model/User/Ins_TaskCard.php

@@ -89,7 +89,9 @@ class Ins_TaskCard extends Object_ext {
             }
         }
         if (!$exists) {
-            $this->curSteps[] = new Ins_TaskStep($stpid);
+            $newstp = new Ins_TaskStep($stpid);
+            $this->curSteps[] = $newstp;
+            $newstp->doStartAct();
         }
     }
 

+ 36 - 0
Gameserver/Amfphp/model/User/Ins_TaskStep.php

@@ -56,6 +56,42 @@ class Ins_TaskStep extends Object_ext {
         return $this->cur >= $this->max();
     }
 
+    /**
+     * 执行任务完成事件
+     */
+    public function doFinishAct() {
+        if ($this->mo()->finishact > 0) {
+            $act = GameConfig::eventAction_getItem($this->mo()->finishact);
+            my_Assert($act, ErrCode::err_const_no);
+            switch ($act->cmd) {
+                case Enum_EventActionType::StartPlotScene:                      # 触发场景剧情,
+                case Enum_EventActionType::StartPlotNPC:                        # 触发NPC剧情
+                    break;
+                case Enum_EventActionType::UnlockBuild:                         # 解锁建筑
+                    req()->userInfo->game->privateState->unlockedBuild[] = $act->parameters;
+                    break;
+            }
+        }
+    }
+
+    /**
+     * 执行任务开始事件
+     */
+    public function doStartAct() {
+        if ($this->mo()->startact > 0) {
+            $act = GameConfig::eventAction_getItem($this->mo()->startact);
+            my_Assert($act, ErrCode::err_const_no);
+            switch ($act->cmd) {
+                case Enum_EventActionType::StartPlotScene:                      # 触发场景剧情,
+                case Enum_EventActionType::StartPlotNPC:                        # 触发NPC剧情
+                    break;
+                case Enum_EventActionType::UnlockBuild:                         # 解锁建筑
+                    req()->userInfo->game->privateState->unlockedBuild[] = $act->parameters;
+                    break;
+            }
+        }
+    }
+
     /**
      * 构造函数
      * @param type $args

+ 2 - 1
Gameserver/Amfphp/process/TaskProc.php

@@ -300,6 +300,7 @@ class TaskProc {
             if ($tsp->isStatusType()) {                                         # 如果是道具收集类的, 扣除所收集道具
                 $tsp->autoCalcStatusCur();
             }
+            $tsp->doStartAct();
         }
         if ($taskCard->IsFinish()) {                                            # 检查是否任务卡的所有步骤都已完成
             $taskCard->state = Enum_TaskCardStateType::finish;
@@ -838,8 +839,8 @@ class TaskProc {
                     $tsp->propel($taskParam);
                     NormalEventProc::OnTaskCardStep_Process($task->uid, $tsp->typeId); # 任务进度更新
                     if ($tsp->isFinish()) {
-
                         NormalEventProc::OnTaskCardStep_Complete($task->uid, $tsp->typeId); # 广播任务步骤完成事件
+                        $tsp->doFinishAct();
                     }
 //                    break;
                 }