diff --git a/webapp/controller/MissionController.class.php b/webapp/controller/MissionController.class.php index 138f5ef..5ea47b5 100644 --- a/webapp/controller/MissionController.class.php +++ b/webapp/controller/MissionController.class.php @@ -67,6 +67,8 @@ class MissionController extends BaseAuthedController { $missionHash = Mission::allToHash(); $missionDtoList1 = array(); $missionDtoList2 = array(); + $specMissionDto = null; + $notFinishedCount = 0; foreach ($missionMetaList as $missionMeta) { $missionDb = getXVal($missionHash, $missionMeta['id'], null); $missionDto = $this->missionService->getMissionDto( @@ -76,11 +78,22 @@ class MissionController extends BaseAuthedController { array_push($missionDtoList1, $missionDto); } else { array_push($missionDtoList2, $missionDto); + if ($missionDto['state'] == Mission::NOT_FINISHED_STATE) { + $notFinishedCount++; + } + if ($missionMeta['condition'] == mt\Task::FINISHED_ALL_DAILY_MISSION_COND) { + $specMissionDto = &$missionDto; + } } } else { array_push($missionDtoList1, $missionDto); } } + if ($specMissionDto && + $specMissionDto['state'] == Mission::NOT_FINISHED_STATE && + $notFinishedCount <= 1) { + $specMissionDto['state'] == Mission::RECEIVEABLE_STATE; + } $this->_rspData(array( 'current_active_value' => $this->_getV(TN_ACTIVE, 0), 'max_active_value' => 0, @@ -112,6 +125,12 @@ class MissionController extends BaseAuthedController { $this->_rspErr(3, '任务目标未达成'); return; } + if ($missionMeta['condition'] == mt\Task::FINISHED_ALL_DAILY_MISSION_COND) { + if (!$this->specMissionIsFinished($missionDto, $missionMeta)) { + $this->_rspErr(3, '任务目标未达成'); + return; + } + } if ($missionDto['state'] != Mission::RECEIVEABLE_STATE) { $this->_rspErr(3, '未知任务状态'); return; @@ -139,6 +158,8 @@ class MissionController extends BaseAuthedController { $missionMetaList = mt\Task::getCustomTypeMetaList($type); $missionHash = Mission::allToHash(); $missionDtoList = array(); + $specMissionDto = null; + $notFinishedCount = 0; foreach ($missionMetaList as $missionMeta) { $missionDb = getXVal($missionHash, $missionMeta['id'], null); $missionDto = $this->missionService->getMissionDto( @@ -146,6 +167,22 @@ class MissionController extends BaseAuthedController { if ($missionDto['state'] == Mission::RECEIVEABLE_STATE) { array_push($missionDtoList, $missionDto); } + if ($missionMeta['type'] == mt\Task::DAILY_MISSON_TYPE) { + if ($missionMeta['subtype'] == mt\Task::DAILY_ACTIVE_VALUE_MISSON_SUBTYPE) { + } else { + if ($missionDto['state'] == Mission::NOT_FINISHED_STATE) { + $notFinishedCount++; + } + if ($missionMeta['condition'] == mt\Task::FINISHED_ALL_DAILY_MISSION_COND) { + $specMissionDto = &$missionDto; + } + } + } + } + if ($specMissionDto && + $specMissionDto['state'] == Mission::NOT_FINISHED_STATE && + $notFinishedCount <= 1) { + $specMissionDto['state'] == Mission::RECEIVEABLE_STATE; } foreach ($missionDtoList as $missionDto) { $missionMeta = mt\Mission::get($missionDto['mission_id']); @@ -161,4 +198,26 @@ class MissionController extends BaseAuthedController { )); } + private function specMissionIsFinished($missionDto, $missionMeta) + { + $type = mt\Task::DAILY_MISSION_CUSTOM_TYPE; + $missionMetaList = mt\Task::getCustomTypeMetaList($type); + $missionHash = Mission::allToHash(); + $notFinishedCount = 0; + foreach ($missionMetaList as $missionMeta) { + $missionDb = getXVal($missionHash, $missionMeta['id'], null); + $missionDto = $this->missionService->getMissionDto( + $this->userInfo, $this->seasonDb, $missionDb, $missionMeta); + if ($missionMeta['type'] == mt\Task::DAILY_MISSON_TYPE) { + if ($missionMeta['subtype'] == mt\Task::DAILY_ACTIVE_VALUE_MISSON_SUBTYPE) { + } else { + if ($missionDto['state'] == Mission::NOT_FINISHED_STATE) { + $notFinishedCount++; + } + } + } + } + return $notFinishedCount == 1; + } + } diff --git a/webapp/services/MissionService.php b/webapp/services/MissionService.php index 8301d30..696e165 100644 --- a/webapp/services/MissionService.php +++ b/webapp/services/MissionService.php @@ -292,7 +292,6 @@ class MissionService extends BaseService { case mt\Task::FINISHED_ALL_DAILY_MISSION_COND: { //完成所有每日任务 - $handled = false; } break; case mt\Task::SHOP_BUY_TIMES_COND: