curTaskNode = 4000001; $this->curTaskId = 0; $this->taskListDaily = ObjectInit(); $this->taskListPlot = ObjectInit(); } } public function initialize() { $nodeCfg = GameConfig::task_node_getItem($this->curTaskNode); $taskArr = explode(',', $nodeCfg->taskList); $this->curTaskId = $taskArr[0]; foreach ($taskArr as $tid) { $this->AddPlotTask($tid); } $this->AfterInit(); } public function resetDailyTask() { if (tsDay($this->dailyResetTs - 18000) < tsDay() || $this->dailyResetTs <= 0) { # 每天5点 $dts = GameConfig::task_daily(); $this->taskListDaily = ObjectInit(); foreach ($dts as $tid => $t) { $task = new Ins_TaskInfo(); $task->taskId = $tid; $this->taskListDaily->$tid = $task; } $this->dailyActivePoint = 0; $this->dailyActiveGetedRewardArr = array(); $this->dailyResetTs = now(); # 更新刷新时间 } } function AddPlotTask($taskId) { $tmo = GameConfig::task_getItem($taskId); my_Assert(null != $tmo, ErrCode::err_const_no); switch ($tmo->ban) { // 每日,剧情... } $task = new Ins_TaskInfo(); $task->taskId = $taskId; $this->taskListPlot->$taskId = $task; } function AfterInit() { foreach ($this->taskListPlot as $taskId => &$task) { $tmo = GameConfig::task_getItem($taskId); $task = new Ins_TaskInfo($task); my_Assert(null != $tmo, ErrCode::err_const_no); switch ($tmo->tasktype) { # 有可能添加任务的时候, 任务就已经完成了. 所以这里需要直接做一个检查... case EnumTaskType::CommanderLevelUpTo: $taskParam = new Ins_TaskParams(EnumTaskType::CommanderLevelUpTo, req()->userInfo->game->baseInfo->level); $task->bCheckProgress($taskParam); break; case EnumTaskType::HeroLevelUpTo: $heroMoId = $tmo->canshu1; $userHeros = new Info_UserGameHero(req()->userInfo->game->heros); $hero = $userHeros->GetHeroByMoID($heroMoId); $level = 0; if ($hero != null) { $level = $hero->level; } $taskParam = new Ins_TaskParams(EnumTaskType::HeroLevelUpTo, $hero->typeId, $hero->level); $task->bCheckProgress($taskParam); break; case EnumTaskType::HeroGradeUpTo: $heroMoId = $tmo->canshu1; $userHeros = new Info_UserGameHero(req()->userInfo->game->heros); $hero = $userHeros->GetHeroByMoID($heroMoId); $level = 0; if ($hero != null) { $level = $hero->grade; } $taskParam = new Ins_TaskParams(EnumTaskType::HeroLevelUpTo, $heroMoId, $level); $task->bCheckProgress($taskParam); break; case EnumTaskType::HeroSegmentNumberTo: $segId = $tmo->canshu1; $store = new Info_Store(req()->userInfo->game->store); $num = $store->GetItemCount($segId); $taskParam = new Ins_TaskParams(EnumTaskType::HeroSegmentNumberTo, $segId, $num); $task->bCheckProgress($taskParam); break; case EnumTaskType::HeroSkillUnlock: $heroMoId = $tmo->canshu1; $userHeros = new Info_UserGameHero(req()->userInfo->game->heros); $hero = $userHeros->GetHeroByMoID($heroMoId); $subSkillMo = GameConfig::subSkill_getItem($tmo->canshu2); my_Assert(null != $subSkillMo, ErrCode::err_const_no); $mSkillId = $subSkillMo->mainSkillId; $subSkillId = 0; if ($hero != null && in_array($tmo->canshu2, $hero->subSkills->$mSkillId)) { $subSkillId = $tmo->canshu2; } $taskParam = new Ins_TaskParams(EnumTaskType::HeroSkillUnlock, $heroMoId, $subSkillId); $task->bCheckProgress($taskParam); break; case EnumTaskType::PassGateN: $gateId = $tmo->canshu1; $diffculty = $tmo->canshu2; $gates = req()->userInfo->game->gates->normal; switch ($diffculty) { case 0: $gates = req()->userInfo->game->gates->normal; break; case 1: $gates = req()->userInfo->game->gates->hard; break; case 2: $gates = req()->userInfo->game->gates->elite; break; default : $gates = req()->userInfo->game->gates->normal; break; } $taskParam = new Ins_TaskParams(EnumTaskType::PassGateN, $gates->highest, $diffculty); $task->bCheckProgress($taskParam); break; case EnumTaskType::passCarbonN: break; case EnumTaskType::PvPWinNumberTo: $pvp = new Info_UserPVP(req()->userInfo->game->pvp); # 设计玩家pvp数据结构 $taskParam = new Ins_TaskParams(EnumTaskType::PvPWinNumberTo, $pvp->totalWin); # 任务参数 $task->bCheckProgress($taskParam); break; case EnumTaskType::PvPScoreTo: $uid = req()->uid; # 快速访问UID $zoneid = req()->zoneid; # 快速访问zoneid $seasonId = PVPProc::GetCurSeasonID(); # 当前赛季ID $key = MemKey_GameRun::Game_PVPScoreByZoneSeason_zset($zoneid, $seasonId); # 积分总榜 $score = self::_getScore_by_uid($uid, $key); # 玩家积分 $taskParam = new Ins_TaskParams(EnumTaskType::PvPScoreTo, $score); # 任务参数 $task->bCheckProgress($taskParam); break; case EnumTaskType::UserPowerTo: $key = MemKey_GameRun::Game_FightPowerRank_zset(req()->zoneid); # redis key $power = gMem()->zscore($key, req()->uid); # 查询战斗力 $taskParam = new Ins_TaskParams(EnumTaskType::UserPowerTo, $power); $task->bCheckProgress($taskParam); break; case EnumTaskType::UserCollectScoreTo: break; } } } /** * 判断是否当前所有剧情任务全部完成并且领取奖励了 * @return boolean */ function IsAllPlotTaskOver() { $bYes = true; foreach ($this->taskListPlot as $tid => $task) { isEditor() and $task = new Ins_TaskInfo($task); if (!$task->rewardGeted) { $bYes = false; break; } } return $bYes; } }