getMissionDto($missionDb, $missionMeta); array_push($missionDtoList, $missionDto); } $this->_rspData(array( 'mission_list' => $missionDtoList )); } public function commitMission() { $missionId = getReqVal('mission_id', 0); $missionMeta = mt\Task::get($missionId); if (!$missionMeta) { $this->_rspErr(1, 'mission_id参数错误'); return; } $missionDb = Mission::find($missionId); $missionDto = $this->getMissionDto($missionDb, $missionMeta); if (!$missionDto) { $this->_rspErr(10, '服务器内部错误'); return; } if ($missionDto[state] == Mission::RECEIVED_STATE) { $this->_rspErr(2, '不能重复领取'); return; } if ($missionDto[state] == Mission::NOT_FINISHED_STATE) { $this->_rspErr(3, '任务目标未达成'); return; } if ($missionDto[state] != Mission::RECEIVEABLE_STATE) { $this->_rspErr(3, '未知任务状态'); return; } $dropMeta = mt\Drop::get($missionMeta['reward']); if (!$dropMeta) { $this->_rspErr(10, '服务器内部错误drop错误'); return; } $propertyChgService = new services\PropertyChgService(); $awardService = new services\AwardService(); $this->_scatterDrop($dropMeta, $awardService, $propertyChgService); Mission::add($missionId); $missionDb = Mission::find($missionId); $missionDto = $this->getMissionDto($missionDb, $missionMeta); $this->_rspData(array( 'award' => $awardService->toDto(), 'property_chg' => $propertyChgService->toDto(), 'mission_chg' => $missionDto )); } private function getMissionDto($userInfo, $seasonDb, $missionDb, $missionMeta) { $missionDto = array( 'mission_id' => $missionMeta['id'], 'current' => 0, 'target' => getXVal($missionMeta, 'target', 1), 'state' => Mission::NOT_FINISHED_STATE, ); if ($missionDb) { if ($missionMeta['type'] == mt\Task::DAILY_MISSON_TYPE) { if ($this->_getDaySeconds($missionDb['modifytime']) == $this->_getNowDaySeconds()) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVED_STATE; return $missionDto; } } else { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVED_STATE; return $missionDto; } } switch ($missionMeta['type']) { case mt\Task::DAILY_LOGIN_TIMES_COND: { //今日登陆 if ($this->_getDailyV(TN_DAILY_LOGINS, 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } break; case mt\Task::PLAYER_LEVEL_COND: { //玩家等级达到X if ($userInfo['level'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } break; case mt\Task::TOTAL_BATTLE_TIMES_COND: { //进行X场比赛 if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'total_battle_times', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['total_battle_times'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::SHARE_GAME_TIMES_COND: { //分享1次游戏 } break; case mt\Task::SINGLE_BATTLE_TIMES_COND: { //进行X场单人比赛 if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'total_single_battle_times', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['total_single_battle_times'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::TEAM_BATTLE_TIMES_COND: { //进行X场组队比赛 if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'total_team_battle_times', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['total_team_battle_times'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::SINGLE_BATTLE_RANK_COND: { //单人比赛排名前X if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'single_battle_rank', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['single_battle_rank'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::TEAM_BATTLE_RANK_COND: { //组队比赛排名前X if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'team_battle_rank', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['team_battle_rank'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::TOTAL_KILL_NUM_COND: { //累计击败X个敌人 if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'total_kills_times', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['total_kills_times'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::TOTAL_DAMGE_OUT_COND: { //累计造成X点伤害 if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'total_damage_out', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['total_damage_out'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::RESCUE_TEAMMATE_TIMES_COND: { //救援X个队友 if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'rescue_teammate_times', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['rescue_teammate_times'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::TOTAL_SURVIVAL_TIME_COND: { //累计生存X分钟 if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'total_alive_time', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['total_alive_time'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::USE_WEAPON_KILL_NUM_COND: { //使用X枪械击杀Y个敌人 } break; case mt\Task::USE_WEAPON_DAMGE_OUT_COND: { //使用X种枪械对敌人累计造成Y点伤害 } break; case mt\Task::USE_WEAPON_SLOT_TIMES_COND: { //使用某个槽位的次数 cond_param1=槽位 } break; case mt\Task::GET_EQUIP_TIMES_COND: { //获得某种类型的装备 cond_param1=equip.type cond_param2=equip.sub_type } break; case mt\Task::TOTAL_DIVING_TIMES_COND: { //累计潜水X次 if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'diving_times', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['diving_times'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::TOTAL_DAMAGE_IN_COND: { //累计受到X点伤害 if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'total_damage_in', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['total_damage_in'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::TOTAL_RECOVER_HP_COND: { //累计恢复X点血量 if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'total_recover_hp', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['total_recover_hp'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::TOTAL_OPEN_AIRDROP_COND: { //累计打开空投补给X次 if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'open_airdrop_times', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['open_airdrop_times'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::BATTLE_IN_HERO_LV_COND: { //单局内英雄技能升级到X级 } break; case mt\Task::BATTLE_IN_GUN_LV_COND: { //单局内英雄专属枪械升到X级 } break; case mt\Task::TOTAL_MEDICINE_TIMES_COND: { //累计使用X药品Y次 if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'use_medicine_times', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['use_medicine_times'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::TOTAL_DESTORY_CAR_TIMES_COND: { //累计破坏载具X个 if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'destory_car_times', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['destory_car_times'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::TOTAL_USE_CAMOUFLAGE_TIMES_COND: { //累计使用X个伪装物 if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'use_camouflage_times', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['use_camouflage_times'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::TOTAL_USE_SKILL_TIMES_COND: { //累计使用X次角色技能 if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'use_skill_times', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['use_skill_times'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::RIDE_CAR_MOVE_DISTANCE_COND: { //驾驶或乘坐载具累计移动X米(所有模式) if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'ride_car_move_distance', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['ride_car_move_distance'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::RIDE_CAR_KILL_NUM_COND: { //驾驶或乘坐载具累计击杀X个敌人(所有模式) if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'ride_car_kills', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['ride_car_kills'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::LIKE_TEAMMATE_TIMES_COND: { //战斗结算中累计给队友点赞X次 if ($missionMeta['season_task'] == mt\Task::SEASON_MISSON_FLAG) { if (getXVal($seasonDb, 'to_teammate_like_times', 0) >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } else { if ($userInfo['to_teammate_like_times'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } } break; case mt\Task::SEASON_LEVEL_COND: { //赛季段位达到X if ($userInfo['rank'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; } } break; case mt\Task::CONSUME_GOLD_COND: { //消耗X个金币 /*if ($userInfo['consume_gold'] >= $missionDto['target']) { $missionDto['current'] = $missionDto['target']; $missionDto['state'] = Mission::RECEIVEABLE_STATE; }*/ } break; case mt\Task::BATTLE_RANK_COND: { //获得X级评价Y次 } break; case mt\Task::FINISHED_ALL_DAILY_MISSION_COND: { //完成所有每日任务 } break; case mt\Task::SHOP_BUY_TIMES_COND: { //在X商店消费Y次 } break; case mt\Task::TOTAL_UPGRADE_TALENT_LV_COND: { //科研升级X次 } break; case mt\Task::TOTAL_GET_HERO_SKIN_COUNT_COND: { //累计获得X个角色时装 } break; case mt\Task::TOTAL_GET_GUN_SKIN_COUNT_COND: { //累计获得X个枪械皮肤 } break; case mt\Task::TOTAL_INVITE_FRIEND_TIMES_COND: { //邀请好友组队X次 } break; case mt\Task::TOTAL_GIVE_FRIEND_GOLD_COUNT_COND: { //赠送X个好友金币 } break; case mt\Task::TOTAL_INVITE_FRIEND_ONLINE_TIMES_COND: { //邀请X个好友上线 } break; case mt\Task::TOTAL_CREATE_OR_JOIN_GUILD_COUNT_COND: { //创建或加入1个战队 } break; default: { } break; } return $missionDto; } }