每日任务迭代

This commit is contained in:
hujiabin 2023-11-08 17:19:29 +08:00
parent 97c4ab7a66
commit ed9b26bae7
4 changed files with 1700 additions and 1544 deletions

View File

@ -62,6 +62,7 @@ class MissionController extends BaseAuthedController {
$this->missionService->init($this->userInfo, $this->seasonDb);
}
public function missionList()
{
$type = getReqVal('type', 0);
@ -79,7 +80,7 @@ class MissionController extends BaseAuthedController {
if (in_array($missionMeta['subtype'],
array(
mt\Task::DAILY_ACTIVE_VALUE_MISSON_SUBTYPE,
// mt\Task::WEAKLY_ACTIVE_VALUE_MISSON_SUBTYPE
mt\Task::WEAKLY_ACTIVE_VALUE_MISSON_SUBTYPE
))) {
array_push($missionDtoList1, $missionDto);
} else {

View File

@ -1,227 +1,216 @@
<?php
namespace mt;
use phpcommon;
class Task {
const DAILY_LOGIN_TIMES_COND = 1; //今日登陆
const PLAYER_LEVEL_COND = 2; //玩家等级达到X
const TOTAL_BATTLE_TIMES_COND = 3; //进行X场比赛
const SHARE_GAME_TIMES_COND = 4; //分享1次游戏
const SINGLE_BATTLE_TIMES_COND = 5; //进行X场单人比赛
const TEAM_BATTLE_TIMES_COND = 6; //进行X场组队比赛
const SINGLE_BATTLE_RANK_COND = 7; //单人比赛排名前X
const TEAM_BATTLE_RANK_COND = 8; //组队比赛排名前X
const TOTAL_KILL_NUM_COND = 9; //累计击败X个敌人
const TOTAL_DAMGE_OUT_COND = 10; //累计造成X点伤害
const RESCUE_TEAMMATE_TIMES_COND = 11; //救援X个队友
const TOTAL_SURVIVAL_TIME_COND = 12; //累计生存X分钟
const USE_WEAPON_KILL_NUM_COND = 13; //使用X枪械击杀Y个敌人
const USE_WEAPON_DAMGE_OUT_COND = 14; //使用X种枪械对敌人累计造成Y点伤害
const USE_WEAPON_SLOT_TIMES_COND = 15; //使用某个槽位的次数 cond_param1=槽位
const GET_EQUIP_TIMES_COND = 16; //获得某种类型的装备 cond_param1=equip.type cond_param2=equip.sub_type
const TOTAL_DIVING_TIMES_COND = 17; //累计潜水X次
const TOTAL_DAMAGE_IN_COND = 18; //累计受到X点伤害
const TOTAL_RECOVER_HP_COND = 19; //累计恢复X点血量
const TOTAL_OPEN_AIRDROP_COND = 20; //累计打开空投补给X次
const BATTLE_IN_HERO_LV_COND = 21; //单局内英雄技能升级到X级
const BATTLE_IN_GUN_LV_COND = 22; //单局内英雄专属枪械升到X级
const TOTAL_MEDICINE_TIMES_COND = 23; //累计使用X药品Y次
const TOTAL_DESTORY_CAR_TIMES_COND = 24; //累计破坏载具X个
const TOTAL_USE_CAMOUFLAGE_TIMES_COND = 25; //累计使用X个伪装物
const TOTAL_USE_SKILL_TIMES_COND = 26; //累计使用X次角色技能
const RIDE_CAR_MOVE_DISTANCE_COND = 27; //驾驶或乘坐载具累计移动X米所有模式
const RIDE_CAR_KILL_NUM_COND = 28; //驾驶或乘坐载具累计击杀X个敌人所有模式
const LIKE_TEAMMATE_TIMES_COND = 29; //战斗结算中累计给队友点赞X次
const SEASON_LEVEL_COND = 30; //赛季段位达到X
const CONSUME_GOLD_COND = 31; //消耗X个金币
const BATTLE_RANK_COND = 32; //获得X级评价Y次
const FINISHED_ALL_DAILY_MISSION_COND = 33; //完成所有每日任务
const SHOP_BUY_TIMES_COND = 34; //在X商店消费Y次
const TOTAL_UPGRADE_TALENT_LV_COND = 35; //科研升级X次
const TOTAL_GET_HERO_SKIN_COUNT_COND = 36; //累计获得X个角色时装
const TOTAL_GET_GUN_SKIN_COUNT_COND = 37; //累计获得X个枪械皮肤
const TOTAL_INVITE_FRIEND_TIMES_COND = 38; //邀请好友组队X次
const TOTAL_GIVE_FRIEND_GOLD_COUNT_COND = 40; //赠送X个好友金币
const TOTAL_INVITE_FRIEND_ONLINE_TIMES_COND = 41; //邀请X个好友上线
const TOTAL_CREATE_OR_JOIN_GUILD_COUNT_COND = 42; //创建或加入1个战队
const T1OTAL_CREATE_OR_JOIN_GUILD_COUNT_COND = 43; //段位达到X且进行Y场比赛
const DAILY_ACTIVE_VALUE_COND = 44; //每日活跃度达到X
const WEEKLY_ACTIVE_VALUE_COND = 45; //每周活跃度达到X
const OFFER_REWARD_COND = 46;
const DAILY_MISSON_TYPE = 1;
const ACHIEVEMENT_MISSON_TYPE = 2;
const ACTIVITY_MISSON_TYPE = 3;
const RANK_MISSON_TYPE = 4;
const SEASONCARD_MISSON_TYPE = 5;
const OFFER_REWARD_MISSON_TYPE = 7;
const SEASON_WEAKLY_MISSON_SUBTYPE = 1;
const SEASON_CHALLENGE_MISSON_SUBTYPE = 2;
const SEASON_ACTIVE_MISSON_SUBTYPE = 3;
const DAILY_ACTIVE_VALUE_MISSON_SUBTYPE = 1;
const WEAKLY_ACTIVE_VALUE_MISSON_SUBTYPE = 2;
const SEASON_MISSON_FLAG = 1;
const DAILY_MISSION_CUSTOM_TYPE = 1;
const SEASON_WEEKLY_MISSION_CUSTOM_TYPE = 2;
const OFFER_REWARD_MISSION_CUSTOM_TYPE = 3;
const ACHIEVEMENT_MISSION_CUSTOM_TYPE = 4;
public static function get($id)
{
return getXVal(self::getMetaList(), $id);
}
public static function findAchievementLevel($level){
$taskMeta = array();
foreach (self::getMetaList() as $meta) {
if (
$meta['type'] == self::ACHIEVEMENT_MISSON_TYPE &&
$meta['target'] == $level
) {
$taskMeta = $meta;
}
}
return $taskMeta;
}
public static function getCustomTypeMetaList($type, $missionService)
{
$metaList = array();
if ($type == self::OFFER_REWARD_MISSION_CUSTOM_TYPE) {
foreach ($missionService->getOfferRewardMissions() as $mission) {
$meta = self::get($mission['mission_id']);
if ($meta && $meta['type'] == self::OFFER_REWARD_MISSON_TYPE) {
array_push($metaList, $meta);
}
}
} else if ($type == self::DAILY_MISSON_TYPE) {
foreach ($missionService->getDailyMissions() as $mission) {
$meta = self::get($mission['mission_id']);
if ($meta) {
array_push($metaList, $meta);
}
}
foreach (self::getMetaList() as $meta) {
if ($meta['type'] == self::DAILY_MISSON_TYPE && $meta['subtype'] == self::DAILY_ACTIVE_VALUE_MISSON_SUBTYPE) {
array_push($metaList, $meta);
}
}
}else if ($type == 0) {
foreach ($missionService->getDailyMissions() as $mission) {
$meta = self::get($mission['mission_id']);
if ($meta) {
array_push($metaList, $meta);
}
}
} else {
foreach (self::getMetaList() as $meta) {
switch ($type) {
// case self::DAILY_MISSION_CUSTOM_TYPE:
// {
// if ($meta['type'] == self::DAILY_MISSON_TYPE) {
// array_push($metaList, $meta);
// }
// }
// break;
case self::SEASON_WEEKLY_MISSION_CUSTOM_TYPE:
{
if ($meta['type'] == self::SEASONCARD_MISSON_TYPE &&
$meta['subtype'] == self::SEASON_WEAKLY_MISSON_SUBTYPE) {
array_push($metaList, $meta);
}
}
break;
case self::ACHIEVEMENT_MISSION_CUSTOM_TYPE:
{
if ($meta['type'] == self::ACHIEVEMENT_MISSON_TYPE) {
array_push($metaList, $meta);
}
}
break;
default:
{
}
break;
}
}
}
return $metaList;
}
public static function isOfferRewardMission($meta)
{
return $meta['type'] == self::OFFER_REWARD_MISSION_CUSTOM_TYPE;
}
public static function getOfferRewardMissions($excludeMetas)
{
$maxHeroQuality = myself()->_getV(TN_HERO_MAX_QUALITY, 0, 1);
$metas = array();
foreach (self::getMetaList() as $meta) {
if ($meta['type'] == self::OFFER_REWARD_MISSON_TYPE) {
if ( $meta['param1'] <= $maxHeroQuality) {
if (!array_find($excludeMetas, function($val) use($meta) {
return $val['mission_id'] == $meta['id'];
})) {
array_push($metas, $meta);
}
}
}
}
return $metas;
}
public static function getDaildyMission()
{
$metas = array();
foreach (self::getMetaList() as $meta) {
if ($meta['type'] == self::DAILY_MISSON_TYPE) {
if (!in_array($meta['subtype'],
array(
self::DAILY_ACTIVE_VALUE_MISSON_SUBTYPE,
self::WEAKLY_ACTIVE_VALUE_MISSON_SUBTYPE
))) {
array_push($metas, $meta);
}
}
}
return $metas;
}
public static function getDaildyMissionCount()
{
if (is_null(self::$dailyMissionCount)) {
self::$dailyMissionCount = 0;
foreach (self::getMetaList() as $meta) {
if ($meta['type'] == self::DAILY_MISSON_TYPE) {
if ($meta['subtype'] !=
self::WEAKLY_ACTIVE_VALUE_MISSON_SUBTYPE) {
++self::$dailyMissionCount;
}
}
}
}
return self::$dailyMissionCount;
}
protected static function getMetaList()
{
if (!self::$metaList) {
self::$metaList = getMetaTable('task@task.php');
}
return self::$metaList;
}
protected static $metaList;
protected static $dailyMissionCount = null;
}
<?php
namespace mt;
use phpcommon;
class Task {
const DAILY_LOGIN_TIMES_COND = 1; //今日登陆
const PLAYER_LEVEL_COND = 2; //玩家等级达到X
const TOTAL_BATTLE_TIMES_COND = 3; //进行X场比赛
const SHARE_GAME_TIMES_COND = 4; //分享1次游戏
const SINGLE_BATTLE_TIMES_COND = 5; //进行X场单人比赛
const TEAM_BATTLE_TIMES_COND = 6; //进行X场组队比赛
const SINGLE_BATTLE_RANK_COND = 7; //单人比赛排名前X
const TEAM_BATTLE_RANK_COND = 8; //组队比赛排名前X
const TOTAL_KILL_NUM_COND = 9; //累计击败X个敌人
const TOTAL_DAMGE_OUT_COND = 10; //累计造成X点伤害
const RESCUE_TEAMMATE_TIMES_COND = 11; //救援X个队友
const TOTAL_SURVIVAL_TIME_COND = 12; //累计生存X分钟
const USE_WEAPON_KILL_NUM_COND = 13; //使用X枪械击杀Y个敌人
const USE_WEAPON_DAMGE_OUT_COND = 14; //使用X种枪械对敌人累计造成Y点伤害
const USE_WEAPON_SLOT_TIMES_COND = 15; //使用某个槽位的次数 cond_param1=槽位
const GET_EQUIP_TIMES_COND = 16; //获得某种类型的装备 cond_param1=equip.type cond_param2=equip.sub_type
const TOTAL_DIVING_TIMES_COND = 17; //累计潜水X次
const TOTAL_DAMAGE_IN_COND = 18; //累计受到X点伤害
const TOTAL_RECOVER_HP_COND = 19; //累计恢复X点血量
const TOTAL_OPEN_AIRDROP_COND = 20; //累计打开空投补给X次
const BATTLE_IN_HERO_LV_COND = 21; //单局内英雄技能升级到X级
const BATTLE_IN_GUN_LV_COND = 22; //单局内英雄专属枪械升到X级
const TOTAL_MEDICINE_TIMES_COND = 23; //累计使用X药品Y次
const TOTAL_DESTORY_CAR_TIMES_COND = 24; //累计破坏载具X个
const TOTAL_USE_CAMOUFLAGE_TIMES_COND = 25; //累计使用X个伪装物
const TOTAL_USE_SKILL_TIMES_COND = 26; //累计使用X次角色技能
const RIDE_CAR_MOVE_DISTANCE_COND = 27; //驾驶或乘坐载具累计移动X米所有模式
const RIDE_CAR_KILL_NUM_COND = 28; //驾驶或乘坐载具累计击杀X个敌人所有模式
const LIKE_TEAMMATE_TIMES_COND = 29; //战斗结算中累计给队友点赞X次
const SEASON_LEVEL_COND = 30; //赛季段位达到X
const CONSUME_GOLD_COND = 31; //消耗X个金币
const BATTLE_RANK_COND = 32; //获得X级评价Y次
const FINISHED_ALL_DAILY_MISSION_COND = 33; //完成所有每日任务
const SHOP_BUY_TIMES_COND = 34; //在X商店消费Y次
const TOTAL_UPGRADE_TALENT_LV_COND = 35; //科研升级X次
const TOTAL_GET_HERO_SKIN_COUNT_COND = 36; //累计获得X个角色时装
const TOTAL_GET_GUN_SKIN_COUNT_COND = 37; //累计获得X个枪械皮肤
const TOTAL_INVITE_FRIEND_TIMES_COND = 38; //邀请好友组队X次
const TOTAL_GIVE_FRIEND_GOLD_COUNT_COND = 40; //赠送X个好友金币
const TOTAL_INVITE_FRIEND_ONLINE_TIMES_COND = 41; //邀请X个好友上线
const TOTAL_CREATE_OR_JOIN_GUILD_COUNT_COND = 42; //创建或加入1个战队
const T1OTAL_CREATE_OR_JOIN_GUILD_COUNT_COND = 43; //段位达到X且进行Y场比赛
const DAILY_ACTIVE_VALUE_COND = 44; //每日活跃度达到X
const WEEKLY_ACTIVE_VALUE_COND = 45; //每周活跃度达到X
const TOTAL_USE_HERO_BATTLE_TIMES_COND = 46; // 使用英雄X进行Y次游戏
const TOTAL_USE_HERO_SKILL_TIMES_COND = 47; //使用英雄X的技能Y次
const TOTAL_USE_GRENADE_TIMES_COND = 48; //累积使用X次手雷
const TOTAL_USE_BURNING_SHOT_TIMES_COND = 49; //累积使用X次燃烧弹
const TOTAL_USE_HERO_DAMGE_OUT_COND = 50; // 使用英雄X造成Y点伤害
const TOTAL_USE_HERO_WINS_TIMES_COND = 51; // 使用英雄X获得Y次胜利
const TOTAL_USE_HERO_KILLS_COND = 52; // 使用英雄X击败Y个敌人
const TOTAL_USE_MAP_WINS_TIMES_COND = 53; // 在XX地图获得Y场胜利
const OFFER_REWARD_COND = 99;
const DAILY_MISSON_TYPE = 1;
const ACHIEVEMENT_MISSON_TYPE = 2;
const ACTIVITY_MISSON_TYPE = 3;
const RANK_MISSON_TYPE = 4;
const SEASONCARD_MISSON_TYPE = 5;
const OFFER_REWARD_MISSON_TYPE = 7;
const SEASON_WEAKLY_MISSON_SUBTYPE = 1;
const SEASON_CHALLENGE_MISSON_SUBTYPE = 2;
const SEASON_ACTIVE_MISSON_SUBTYPE = 3;
const DAILY_ACTIVE_VALUE_MISSON_SUBTYPE = 1;
const WEAKLY_ACTIVE_VALUE_MISSON_SUBTYPE = 2;
const SEASON_MISSON_FLAG = 1;
const DAILY_MISSION_CUSTOM_TYPE = 1;
const SEASON_WEEKLY_MISSION_CUSTOM_TYPE = 2;
const OFFER_REWARD_MISSION_CUSTOM_TYPE = 3;
const ACHIEVEMENT_MISSION_CUSTOM_TYPE = 4;
public static function get($id)
{
return getXVal(self::getMetaList(), $id);
}
public static function findAchievementLevel($level){
$taskMeta = array();
foreach (self::getMetaList() as $meta) {
if (
$meta['type'] == self::ACHIEVEMENT_MISSON_TYPE &&
$meta['target'] == $level
) {
$taskMeta = $meta;
}
}
return $taskMeta;
}
public static function getCustomTypeMetaList($type, $missionService)
{
$metaList = array();
switch ($type){
case 0 :{
foreach ($missionService->getDailyMissions() as $mission) {
$meta = self::get($mission['mission_id']);
if ($meta) {
array_push($metaList, $meta);
}
}
}
case self::DAILY_MISSON_TYPE : {
foreach ($missionService->getDailyMissions() as $mission) {
$meta = self::get($mission['mission_id']);
if ($meta) {
array_push($metaList, $meta);
}
}
foreach (self::getMetaList() as $meta) {
if ($meta['type'] == self::DAILY_MISSON_TYPE &&
in_array($meta['subtype'],
array(
self::DAILY_ACTIVE_VALUE_MISSON_SUBTYPE,
self::WEAKLY_ACTIVE_VALUE_MISSON_SUBTYPE
))) {
array_push($metaList, $meta);
}
}
}
break;
case self::OFFER_REWARD_MISSION_CUSTOM_TYPE:{
foreach ($missionService->getOfferRewardMissions() as $mission) {
$meta = self::get($mission['mission_id']);
if ($meta && $meta['type'] == self::OFFER_REWARD_MISSON_TYPE) {
array_push($metaList, $meta);
}
}
}
break;
}
return $metaList;
}
public static function isOfferRewardMission($meta)
{
return $meta['type'] == self::OFFER_REWARD_MISSION_CUSTOM_TYPE;
}
public static function getOfferRewardMissions($excludeMetas)
{
$maxHeroQuality = myself()->_getV(TN_HERO_MAX_QUALITY, 0, 1);
$metas = array();
foreach (self::getMetaList() as $meta) {
if ($meta['type'] == self::OFFER_REWARD_MISSON_TYPE) {
if ( $meta['param1'] <= $maxHeroQuality) {
if (!array_find($excludeMetas, function($val) use($meta) {
return $val['mission_id'] == $meta['id'];
})) {
array_push($metas, $meta);
}
}
}
}
return $metas;
}
public static function getDaildyMission()
{
$metas = array();
foreach (self::getMetaList() as $meta) {
if ($meta['type'] == self::DAILY_MISSON_TYPE) {
if (!in_array($meta['subtype'],
array(
self::DAILY_ACTIVE_VALUE_MISSON_SUBTYPE,
self::WEAKLY_ACTIVE_VALUE_MISSON_SUBTYPE
))) {
array_push($metas, $meta);
}
}
}
return $metas;
}
public static function getDaildyMissionCount()
{
if (is_null(self::$dailyMissionCount)) {
self::$dailyMissionCount = 0;
foreach (self::getMetaList() as $meta) {
if ($meta['type'] == self::DAILY_MISSON_TYPE) {
if ($meta['subtype'] !=
self::WEAKLY_ACTIVE_VALUE_MISSON_SUBTYPE) {
++self::$dailyMissionCount;
}
}
}
}
return self::$dailyMissionCount;
}
protected static function getMetaList()
{
if (!self::$metaList) {
self::$metaList = getMetaTable('task@task.php');
}
return self::$metaList;
}
protected static $metaList;
protected static $dailyMissionCount = null;
}

File diff suppressed because it is too large Load Diff

View File

@ -1005,11 +1005,19 @@ class TameBattleDataService extends BaseService {
$this->incValue($battleData, 'total_team_top_X_battle_times', 1);
}
}
if (!isset($battleData['total_map_win_times'])) {
$battleData['total_map_win_times'] = array();
}
$mapId = getXVal($this->allInfo,'map_id', 0);
//排名
$ranked = getXVal($this->battleInfo,'pvp_team_rank', 0);
if ($ranked == 1) {
//吃鸡次数
$this->incValue($battleData, 'total_win_times', 1);
//地图吃鸡数
$this->incValue($battleData['total_map_win_times'], $mapId, 1);
}
if ($ranked <= 3 && $ranked>0){
//排名前十 总次数
@ -1055,6 +1063,7 @@ class TameBattleDataService extends BaseService {
//单局最大存活时间
$this->maxValue($battleData, 'max_alive_time', $aliveTime);
}
//救援次数
$this->incValue($battleData, 'rescue_teammate_times', getXVal($this->battleInfo,'rescue_teammate_times', 0));
//潜水次数
@ -1126,16 +1135,12 @@ class TameBattleDataService extends BaseService {
$tmpStrs1 = explode('|', getXVal($this->battleInfo,'weapons_slot', ''));
foreach ($tmpStrs1 as $str) {
$tmpStrs2 = explode(':', $str);
if (count($tmpStrs2) >= 4) {
if (count($tmpStrs2) >= 2) {
list($weaponId, $use_times) = $tmpStrs2;
$weaponMeta = mt\Equip::get($weaponId);
if ($weaponMeta && $weaponMeta['inventory_slot'] > 0) {
$key = $weaponMeta['inventory_slot'];
if (!isset($weaponsSlotDb[$key])) {
$weaponsSlotDb[$key] = array();
}
//使用次数
$this->incValue($weaponsSlotDb, 'use_times', $use_times);
$this->incValue($weaponsSlotDb, $weaponId, $use_times);
}
}
}
@ -1175,37 +1180,27 @@ class TameBattleDataService extends BaseService {
$battleData['hero_info'] = array();
}
$heroInfo = &$battleData['hero_info'];
{
$hero_uniid = getXVal($this->battleInfo,'hero_uniid', '');
$hero = Hero::find($hero_uniid);
if ($hero){
if (!isset($heroInfo[$hero['hero_id']])){
$heroInfo[$hero['hero_id']] = array();
}
$this->incValue($heroInfo[$hero['hero_id']], "use_times", 1); //每个英雄使用次数
$ranked = getXVal($this->battleInfo,'pvp_team_rank', 0);
if ($ranked == 1) {
//吃鸡次数
$this->incValue($heroInfo[$hero['hero_id']], 'win_times', 1);//使用该英雄吃鸡获胜次数
}
if ($ranked <= 10){
//排名前十 总次数
$this->incValue($heroInfo[$hero['hero_id']], 'top_ten_times', 1);//使用该英雄进前十次数
}
if (!isset($heroInfo[$hero['hero_id']]['weapon'])){
$heroInfo[$hero['hero_id']]['weapon'] = array();
}
$weapon_uuid1 = getXVal($this->battleInfo,'weapon_uuid1', 0);
$weapon1 = Gun::find($weapon_uuid1);
if ($weapon1){
$this->incValue($heroInfo[$hero['hero_id']]['weapon'], $weapon1['gun_id'], 1);//该英雄下选用每个武器的次数
}
$weapon_uuid2 = getXVal($this->battleInfo,'weapon_uuid2', 0);
$weapon2 = Gun::find($weapon_uuid2);
if ($weapon2){
$this->incValue($heroInfo[$hero['hero_id']]['weapon'], $weapon2['gun_id'], 1);//该英雄下选用每个武器的次数
}
}
$heroId = $this->heroDto['hero_id'];
if (!isset($heroInfo[$heroId])){
$heroInfo[$heroId] = array();
}
$this->incValue($heroInfo[$heroId], "battle_times", 1); //英雄使用次数
$ranked = getXVal($this->battleInfo,'pvp_team_rank', 0);
if ($ranked == 1) {
//吃鸡次数
$this->incValue($heroInfo[$heroId], 'win_times', 1);//英雄吃鸡获胜次数
}
//英雄释放技能数
$this->incValue($heroInfo[$heroId], 'use_skill_times', getXVal($this->battleInfo,'use_skill_times', 0));
//英雄击杀次数
$kills = getXVal($this->battleInfo,'kills', 0);
if ($kills > 0) {
$this->incValue($heroInfo[$heroId], 'kills_times', $kills);
}
//英雄输出
$damageOut = getXVal($this->battleInfo,'damage_out', 0);
if ($damageOut > 0) {
$this->incValue($heroInfo[$heroId], 'damage_out', $damageOut);
}
}