currSeasonMeta = mt\Season::getCurrentSeason(); if (!$this->currSeasonMeta) { $this->_rspErr(10, '服务器内部错误'); die(); } $this->propertyChgService = new services\PropertyChgService(); $this->awardService = new services\AwardService(); $this->userInfo = $this->_safeGetOrmUserInfo(); $this->seasonService = new services\SeasonService(); if (!$this->seasonService->checkSeason($this->userInfo)) { $this->userInfo = $this->_safeGetOrmUserInfo(); $this->propertyChgService->addUserChg(); } $this->seasonDb = Season::find($this->currSeasonMeta['id']); if (!$this->seasonDb) { Season::add($this->currSeasonMeta['id']); $this->seasonDb = Season::find($this->currSeasonMeta['id']); } if (!$this->seasonDb) { $this->_rspErr(10, '服务器内部错误'); die(); } $this->missionService = new services\MissionService(); } public function info() { $rankMeta = mt\Rank::get($this->userInfo['rank']); $this->_rspData(array( 'info' => array( 'season_id' => $this->currSeasonMeta['id'], 'rank' => $this->userInfo['rank'], 'max_score' => $rankMeta ? $rankMeta['max_score'] : 0, 'noshow_score_bar' => $rankMeta ? $rankMeta['noshow_score_bar'] : 1, 'mission' => $this->getMissionInfo() ) )); } public function getMissionReward() { $mission = $this->getMissionInfo(); if (!$mission || $mission['state'] != Mission::RECEIVEABLE_STATE) { $this->_rspErr(1, '不可领取'); return; } $missionMeta = mt\Task::get($this->currSeasonMeta['task_id']); $missionId = $this->currSeasonMeta['task_id']; if (!$missionMeta) { $this->_rspErr(10, '服务器内部错误drop错误'); return; } $dropMeta = mt\Drop::get($missionMeta['reward']); if (!$dropMeta) { $this->_rspErr(10, '服务器内部错误drop错误'); return; } $this->_scatterDrop('mission:' . $missionId, $dropMeta, $this->awardService, $this->propertyChgService); Mission::add($missionId); $missionDb = Mission::find($missionId); $missionDto = $this->missionService->getMissionDto( $this->userInfo, $this->seasonDb, $missionDb, $missionMeta); $this->_rspData(array( 'award' => $this->awardService->toDto(), 'property_chg' => $this->propertyChgService->toDto(), )); } private function getMissionInfo() { $info = array( 'state' => Mission::NOT_FINISHED_STATE, 'current' => 0, 'target' => 0, 'target_rank' => 0 ); $missionMeta = mt\Task::get($this->currSeasonMeta['task_id']); if ($missionMeta) { $info['target_rank'] = $missionMeta['param1']; $info['target'] = $missionMeta['target']; $missionDb = Mission::find($missionMeta['id']); $missionDto = $this->missionService->getMissionDto( $this->userInfo, $this->seasonDb, $missionDb, $missionMeta); if ($missionDto) { $info['state'] = $missionDto['state']; $info['current'] = $missionDto['current']; $info['target'] = $missionDto['target']; } } return $info; } }