任务:埋点完成

This commit is contained in:
luying
2021-04-18 19:25:25 +08:00
parent 4bd4513ae6
commit 260744e7d2
20 changed files with 234 additions and 67 deletions

View File

@@ -623,5 +623,27 @@ export enum TASK_TYPE {
BATTLE_TOWER_LV = 46, // 镇念塔层数
BATTLE_TOWER = 47, // 镇念塔
BATTLE_VESTIGE = 48, // 遗迹
BATTLE_EXPEDITION = 49, // 远征
BATTLE_EXPEDITION_BOX = 50, // 领取远征宝箱
COM_BATTLE_CREATE_TEAM = 51, // 寻宝招募队友
COM_BATTLE_BLUEPRT = 52, // 合成藏宝图
COM_BATTLE_ASSIST_TEAM = 53, // 队友协助寻宝
COM_BATTLE = 54, // 寻宝
COM_BATTLE_QUALITY = 55, // 按品质寻宝
COM_BATTLE_DROP = 56, // 寻宝掉落碎片
PVP = 57, // PVP挑战
PVP_WIN = 58, // PVP胜利
PVP_RECEIVE_BOX = 59, // 领取宝箱
PVP_WIN_SERIES = 60, // PVP连胜
PVP_HERO_SCORE = 61, // PVP武将积分
PVP_RANK = 62, // PVP达到第几名
GUILD_JOB = 63, // 军团官职
GUILD_DONATE = 64, // 军团捐献
GUILD_RECEIVE_BOX = 65, // 领取活跃宝箱
GUILD_REFINE = 66, // 军团炼器
GUILD_ASSIST_REFINE = 67, // 军团助力加速
GUILD_TRAIN_SUCESS = 68, // 军团练兵场成功压制
GUILD_BOSS = 69, // 军团演武台挑战
GUILD_TRAIN = 70, // 挑战练兵场
GUILD_ACTIVITY = 71, // 军团活动
}

View File

@@ -44,6 +44,20 @@ export default class UserTaskRec extends BaseModel {
let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, type, group }, { $setOnInsert: { code: genCode(8), taskType, received: false }, $inc: { count } }, { new: true, upsert: true }).lean();
return rec;
}
public static async checkHistoryAndSetTaskRec(roleId: string, type: number, taskType: number, group: number, count: number) {
let rec: UserTaskRecType = await UserTaskRecModel.findOne({ roleId, type, group }).lean();
if(rec) {
if(rec.count < count) {
rec = await UserTaskRecModel.setTaskRec(roleId, type, taskType, group, count);
}
} else {
rec = await UserTaskRecModel.setTaskRec(roleId, type, taskType, group, count);
}
return rec;
}
}
export const UserTaskRecModel = getModelForClass(UserTaskRec);

View File

