|
@@ -30,5 +30,213 @@ class TaskProc {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ static function ResetTask() {
|
|
|
+ self::ResetTask_Daily();
|
|
|
+ self::ResetTask_Week();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 每日任务重置
|
|
|
+ */
|
|
|
+ static function ResetTask_Daily() {
|
|
|
+ $dic = GameConfig::task_step();
|
|
|
+
|
|
|
+ $retDic = new \stdClass();
|
|
|
+ $taskcards = ctx()->task->taskcards;
|
|
|
+
|
|
|
+ $dailyCards = array();
|
|
|
+ foreach ($dic as $id => $mo) {
|
|
|
+ if($mo->type == 1){
|
|
|
+ foreach ($taskcards as $uid => $card) {
|
|
|
+ if($card->typeId == $mo->id){
|
|
|
+ $dailyCards[] = $uid;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $retDic->$id = $mo;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($dailyCards as $uid) {
|
|
|
+ unset($taskcards->$uid);
|
|
|
+ }
|
|
|
+
|
|
|
+ $retDic = (array) $retDic;
|
|
|
+ ksort($retDic);
|
|
|
+ $index = ctx()->task->taskIndex;
|
|
|
+ foreach ($retDic as $id => $mo) {
|
|
|
+ $index += 1;
|
|
|
+ $task = new Ins_TaskStep($id);
|
|
|
+ $taskcards->$index = $task;
|
|
|
+ }
|
|
|
+ ctx()->task->taskIndex = $index;
|
|
|
+ ctx()->task->taskcards = $taskcards;
|
|
|
+
|
|
|
+ UserProc::updateUserInfo();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 每周任务重置
|
|
|
+ */
|
|
|
+ static function ResetTask_Week() {
|
|
|
+ $dic = GameConfig::task_step();
|
|
|
+
|
|
|
+ $retDic = new \stdClass();
|
|
|
+ $taskcards = ctx()->task->taskcards;
|
|
|
+
|
|
|
+ $dailyCards = array();
|
|
|
+ foreach ($dic as $id => $mo) {
|
|
|
+ if($mo->type == 2){
|
|
|
+ foreach ($taskcards as $uid => $card) {
|
|
|
+ if($card->typeId == $mo->id){
|
|
|
+ $dailyCards[] = $uid;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $retDic->$id = $mo;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($dailyCards as $uid) {
|
|
|
+ unset($taskcards->$uid);
|
|
|
+ }
|
|
|
+
|
|
|
+ $retDic = (array) $retDic;
|
|
|
+ ksort($retDic);
|
|
|
+ $index = ctx()->task->taskIndex;
|
|
|
+ foreach ($retDic as $id => $mo) {
|
|
|
+ $index += 1;
|
|
|
+ $task = new Ins_TaskStep($id);
|
|
|
+ $taskcards->$index = $task;
|
|
|
+ }
|
|
|
+ ctx()->task->taskIndex = $index;
|
|
|
+ ctx()->task->taskcards = $taskcards;
|
|
|
+
|
|
|
+ UserProc::updateUserInfo();
|
|
|
+ }
|
|
|
+
|
|
|
+ //---------------------
|
|
|
+ /**
|
|
|
+ * 每日登陆
|
|
|
+ */
|
|
|
+ static function OnUserLogin() {
|
|
|
+ $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::DailyLogin, Enum_PropelType::set, 1, array());
|
|
|
+ self::CheckTaskCardConditions($taskEventArg); # 检查日常任务
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 参与主线关卡X次
|
|
|
+ */
|
|
|
+ static function OnChallengeZhuXianGate() {
|
|
|
+ $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::ChallengeZhuXianGate, Enum_PropelType::add, 1, array());
|
|
|
+ self::CheckTaskCardConditions($taskEventArg); # 检查日常任务
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 参与日常关卡1次
|
|
|
+ */
|
|
|
+ static function OnChallengeDailyGate() {
|
|
|
+ $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::ChallengeDailyGate, Enum_PropelType::add, 1, array());
|
|
|
+ self::CheckTaskCardConditions($taskEventArg); # 检查日常任务
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 每日商店购买物品1次
|
|
|
+ */
|
|
|
+ static function OnDailyShopBuyNum() {
|
|
|
+ $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::DailyShopBuyNum, Enum_PropelType::add, 1, array());
|
|
|
+ self::CheckTaskCardConditions($taskEventArg); # 检查日常任务
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ static function CheckTaskCardConditions($taskParam) {
|
|
|
+ $bUpdate = false;
|
|
|
+ $tasks = ctx()->task->taskcards;
|
|
|
+ foreach ($tasks as $tid => &$task) {
|
|
|
+ $tsp = new Ins_TaskStep($task);
|
|
|
+ if ($tsp->state != Enum_TaskCardStateType::ing) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($tsp->check_new($taskParam)) {
|
|
|
+ $bUpdate = true;
|
|
|
+ $tsp->propel($taskParam);
|
|
|
+ NormalEventProc::OnTaskCardStep_Process($task->uid, $tsp->typeId); # 任务进度更新
|
|
|
+ if ($tsp->isFinish()) {
|
|
|
+ NormalEventProc::OnTaskCardStep_Complete($task->uid, $tsp->typeId); # 广播任务步骤完成事件
|
|
|
+// $tsp->doFinishAct();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($tsp->IsFinish()) { # 检查是否任务卡的所有步骤都已完成
|
|
|
+ $tsp->state = Enum_TaskCardStateType::finish;
|
|
|
+ NormalEventProc::OnTaskCard_Finish($tsp->uid, null); # 广播卡完成事件
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($bUpdate) { # 带回数据到客户端
|
|
|
+ ctx()->task->taskcards = $tasks;
|
|
|
+ UserProc::updateUserInfo(); # 更新玩家数据
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检查任务卡条件是否达成
|
|
|
+ * @param Ins_TaskEventArgs $taskParam Description
|
|
|
+ */
|
|
|
+ static function CheckTaskCardConditions_old($taskParam) {
|
|
|
+ $bUpdate = false;
|
|
|
+ $tasks = ctx()->task->taskcards;
|
|
|
+ foreach ($tasks as $tid => &$task) {
|
|
|
+ $task = new Ins_TaskCard($task);
|
|
|
+ if ($task->state != Enum_TaskCardStateType::ing) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ foreach ($task->curSteps as &$tsp) { # 初期里面只有一个任务
|
|
|
+ $tsp = new Ins_TaskStep($tsp);
|
|
|
+ if ($tsp->check_new($taskParam)) {
|
|
|
+ $bUpdate = true;
|
|
|
+ $tsp->propel($taskParam);
|
|
|
+ NormalEventProc::OnTaskCardStep_Process($task->uid, $tsp->typeId); # 任务进度更新
|
|
|
+ if ($tsp->isFinish()) {
|
|
|
+ NormalEventProc::OnTaskCardStep_Complete($task->uid, $tsp->typeId); # 广播任务步骤完成事件
|
|
|
+// $tsp->doFinishAct();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ($task->IsFinish()) { # 检查后添加后续任务
|
|
|
+ $arr = array();
|
|
|
+ foreach ($task->curSteps as &$tsp) { # 初期里面只有一个任务
|
|
|
+ $tsp = new Ins_TaskStep($tsp);
|
|
|
+ if (strlen($tsp->mo()->next) > 0) { # 有后续任务
|
|
|
+ $arr = array_merge($arr, explode(',', $tsp->mo()->next)); # 累加下一个任务步骤
|
|
|
+ }
|
|
|
+ }
|
|
|
+ foreach ($arr as $stpid) { # 轮询添加后续任务
|
|
|
+ if ($stpid > 0) {
|
|
|
+ $task->AddStep($stpid); # 将后续任务追加到任务列表中
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (count($arr) != 0) {
|
|
|
+ self::autoRecoverStateMissions();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ($task->IsFinish()) { # 检查是否任务卡的所有步骤都已完成
|
|
|
+ $task->state = Enum_TaskCardStateType::finish;
|
|
|
+ NormalEventProc::OnTaskCard_Finish($task->uid, null); # 广播卡完成事件
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ($bUpdate) { # 带回数据到客户端
|
|
|
+ ctx()->store->taskcards = $tasks;
|
|
|
+ UserProc::updateUserInfo(); # 更新玩家数据
|
|
|
+ }
|
|
|
+
|
|
|
+ return $bUpdate;
|
|
|
+ }
|
|
|
}
|