game2005api/webapp/controller/SeasonController.class.php
2021-12-13 15:12:24 +08:00

133 lines
4.5 KiB
PHP

<?php
require_once('mt/Parameter.php');
require_once('mt/Rank.php');
require_once('mt/Season.php');
require_once('mt/Drop.php');
require_once('models/User.php');
require_once('models/Season.php');
require_once('models/Mission.php');
require_once('services/AwardService.php');
require_once('services/PropertyChgService.php');
require_once('services/SeasonService.php');
require_once('services/MissionService.php');
use phpcommon\SqlHelper;
use models\User;
use models\Season;
use models\Mission;
class SeasonController extends BaseAuthedController {
private $propertyChgService = null;
private $awardService = null;
private $userInfo = null;
private $seasonService = null;
private $currSeasonMeta = null;
private $seasonDb = null;
private $missionService = null;
public function _handlePre()
{
parent::_handlePre();
$this->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();
$this->missionService->init($this->userInfo, $this->seasonDb);
}
public function info()
{
$rankMeta = mt\Rank::get($this->userInfo['rank']);
$this->_rspData(array(
'info' => array(
'season_id' => $this->currSeasonMeta['id'],
'rank' => $this->userInfo['rank'],
'score' => $this->userInfo['score'],
'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;
}
}