123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309 |
- <?php
- namespace loyalsoft;
- /**
- * 任务步骤, 用于任务卡功能(三组合一)
- * @author gwang(wanggangzero@qq.com)
- */
- class Ins_TaskStep_Active extends Object_ext {
- /**
- *
- * @var type
- */
- public $uid = 0;
- /**
- * @var type 查询用的id
- */
- public $typeId = 0;
- /**
- * @var int 计数器
- */
- public $cur = 0;
- /**
- * @var 2:进行中 3:完成未领取奖励 4 已经领取奖励
- */
- public $state = 0;
- /**
- * 领取奖励的时间
- * @var type
- */
- public $drawTs = 0;
- /**
- * @return \sm_task_step mo 获取对应的模板数据
- */
- public function mo() {
- $mo = GameConfig::activeTask_getItem($this->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 #
- ;
- }
- 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::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;
- }
- }
- }
|