فهرست منبع

fixed: 每日任务中发现的bug, 对于已经完成的步骤也进行了回滚.

王刚 3 سال پیش
والد
کامیت
a1e5cfa408
1فایلهای تغییر یافته به همراه41 افزوده شده و 42 حذف شده
  1. 41 42
      Gameserver/Amfphp/process/TaskProc.php

+ 41 - 42
Gameserver/Amfphp/process/TaskProc.php

@@ -404,7 +404,7 @@ class TaskProc {
         ctx()->college = $college;
 
         $store->taskcards->$taskCardUID = $taskCard;                            # 回写任务数据
-        
+
         self::checkHandOverDailyTask();                                         #检测每次任务中的交付任务是否需要挂载了
         NormalEventProc::OnTaskCard_Reward($taskCard->mo()->reward, null);      # 带入事件
         self::OnFinishTaskCard($taskCard);                                      # 触发检查任务卡的任务卡[・_・?]
@@ -448,40 +448,40 @@ class TaskProc {
                     'priv' => ctx()->privateState,
                     'college' => ctx()->college,));                   # 返回值更新背包
     }
-    
+
     static function checkHandOverDailyTask() {
-        if(ctx()->store->dailyTask_HandOver > 0){
+        if (ctx()->store->dailyTask_HandOver > 0) {
             return;
         }
-                     
+
         $taskcards = ctx()->store->taskcards;
-        $list = explode(',',glc()->dailyTask_HandOver); 
-           
+        $list = explode(',', glc()->dailyTask_HandOver);
+
 //        if(in_array($taskcards->$taskCardUID->typeId, $list)){
 //            ctx()->store->dailyTask_HandOver = 1;
 //            return;
 //        }
-        
+
         $num = 0;
-        
-        $handOverTask = 0;      
+
+        $handOverTask = 0;
         foreach ($taskcards as $uid => $task) {
             $mo = GameConfig::item_taskcard_getItem($task->typeId);
-            if($mo->type == 2){
-                if(in_array($task->typeId, $list)){
+            if ($mo->type == 2) {
+                if (in_array($task->typeId, $list)) {
                     $handOverTask = 1;
                 }
-                    
-                if($task->state == 4){
+
+                if ($task->state == 4) {
                     $num += 1;
-                }                            
+                }
             }
         }
-        
-        if($num>=4 && $handOverTask == 0){//每日任务全部完成,挂载每日任务--交付任务           
+
+        if ($num >= 4 && $handOverTask == 0) {//每日任务全部完成,挂载每日任务--交付任务           
             $count = count($list);
-            $rand = rand(0,$count-1);
-            
+            $rand = rand(0, $count - 1);
+
             StoreProc::PutTaskCardInStore($list[$rand]);
         }
     }
@@ -543,7 +543,7 @@ class TaskProc {
             $stepArr = array();
             foreach ($card->curSteps as &$tsp) {                                # 初期里面只有一个任务
                 $tsp = new Ins_TaskStep($tsp);
-                if ($tsp->mo()->fallback > 0) {                                 # 找到需要回撤的步骤,删除此步骤
+                if (!$tsp->isFinish() && $tsp->mo()->fallback > 0) {            # 找到需要回撤的步骤,删除此步骤
                     $fallbackID = $tsp->mo()->fallback;
                 } else {
                     $stepArr[] = $tsp;
@@ -676,11 +676,11 @@ class TaskProc {
      */
     static function ResetDailyTaskCards() {
 //        var_dump("重置日常任务卡");
-        $store = ctx()->store(true);   
+        $store = ctx()->store(true);
         my_default_Obj($store->taskcards);
-        
+
         $store->dailyTask_HandOver = 0;
-        
+
         $dailyCards = new \stdClass();
         foreach (GameConfig::item_taskcard() as $id => $cardMo) {
             isEditor() and $cardMo = new \sm_item_taskcard();
@@ -691,59 +691,58 @@ class TaskProc {
         $dailyCards = (array) $dailyCards;
         ksort($dailyCards);
         foreach ($dailyCards as $id => $cardMo) {
-                foreach ($store->taskcards as $uid => $card) {
-                    $cardVo = new Ins_TaskCard($card);
-                    if ($cardVo->typeId == $id) {                                   # 找到对应的实例.
-                        unset($store->taskcards->$uid);                             # 删除昨日未完成日常
-                    }
+            foreach ($store->taskcards as $uid => $card) {
+                $cardVo = new Ins_TaskCard($card);
+                if ($cardVo->typeId == $id) {                                   # 找到对应的实例.
+                    unset($store->taskcards->$uid);                             # 删除昨日未完成日常
                 }
+            }
         }
         ctx()->store = $store;
-                
+
         $pri = ctx()->privateData();                                            # 私有数据
         $cardType = 2;                                                          # 日常任务,设置追踪
         my_default_Obj($pri->taskCardTracing);                                  # 确保 tracing数据结构是否完整.
-        
-        $commonTaskList = explode(',', glc()->dailyTask_Common);        
-        if (count($commonTaskList) < 4) {                                 
+
+        $commonTaskList = explode(',', glc()->dailyTask_Common);
+        if (count($commonTaskList) < 4) {
             // 再遍历一遍, 添加今日日常任务.
             rsort($commonTaskList);
             $cid = 0;
             foreach ($commonTaskList as $id) {
                 $cid = StoreProc::PutTaskCardInStore($id);                      # 添加任务卡到背包
             }
-                                                          
+
             $pri->taskCardTracing->$cardType = $cid;                            # 更新tracing数据
         } else {
             $tempCid = 0;
             $count = count($commonTaskList);
             $temp = array();
             while (true) {
-                $num = rand(0,$count-1);
-                if(in_array($num, $temp)){
+                $num = rand(0, $count - 1);
+                if (in_array($num, $temp)) {
                     continue;
                 }
                 $index = 0;
                 foreach ($commonTaskList as $id) {
-                    if($index >= $num){
+                    if ($index >= $num) {
                         $cid = StoreProc::PutTaskCardInStore($id);              # 添加任务卡到背包
-                        if($tempCid == 0){
+                        if ($tempCid == 0) {
                             $tempCid = $cid;
                         }
                         break;
-                    }  
-                    $index+=1;
+                    }
+                    $index += 1;
                 }
-                
+
                 $temp[] = $num;
-                if(count($temp)>=4){
+                if (count($temp) >= 4) {
                     break;
                 }
             }
             $pri->taskCardTracing->$cardType = $tempCid;                        # 更新tracing数据
-                    
         }
-       
+
         UserProc::updateUserInfo();                                             # 回存数据.(不管从哪里调用的, 更新肯定没错.)
     }