@@ -1,3 +1,5 @@
import { HeroScores } from "../../db/PvpHistoryOpp";
export class TaskParam {
star?: number;
quality?: number;
@@ -13,4 +15,11 @@ export class TaskParam {
heroes?: number[];
eventType?: number;
dailyType?: number;
point?: number;
gid?: number;
heroScores?: HeroScores[];
rankLv?: number;
title?: number;
job?: number;
aid?: number;
}

View File

@@ -1,12 +1,13 @@
import { gameData } from './data';
import { DicTask } from './dictionary/DicTask';
import { TASK_TYPE, ABI_STAGE, WAR_TYPE } from '../consts';
import { TASK_TYPE, ABI_STAGE, WAR_TYPE, GUILD_JOB } from '../consts';
import { UserTaskRecModel, UserTaskRecType } from '../db/UserTaskRec'
import { RoleType } from '../db/Role';
import { TaskParam } from '../domain/roleField/task';
import { getTodayZeroPoint } from './timeUtil';
import { HeroType } from '../db/Hero';
import { EquipType, EquipModel } from '../db/Equip';
import { RewardInter } from './interface';
export async function checkTaskWithRoles(taskType: number, roles: RoleType[]) {
let pushMessage = new Array<{type: number, id: number, count: number, received: boolean}>();
@@ -275,11 +276,31 @@ export async function checkTaskWithWar(roleId: string, taskType: number, warId:
pushMessage = await checkTask(roleId, taskType, count, true, {});
}
}
else if (taskType == TASK_TYPE.BATTLE_VESTIGE) {
else if (taskType == TASK_TYPE.BATTLE_VESTIGE)
{
if(dicWar.warType == WAR_TYPE.VESTIGE) {
pushMessage = await checkTask(roleId, taskType, count, true, {});
}
}
else if (taskType == TASK_TYPE.BATTLE_EXPEDITION)
{
if(dicWar.warType == WAR_TYPE.EXPEDITION) {
pushMessage = await checkTask(roleId, taskType, count, true, {});
}
}
return pushMessage
}
export async function checkTaskWithGoods(roleId: string, taskType: number, goods: RewardInter[]) {
let pushMessage = new Array<{type: number, id: number, count: number, received: boolean}>();
if(taskType == TASK_TYPE.COM_BATTLE_DROP)
{
for(let { id, count } of goods) {
let push = await checkTask(roleId, taskType, count, true, { gid: id });
pushMessage.concat(push);
}
}
return pushMessage
}
@@ -311,37 +332,12 @@ export async function checkTask(roleId: string, taskType: number, count: number,
// 检查各项任务是否达成,达成了就保存到数据库
export async function checkTaskRec(roleId: string, group: number, dicTask: DicTask, count: number, isInc: boolean, param: TaskParam ) {
let { type, taskParam, taskType } = dicTask;
let isMatch = false; // 条件是否满足
let isMatch = true; // 条件是否满足
let checkHistory = false; // 是否检查历史
switch(taskType) {
case TASK_TYPE.LOGIN_SUM:
case TASK_TYPE.LOGIN_SERIES:
case TASK_TYPE.ROLE_LV:
case TASK_TYPE.GASHA:
case TASK_TYPE.HERO_NUM:
case TASK_TYPE.HERO_QUALITY_UP:
case TASK_TYPE.HERO_WAKE_UP:
case TASK_TYPE.HERO_TRAIN_SUM:
case TASK_TYPE.HERO_STAGE_UP:
case TASK_TYPE.ROLE_SCHOOL_UNLOCK:
case TASK_TYPE.ROLE_SCHOOL_PUT_HERO:
case TASK_TYPE.ROLE_TITLE:
case TASK_TYPE.ROLE_TERAPH_STRENGTHEN:
case TASK_TYPE.ROLE_SCROLL_ACTIVE:
case TASK_TYPE.EQUIP_SUM:
case TASK_TYPE.EQUIP_JEWEL:
case TASK_TYPE.EQUIP_COMPOSE_SUIT:
case TASK_TYPE.EQUIP_SUIT:
case TASK_TYPE.EQUIP_RESTRENGTHEN:
case TASK_TYPE.EQUIP_REFINE:
case TASK_TYPE.EQUIP_JEWEL_SUM:
case TASK_TYPE.FRIEND_NUM:
case TASK_TYPE.FRIEND_SEND_HEART:
case TASK_TYPE.BATTLE_MAIN_SWEEP:
case TASK_TYPE.BATTLE_DUNGEON:
case TASK_TYPE.BATTLE_TOWER_LV:
case TASK_TYPE.BATTLE_TOWER:
case TASK_TYPE.BATTLE_VESTIGE:
isMatch = true;
isMatch = taskParam[0] == param.title;
checkHistory = true;
break;
case TASK_TYPE.HERO_STAR_UP:
isMatch = taskParam[1] == param.star;
@@ -366,6 +362,7 @@ export async function checkTaskRec(roleId: string, group: number, dicTask: DicTa
isMatch = taskParam[1] == param.connectLv;
break;
case TASK_TYPE.EQUIP_BY_HERO:
isMatch = false;
if(param.isPutOn && param.count == taskParam[1]) { // 装上之后达到 +1
isMatch = true;
} else if (!param.isPutOn && param.count < taskParam[1]) { // 脱下后不能达到 -1
@@ -382,46 +379,80 @@ export async function checkTaskRec(roleId: string, group: number, dicTask: DicTa
isMatch = taskParam[0] == 0 || param.chatType == taskParam[0];
break;
case TASK_TYPE.BATTLE_WITH_HERO:
isMatch = checkWarId(taskParam, 2, param.warId) && checkHero(taskParam, 0, param.heroes);
isMatch = checkIdList(taskParam, 2, param.warId) && checkHero(taskParam, 0, param.heroes);
break;
case TASK_TYPE.BATTLE_MAIN:
case TASK_TYPE.BATTLE_DUNGEON_WAR:
isMatch = checkWarId(taskParam, 0, param.warId);
isMatch = checkIdList(taskParam, 0, param.warId);
break;
case TASK_TYPE.BATTLE_EVENT:
isMatch = taskParam[0] == 0 || param.eventType == taskParam[0];
break;
case TASK_TYPE.BATTLE_DAILY_STAR:
isMatch = (taskParam[0] == 0 || param.star == taskParam[0]) && checkWarId(taskParam, 2, param.warId);
isMatch = (taskParam[0] == 0 || param.star == taskParam[0]) && checkIdList(taskParam, 2, param.warId);
break;
case TASK_TYPE.BATTLE_DAILY:
isMatch = taskParam[0] == 0 || param.dailyType == taskParam[0];
break;
case TASK_TYPE.BATTLE_EXPEDITION_BOX:
isMatch = taskParam[1] == 0 || param.point == taskParam[1];
break;
case TASK_TYPE.COM_BATTLE_BLUEPRT:
case TASK_TYPE.COM_BATTLE_QUALITY:
isMatch = taskParam[0] == 0 || param.quality == taskParam[0];
break;
case TASK_TYPE.COM_BATTLE_DROP:
isMatch = checkIdList(taskParam, 1, param.gid);
break;
case TASK_TYPE.PVP_HERO_SCORE:
for(let { score } of param.heroScores) {
if(score >= taskParam[0]) {
count++;
}
}
if(count <= 0) isMatch = false;
break;
case TASK_TYPE.PVP_RANK:
isMatch = taskParam[0] <= param.rankLv;
checkHistory = true;
break;
case TASK_TYPE.GUILD_JOB:
isMatch = taskParam[0] <= param.job && param.job != GUILD_JOB.DAJIANGJUN;
checkHistory = true;
break;
case TASK_TYPE.GUILD_REFINE:
isMatch = taskParam[0] == 0 || param.quality == taskParam[0];
break;
}
console.log('****isMatch', isMatch, type, taskType, group, count)
console.log('****isMatch', isMatch, checkHistory, type, taskType, group, count)
if(isMatch) {
if(isInc) {
let rec = await UserTaskRecModel.incTaskRec(roleId, type, taskType, group, count);
return rec;
} else {
let rec = await UserTaskRecModel.setTaskRec(roleId, type, taskType, group, count);
return rec;
if(checkHistory) {
let rec = await UserTaskRecModel.checkHistoryAndSetTaskRec(roleId, type, taskType, group, count);
return rec;
} else {
let rec = await UserTaskRecModel.setTaskRec(roleId, type, taskType, group, count);
return rec;
}
}
}
}
/**
* 检查关卡id是否在条件
* @param taskParam 条件number[] 填法 warcount&warid&... 有多少warid就warcount填几
* @param index warcount在第几位0开始
* @param warId 关卡id
* 检查id是否在某列表
* @param taskParam 条件number[] 填法 如: count&id&... 有多少id就count填几
* @param index count在第几位0开始
* @param id 关卡id
*/
function checkWarId(taskParam: number[], index: number, warId: number) {
let warCount = taskParam[index];
if(!warCount) return false;
let warIdList = taskParam.slice(index + 1, index + 1 + warCount);
return warIdList.indexOf(warId) != -1;
function checkIdList(taskParam: number[], index: number, id: number) {
let count = taskParam[index];
if(!count) return false;
let idList = taskParam.slice(index + 1, index + 1 + count);
return idList.indexOf(id) != -1;
}
function checkHero(taskParam: number[], index: number, heroes: number[]) {