typeId); my_Assert(null != $mo, ErrCode::err_const_no); return $mo; } /** * @return int 计数最大值 */ public function max() { return $this->mo()->num; } /** * @return string[] 参数数组 */ private function paras() { return explode(',', $this->mo()->paras); } /** * @return float 当前进度 */ public function progress() { return $this->cur / $this->max(); } /** * 是否完成 * @return bool */ public function isFinish() { return $this->cur >= $this->max(); } /** * 构造函数 * @param type $args */ public function __construct($args) { if (isInt($args)) { $this->typeId = $args; } else { parent::__construct($args); } } /** * 是否状态型任务 * @param type $cmd */ function isStatusType() { return $this->mo()->cmd == Enum_ActiveTaskCmdType::SetSpecialQualGem || $this->mo()->cmd == Enum_ActiveTaskCmdType::DailyLogin # || $this->mo()->cmd == Enum_ActiveTaskCmdType::AnyEquipUpLevel_X || $this->mo()->cmd == Enum_ActiveTaskCmdType::AllEquipUpLevel_X || $this->mo()->cmd == Enum_ActiveTaskCmdType::OnLogin_X # || $this->mo()->cmd == Enum_ActiveTaskCmdType::PassLayer_ChallengeGate || $this->mo()->cmd == Enum_ActiveTaskCmdType::UserLevel_X || $this->mo()->cmd == Enum_ActiveTaskCmdType::RankPrize_Num# || $this->mo()->cmd == Enum_ActiveTaskCmdType::PassMainChallengeGate_X_Num || $this->mo()->cmd == Enum_ActiveTaskCmdType::CompleteNumQiLing || $this->mo()->cmd == Enum_ActiveTaskCmdType::CompleteNumSpecialQiLing # || $this->mo()->cmd == Enum_ActiveTaskCmdType::FightGate_X || $this->mo()->cmd == Enum_ActiveTaskCmdType::PassGate_X_state || $this->mo()->cmd == Enum_ActiveTaskCmdType::CloseSkill ||$this->mo()->cmd == Enum_ActiveTaskCmdType::FightRankPrize_Num # || $this->mo()->cmd == Enum_ActiveTaskCmdType::BuyGold || $this->mo()->cmd == Enum_ActiveTaskCmdType::OnReceiveTaskPrize || $this->mo()->cmd == Enum_ActiveTaskCmdType::FightSweepGate || $this->mo()->cmd == Enum_ActiveTaskCmdType::OpenNumBrightBox_state # || $this->mo()->cmd == Enum_ActiveTaskCmdType::BuyNumDailyShop_state || $this->mo()->cmd == Enum_ActiveTaskCmdType::ComposeNumGem_state || $this->mo()->cmd == Enum_ActiveTaskCmdType::ReceiveGateBoxReward # || $this->mo()->cmd == Enum_ActiveTaskCmdType::OnLogin_Accumulate_FlipCard # ; } function calcStatusCur() { $mo = $this->mo(); $paras = $this->paras(); $para0 = ""; $para1 = ""; $para2 = ""; if (count($paras) >= 1) { $para0 = $paras[0]; } if (count($paras) >= 2) { $para1 = $paras[1]; } if (count($paras) >= 3) { $para2 = $paras[2]; } switch ($mo->cmd) { case Enum_ActiveTaskCmdType::ReceiveGateBoxReward: $dic = ctx()->gates->GateList; $num = 0; foreach ($dic as $gateId => $ins_gate) { $arr = $ins_gate->FirstReward; $num += count($arr); } return $num; case Enum_ActiveTaskCmdType::ComposeNumGem_state: return ctx()->store->gemComposeNum; case Enum_ActiveTaskCmdType::BuyNumDailyShop_state: $arr = ctx()->privateState->dailyShopReceived; $num = 0; foreach ($arr as $tId) { if($tId == 1){ continue; } $num += 1; } return $num; case Enum_ActiveTaskCmdType::OpenNumBrightBox_state: $num = 0; switch ($para0) { case 1: $num = ctx()->privateState->buyNum_ShopBoxCommon; break; case 2: $num = ctx()->privateState->buyNum_ShopBoxBright; break; case 3: $num = ctx()->privateState->buyNum_ShopBoxCommon_equip; break; case 4: $num = ctx()->privateState->buyNum_ShopBoxBright_equip; break; default: break; } return $num; case Enum_ActiveTaskCmdType::FightSweepGate: return ctx()->gates->fightSweepNum; case Enum_ActiveTaskCmdType::OnReceiveTaskPrize: $point = ctx()->task->dailyTaskPoint; $point += ctx()->task->weekTaskPoint; return $point; case Enum_ActiveTaskCmdType::BuyGold: $arr = ctx()->privateState->goldShopReceived; return count($arr); case Enum_ActiveTaskCmdType::FightRankPrize_Num: $arr2 = ctx()->privateState->rankReward_drawed_fightPower; $num = count($arr2); return $num; case Enum_ActiveTaskCmdType::CloseSkill: $arr = ctx()->privateData()->skillReLocked; return count($arr); case Enum_ActiveTaskCmdType::PassGate_X_state: $gateId = $para0; if(StlUtil::dictHasProperty(ctx()->gates->GateList, $gateId) && ctx()->gates->GateList->$gateId->pass > 0){ return 1; } return 0; case Enum_ActiveTaskCmdType::FightGate_X: $gateId = $para0; if(StlUtil::dictHasProperty(ctx()->gates->GateList, $gateId) && ctx()->gates->GateList->$gateId->fightNum > 0){ return 1; } return 0; case Enum_ActiveTaskCmdType::CompleteNumQiLing: return ctx()->gates->evolveMaxId_left; case Enum_ActiveTaskCmdType::CompleteNumSpecialQiLing: return ctx()->gates->evolveMaxId_right; case Enum_ActiveTaskCmdType::PassMainChallengeGate_X_Num: $gateId = $para0; $gateInfo = ctx()->gates->GateList->$gateId; $state = $gateInfo->tz_state; if($state >= $para1){ return 1; } return 0; case Enum_ActiveTaskCmdType::RankPrize_Num: $arr = ctx()->privateState->rankReward_drawed_MainGate; $num = count($arr); return $num; case Enum_ActiveTaskCmdType::UserLevel_X: return ctx()->baseInfo->level; case Enum_ActiveTaskCmdType::DailyLogin: # 每日登录 return 1; case Enum_ActiveTaskCmdType::SetSpecialQualGem: # 镶嵌3个普通品质以上宝石 $gemEquip = ctx()->store->equip; $num = 0; foreach ($gemEquip as $key => $value) { $ins_equip = new Ins_Equip($value); $gemSetSlot = $ins_equip->gemSetSlot; foreach ($gemSetSlot as $index => $gemUid) { if($gemUid > 0){ $num += 1; } } } return $num; case Enum_ActiveTaskCmdType::AnyEquipUpLevel_X: # 任意1件装备等级达到2 $num = 0; $equip = ctx()->store->equip; foreach ($equip as $index => $item) { $ins_equip = new Ins_Equip($item); if ($ins_equip->level >= $para0) { $num += 1; } } return $num; case Enum_ActiveTaskCmdType::AllEquipUpLevel_X: # 全身装备等级达到3级以上 $num = 0; $equip = ctx()->store->equip; foreach ($equip as $index => $item) { $ins_equip = new Ins_Equip($item); if ($ins_equip->level >= $para0) { $num += 1; } } return $num; case Enum_ActiveTaskCmdType::OnLogin_X: # 第X天登录 $day = 0; if (ctx()->task->day7_startTs > 0) { $startDay = TimeUtil::totalDays(ctx()->task->day7_startTs); $endDay = $startDay + 6; if (TimeUtil::totalDays(now()) <= $endDay) { $day = 0; for ($i = $startDay; $i <= $endDay; $i++) { $day += 1; if (TimeUtil::totalDays(now()) == $i) { break; } } } } return $day; case Enum_ActiveTaskCmdType::OnLogin_Accumulate_FlipCard: # 金蛇 累计登录天数 $day = 0; $mo = GameConfig::subfun_unlock_getItem(Enum_SubFunType::FlipCardLottery); if (now()>= $mo->startTs && now()< $mo->endTs) { //$startDay = TimeUtil::totalDays($mo->startTs); $startDay = TimeUtil::totalDays(ctx()->privateState->flipCardLottery_startTs); $endDay = TimeUtil::totalDays($mo->endTs); if (TimeUtil::totalDays(now()) <= $endDay) { $day = 0; for ($i = $startDay; $i <= $endDay; $i++) { $day += 1; if (TimeUtil::totalDays(now()) == $i) { break; } } } } return $day; case Enum_ActiveTaskCmdType::PassLayer_ChallengeGate: if(ctx()->gates->TowerGate->CurLayer-1 < 0){ return 0; } return ctx()->gates->TowerGate->CurLayer -1; default: break; } return 0; } /** * 推进任务进度(采用和petmini相同的推进算法,2020年12月12日11:38:22) * @param Ins_TaskEventArgs $taskParam */ public function propel($taskParam) { // var_dump($taskParam); switch ($taskParam->ope) { case Enum_PropelType::set: $this->cur = $taskParam->val; break; case Enum_PropelType::add: $this->cur += $taskParam->val; break; case Enum_PropelType::inc: $this->cur += 1; break; case Enum_PropelType::max: if ($taskParam->val > $this->cur) { $this->cur = $taskParam->val; } break; case Enum_PropelType::stat: break; } } }