任务:修改taskType

This commit is contained in:
陆莹
2022-03-18 20:50:11 +08:00
parent 37d2e6cfa7
commit 1c3d1c209c
24 changed files with 821 additions and 2102 deletions
+596 -117
View File
@@ -1,5 +1,6 @@
import { pinus } from "pinus";
import { ACTIVITY_TYPE, STATUS, TASK_SUM_TYPE, TASK_TYPE } from "../../consts";
import { ABI_STAGE, ACTIVITY_TYPE, STATUS, TASK_SUM_TYPE, TASK_TYPE, WAR_TYPE } from "../../consts";
import { ActivityModelType } from "../../db/Activity";
import { ActivityBuyRecordsModel } from "../../db/ActivityBuyRecords";
import { ActivityDailyChallengesModel } from "../../db/ActivityDailyChallenges";
import { ActivityGrowthModel } from "../../db/ActivityGrowth";
@@ -7,7 +8,7 @@ import { ActivityGrowthFundModel } from "../../db/ActivityGrowthFund";
import { ActivityRefreshTaskModel } from "../../db/ActivityRefreshTask";
import { ActivityThirtyDaysModel } from "../../db/ActivityThirtyDays";
import { ActivityTreasureHuntTaskModel } from "../../db/ActivityTreasureHuntTask";
import { RoleType } from "../../db/Role";
import { RoleModel, RoleType } from "../../db/Role";
import { ServerTempModel, ServerTempModelType } from "../../db/ServerTemp";
import { UserTaskRecModel } from "../../db/UserTaskRec";
import { GrowthFundData } from "../../domain/activityField/growthFundField";
@@ -15,57 +16,169 @@ import { RefreshTaskData } from "../../domain/activityField/refreshTaskField";
import { SevenDaysData } from "../../domain/activityField/sevenDaysField";
import { ThirtyDaysData } from "../../domain/activityField/thirtyDaysField";
import { TreasureHuntData } from "../../domain/activityField/treasureHuntField";
import { TaskListReturn, UpdateTaskParam } from "../../domain/roleField/task";
import { TaskListReturn, TaskParam, TaskParamInter, UpdateTaskParam } from "../../domain/roleField/task";
import { gameData } from "../../pubUtils/data";
import { getZeroPoint } from "../../pubUtils/timeUtil";
import { resResult } from "../../pubUtils/util";
import { getActivities, getActivitiesByType, getActivityByServerId } from "../activity/activityService";
import { getRoleOnlineInfo } from "../redisService";
import { getRoleCreateTime, getRoleOnlineInfo, getServerCreateTime } from "../redisService";
export class CheckTask {
serverId: number; // 区id
roleId: string; // 玩家id
role?: RoleType;
roleCreateTime: number; // 玩家的创建时间
serverCreateTime: number; // 服务器的创建时间
taskPushMessages: TaskListReturn[] = [];
activityTaskPushMessages = [];
treasureHuntTemp: ServerTempModelType;
tasks: CheckSingleTask[] = [];
constructor(serverId: number, roleId: string) {
this.serverId = serverId;
this.roleId = roleId;
}
public setParam(taskType: TASK_TYPE, param: TaskParamInter) {
let task = new CheckSingleTask(taskType, this);
task.param.setParam(param);
this.tasks.push(task);
}
public async saveAndPush(sid: string) {
for(let task of this.tasks) {
await task.check();
}
await this.pushMessage(sid);
}
public setRole(role: RoleType) {
this.role = role;
}
// 用于活动任务:获取服务器开服时间
async getServerCreateTime() {
if(!this.serverCreateTime) {
this.serverCreateTime = await getServerCreateTime(this.serverId);
}
return this.serverCreateTime;
}
// 用于活动任务:获取玩家创建时间
async getRoleCreateTime() {
if(!this.roleCreateTime) {
if(this.role) {
this.roleCreateTime = this.role?.createTime;
} else {
this.roleCreateTime = await getRoleCreateTime(this.roleId);
}
}
if(!this.roleCreateTime) {
let role = await RoleModel.findByRoleId(this.roleId);
this.role = role;
this.roleCreateTime = role.createTime;
}
return this.roleCreateTime;
}
// 神州探秘活动
async getTreasureHuntTemp() {
if(this.treasureHuntTemp) return this.treasureHuntTemp;
let tempData: ServerTempModelType = await ServerTempModel.findData(this.serverId);
if (tempData) {
this.treasureHuntTemp = tempData;
return tempData
} else {
return null
}
}
// 推送
public async pushMessage(sid: string) {
let roleId = this.roleId;
if (!sid) {
let onlineUser = await getRoleOnlineInfo(roleId);
sid = onlineUser.sid;
}
let uids = [{ uid: roleId, sid }];
if(!!sid) {
if (this.taskPushMessages.length > 0) {
pinus.app.get('channelService').pushMessageByUids('onTaskUpdate', resResult(STATUS.SUCCESS, this.taskPushMessages), uids);
}
if (this.activityTaskPushMessages.length > 0) {
pinus.app.get('channelService').pushMessageByUids('onActivityTaskUpdate', resResult(STATUS.SUCCESS, this.activityTaskPushMessages), uids);
}
}
}
}
/**
* @class CheckTask
* @classdesc 检查某个玩家任务的达成情况
*/
export class CheckTask {
export class CheckSingleTask {
serverId: number; // 区id
roleId: string; // 玩家id
taskType: TASK_TYPE; // 任务type
roleCreateTime: number; // 玩家的创建时间
serverCreateTime: number; // 服务器的创建时间
parent: CheckTask;
param: TaskParam; // 检查任务时传入的参数
treasureHuntTemp: ServerTempModelType;
constructor(serverId: number, roleId: string, taskType: TASK_TYPE, roleCreateTime: number, serverCreateTime: number) {
this.serverId = serverId;
this.roleId = roleId;
constructor(taskType: TASK_TYPE, parent: CheckTask) {
this.taskType = taskType;
this.roleCreateTime = roleCreateTime;
this.serverCreateTime = serverCreateTime;
this.parent = parent;
this.serverId = parent.serverId;
this.roleId = parent.roleId;
this.param = new TaskParam();
}
private addTaskPushMessage(...param: TaskListReturn[]) {
this.parent.taskPushMessages.push(...param);
}
private addActivityTaskPushMessage(...param: any[]) {
this.parent.activityTaskPushMessages.push(...param);
}
private getServerCreateTime() {
return this.parent.getServerCreateTime();
}
private getRoleCreateTime() {
return this.parent.getRoleCreateTime();
}
private getRole() {
return this.parent.role;
}
/**
* @description 检查任务的主程序
*/
public async check(count: number, sid: string) {
let { taskType, roleId, serverId, roleCreateTime, serverCreateTime } = this;
public async check() {
let { taskType, roleId, serverId } = this;
let serverCreateTime = await this.getServerCreateTime();
let roleCreateTime = await this.getRoleCreateTime();
let param = this.param;
let dicTaskTypeDesc = gameData.taskDescByType.get(taskType);
let taskPushMessages: TaskListReturn[] = [];
let activityTaskPushMessages = [];
// 检查一般任务
let dicTasks = gameData.taskType.get(taskType);
for (let dicTask of dicTasks) {
let taskUpdateParam = this.checkIsMatch(dicTask.taskParam, count);
let taskUpdateParam = await this.checkIsMatch(dicTask.taskParam, async () => {
let data = await UserTaskRecModel.findByRoleAndGroup(roleId, dicTask.type, taskType, dicTask.group);
return data? data.records: []
});
if (taskUpdateParam) {
let rec = await UserTaskRecModel.checkAndUpdateTask(roleId, dicTask.type, taskType, dicTask.group, taskUpdateParam);
let rec = await UserTaskRecModel.setOrIncTask(roleId, dicTask.type, taskType, dicTask.group, taskUpdateParam);
if (!rec) continue;
if (rec.received && rec.received.includes(dicTask.id)) continue; // 已领取,不再推送
let received = rec.received || [];
taskPushMessages.push({ type: dicTask.type, id: dicTask.id, count: rec.count, received: received.includes(dicTask.id) });
this.addTaskPushMessage({ type: dicTask.type, id: dicTask.id, count: rec.count, received: received.includes(dicTask.id) });
}
}
@@ -83,11 +196,14 @@ export class CheckTask {
let playerData = new SevenDaysData(activity, roleCreateTime, serverCreateTime);
let growthTaskArray = playerData.growth.findTaskByType(taskType); // 所有任务
for (let task of growthTaskArray) {
let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count);
let taskUpdateParam = await this.checkIsMatch(task.taskParamArray, async () => {
let data = await ActivityGrowthModel.findDataByCellIndex(serverId, activityId, roleId, task.dayIndex, task.cellIndex);
return data? data.records: []
});
if(taskUpdateParam) {
let rec = await ActivityGrowthModel.checkAndUpdateTask(serverId, activityId, roleId, task.dayIndex, task.cellIndex, taskUpdateParam);
let rec = await ActivityGrowthModel.setOrIncTask(serverId, activityId, roleId, task.dayIndex, task.cellIndex, taskUpdateParam);
if(!rec) continue;
activityTaskPushMessages.push({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId, activityType: "growth" });
this.addActivityTaskPushMessage({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId, activityType: "growth" });
}
}
//今日挑战统计
@@ -96,11 +212,14 @@ export class CheckTask {
if(dicTaskTypeDesc.sumType == TASK_SUM_TYPE.DO && task.dayIndex != playerData.today()) {
continue;
}
let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count);
let taskUpdateParam = await this.checkIsMatch(task.taskParamArray, async () => {
let data = await ActivityDailyChallengesModel.findDataByCellIndex(serverId, activityId, roleId, task.dayIndex, task.cellIndex);
return data? data.records: []
});
if(taskUpdateParam) {
let rec = await ActivityDailyChallengesModel.checkAndUpdateTask(serverId, activityId, roleId, task.dayIndex, task.cellIndex, taskUpdateParam);
let rec = await ActivityDailyChallengesModel.setOrIncTask(serverId, activityId, roleId, task.dayIndex, task.cellIndex, taskUpdateParam);
if(!rec) continue;
activityTaskPushMessages.push({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId, activityType: "daily" });
this.addActivityTaskPushMessage({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId, activityType: "daily" });
}
}
break;
@@ -111,11 +230,14 @@ export class CheckTask {
let taskActivity = new RefreshTaskData(activity, roleCreateTime, serverCreateTime);
let taskArray = taskActivity.findTaskByType(taskType);
for (let task of taskArray) {
let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count);
let taskUpdateParam = await this.checkIsMatch(task.taskParamArray, async () => {
let data = await ActivityRefreshTaskModel.findDataById(serverId, activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id);
return data? data.records: []
});
if(taskUpdateParam) {
let rec = await ActivityRefreshTaskModel.checkAndUpdateTask(serverId, activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id, taskUpdateParam);
let rec = await ActivityRefreshTaskModel.setOrIncTask(serverId, activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id, taskUpdateParam);
if(!rec) continue;
activityTaskPushMessages.push({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId });
this.addActivityTaskPushMessage({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId });
}
}
break;
@@ -123,16 +245,19 @@ export class CheckTask {
case ACTIVITY_TYPE.TREASURE_HUNT:
{
// 寻宝奇兵任务
let tempData = await this.getTreasureHuntTemp();
let tempData = await this.parent.getTreasureHuntTemp();
if(tempData && tempData.huntActivityId == activityId) {
let playerData = new TreasureHuntData(activity, roleCreateTime, serverCreateTime);
let taskArray = playerData.tasks.findItemByTaskType(taskType);
for (let task of taskArray) {
let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count);
let taskUpdateParam = await this.checkIsMatch(task.taskParamArray, async () => {
let data = await ActivityTreasureHuntTaskModel.findDataByCellIndex(serverId, activityId, roleId, tempData.huntRoundIndex, task.cellIndex);
return data? data.records: [];
});
if(taskUpdateParam) {
let rec = await ActivityTreasureHuntTaskModel.checkAndUpdateTask(serverId, activityId, roleId, tempData.huntRoundIndex, task.cellIndex, taskUpdateParam);
let rec = await ActivityTreasureHuntTaskModel.setOrIncTask(serverId, activityId, roleId, tempData.huntRoundIndex, task.cellIndex, taskUpdateParam);
if(!rec) continue;
activityTaskPushMessages.push({ ...task, totalCount: rec.totalCount, activityId });
this.addActivityTaskPushMessage({ ...task, totalCount: rec.totalCount, activityId });
}
}
}
@@ -144,11 +269,14 @@ export class CheckTask {
let thirtyDaysActivity = new ThirtyDaysData(activity, roleCreateTime, serverCreateTime);
let taskArray = thirtyDaysActivity.findTaskByType(taskType);
for (let task of taskArray) {
let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count);
let taskUpdateParam = await this.checkIsMatch(task.taskParamArray, async () => {
let data = await ActivityThirtyDaysModel.findDataByCellIndex(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab);
return data? data.records: [];
});
if(taskUpdateParam) {
let rec = await ActivityThirtyDaysModel.checkAndUpdateTask(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab, taskUpdateParam);
let rec = await ActivityThirtyDaysModel.setOrIncTask(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab, taskUpdateParam);
if(!rec) continue;
activityTaskPushMessages.push({ ...task, totalCount: rec.totalCount, activityId });
this.addActivityTaskPushMessage({ ...task, totalCount: rec.totalCount, activityId });
}
}
break;
@@ -158,17 +286,7 @@ export class CheckTask {
{
//主线成长基金
if(taskType != TASK_TYPE.BATTLE_MAIN) continue;
let growthFundActivity = new GrowthFundData(activity, roleCreateTime, serverCreateTime);
let playerRecords = await ActivityGrowthFundModel.findData(activity.activityId, roleId);
growthFundActivity.setPlayerRecords(playerRecords);
if (growthFundActivity.isVipActivity()) {//vip高阶需要购买
let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, roleId);
growthFundActivity.initBuyRecords(buyRecords);
}
let taskArray = growthFundActivity.unLockItem(this.param.warId);
//推送
activityTaskPushMessages.push(...taskArray);
await this.checkFundAcctivityTask(activity, param.warId);
break;
}
case ACTIVITY_TYPE.GROWTH_FUND_TOWER:
@@ -176,17 +294,7 @@ export class CheckTask {
{
//镇念塔成长基金
if(taskType != TASK_TYPE.BATTLE_TOWER_LV) continue;
let growthFundActivity = new GrowthFundData(activity, roleCreateTime, serverCreateTime);
let playerRecords = await ActivityGrowthFundModel.findData(activity.activityId, roleId);
growthFundActivity.setPlayerRecords(playerRecords);
if (growthFundActivity.isVipActivity()) {//vip高阶需要购买
let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, roleId);
growthFundActivity.initBuyRecords(buyRecords);
}
let taskArray = growthFundActivity.unLockItem(this.param.towerLv);
//推送
activityTaskPushMessages.push(...taskArray);
await this.checkFundAcctivityTask(activity, param.towerLv);
break;
}
case ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE:
@@ -194,77 +302,448 @@ export class CheckTask {
{
//精英成长基金
if(taskType != TASK_TYPE.BATTLE_MAIN_ELITE) continue;
let growthFundActivity = new GrowthFundData(activity, roleCreateTime, serverCreateTime);
let playerRecords = await ActivityGrowthFundModel.findData(activity.activityId, roleId);
growthFundActivity.setPlayerRecords(playerRecords);
if (growthFundActivity.isVipActivity()) {//vip高阶需要购买
let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, roleId);
growthFundActivity.initBuyRecords(buyRecords);
}
let taskArray = growthFundActivity.unLockItem(this.param.warId);
//推送
activityTaskPushMessages.push(...taskArray);
await this.checkFundAcctivityTask(activity, param.warId);
break;
}
}
}
if (taskPushMessages.length > 0) {
if (!sid) {
let onlineUser = await getRoleOnlineInfo(roleId);
sid = onlineUser.sid;
}
if (!!sid) {
let uids = [{ uid: roleId, sid }];
pinus.app.get('channelService').pushMessageByUids('onTaskUpdate', resResult(STATUS.SUCCESS, taskPushMessages), uids);
}
}
if (activityTaskPushMessages?.length > 0) {
if (!sid) {
let onlineUser = await getRoleOnlineInfo(roleId);
sid = onlineUser.sid;
}
if (!!sid) {
let uids = [{ uid: roleId, sid }];
pinus.app.get('channelService').pushMessageByUids('onActivityTaskUpdate', resResult(STATUS.SUCCESS, activityTaskPushMessages), uids);
}
}
}
public checkIsMatch(dicTaskParam: number[], count: number): UpdateTaskParam {
private async checkFundAcctivityTask(activity: ActivityModelType, unlockParam: number) {
let serverCreateTime = await this.getServerCreateTime();
let roleCreateTime = await this.getRoleCreateTime();
let growthFundActivity = new GrowthFundData(activity, roleCreateTime, serverCreateTime);
let playerRecords = await ActivityGrowthFundModel.findData(activity.activityId, this.roleId);
growthFundActivity.setPlayerRecords(playerRecords);
if (growthFundActivity.isVipActivity()) {//vip高阶需要购买
let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, this.roleId);
growthFundActivity.initBuyRecords(buyRecords);
}
let taskArray = growthFundActivity.unLockItem(unlockParam);
//推送
this.addActivityTaskPushMessage(...taskArray);
}
public async checkIsMatch(dicTaskParam: number[], getRecord: () => Promise<string[]>) {
let param = this.param;
let result: UpdateTaskParam = null;
switch(this.taskType) {
case TASK_TYPE.LOGIN_SUM:
case TASK_TYPE.LOGIN_SUM: // 1. 累计登录 x 天
{
let role = this.getRole();
let today = getZeroPoint();
if (today > param.role.loginTime) {
return { inc: count }
if (today > role.loginTime) {
result = { inc: 1 }
}
break;
}
case TASK_TYPE.LOGIN_SERIES: // 2. 连续登录 x 天
{
let role = this.getRole();
let today = getZeroPoint();
if (today > role.loginTime) {
if (today - role.loginTime > 24 * 60 * 60) {
result = { set: 1 }
} else {
result = { inc: 1 }
}
}
break;
}
case TASK_TYPE.ROLE_LV: // 3. 主公达x级
{
let { lv, oldLv } = param;
if(oldLv < dicTaskParam[0] && lv >= dicTaskParam[0]) {
result = { set: lv }
}
break;
}
case TASK_TYPE.GACHA: // 4. 招募x次
{
let { count } = param;
result = { inc: count };
break;
}
case TASK_TYPE.HERO_NUM: // 5. 拥有x名武将
{
let { heroNum } = param;
result = { inc: heroNum };
break;
}
case TASK_TYPE.HERO_STAR_UP: // 6. x名武将升星x次
{
let { hero } = param;
let records = await getRecord();
let count = 0, index = -1;
for(let i = 0; i < records.length; i++) {
let arr = records[i].split('|');
if(parseInt(arr[0]) == hero.hid) {
count = parseInt(arr[1]);
index = i;
break;
}
}
if(count + 1 >= dicTaskParam[1]) {
records[index] = `${hero.hid}_${count + 1}`;
result = { inc: 1, records }
} else {
records.push(`${hero.hid}_${count + 1}`);
result = { records }
}
break;
}
case TASK_TYPE.HERO_QUALITY: // 7. 拥有x名初始x品质武将
{
let { heroes } = param;
let num = 0;
for(let { hid } of heroes) {
let dicHero = gameData.hero.get(hid);
if(dicHero.quality == dicTaskParam[1]) {
num ++;
}
}
result = { inc: num };
break;
}
case TASK_TYPE.HERO_QUALITY_STAR_UP: // 8. x名x品质升至x星
{
let { heroes, hero, oldStar } = param;
if(param.heroes) { // 创建武将的时候
let num = 0;
for(let { hid, star } of heroes) {
let dicHero = gameData.hero.get(hid);
if(dicHero.quality == dicTaskParam[1] && star == dicTaskParam[2]) {
num ++;
}
}
result = { inc: num };
} else { // 武将升星的时候
let dicHero = gameData.hero.get(hero.hid);
if(dicHero.quality == dicTaskParam[1] && hero.star >= dicTaskParam[2] && oldStar < dicTaskParam[2]) {
result = { inc: 1 }
}
}
break;
}
case TASK_TYPE.HERO_LV: // 9. x名武将升至x级
{
let { heroes, hero, oldLv } = param;
if(heroes) { // 创建武将的时候
let num = 0;
for(let { lv } of heroes) {
if(lv >= dicTaskParam[1]) {
num ++;
}
}
result = { inc: num };
} else { // 武将升级的时候
if(hero.lv >= dicTaskParam[1] && oldLv < dicTaskParam[1]) {
result = { inc: 1 }
}
}
break;
}
case TASK_TYPE.HERO_TRAIN: // 10. x名武将各训练x次
{
let { hero, trainCount } = param;
let records = await getRecord();
let count = 0, index = -1;
for(let i = 0; i < records.length; i++) {
let arr = records[i].split('|');
if(parseInt(arr[0]) == hero.hid) {
count = parseInt(arr[1]);
index = i;
break;
}
}
if( count < dicTaskParam[1] && count + trainCount >= dicTaskParam[1]) {
records[index] = `${hero.hid}_${count + trainCount}`;
result = { inc: 1, records }
} else {
records.push(`${hero.hid}_${count + trainCount}`);
result = { records }
}
break;
}
case TASK_TYPE.HERO_QUALITY_UP: // 11. x名武将进行升品
{
let { hero } = param;
let records = await getRecord();
if(records.indexOf(`${hero.hid}`) == -1) {
records.push(`${hero.hid}`);
result = { records, inc: 1 };
}
break;
}
case TASK_TYPE.HERO_WAKE_UP: // 12.武将觉醒x次
{
let { hero, oldColorStar } = param;
if(oldColorStar == 0 && hero.colorStar > 0) {
result = { inc: 1 };
}
break;
}
case TASK_TYPE.HERO_TRAIN_SUM: // 13. 训练x次
{
let { trainCount } = param;
result = { inc: trainCount };
break;
}
case TASK_TYPE.HERO_STAGE_UP: // 14. x名武将各兵种进阶x次
{
let { hero, stageUpCnt } = param;
let records = await getRecord();
let count = 0, index = -1;
for(let i = 0; i < records.length; i++) {
let arr = records[i].split('|');
if(parseInt(arr[0]) == hero.hid) {
count = parseInt(arr[1]);
index = i;
break;
}
}
if( count < dicTaskParam[1] && count + stageUpCnt >= dicTaskParam[1]) {
records[index] = `${hero.hid}_${count + stageUpCnt}`;
result = { inc: 1, records }
} else {
records.push(`${hero.hid}_${count + stageUpCnt}`);
result = { records }
}
break;
}
case TASK_TYPE.HERO_FAVOUR_LV: // 15.
{
let { hero, oldFavourLv } = param;
if(dicTaskParam[1] > oldFavourLv && dicTaskParam[1] <= hero.favourLv) {
result = { inc: 1 };
}
break;
}
case TASK_TYPE.HERO_CONNECT: // 16. 激活x次 x星 武将羁绊
{
let { connectLv } = param;
if(dicTaskParam[1] == connectLv) {
result = { inc: 1 };
}
break;
}
case TASK_TYPE.CHAT:
{
if (dicTaskParam[0] == 0 || dicTaskParam[0] == param.chatType) {
result = { inc: param.count };
}
break;
}
case TASK_TYPE.FRIEND_NUM:
{
let role = this.getRole();
result = { set: role.friendCnt };
break;
}
case TASK_TYPE.BATTLE_WITH_HERO: // 38. 使用hId武将挑战x关卡x次
{
let { warId, battleHeroes } = param;
if(this.checkIdList(dicTaskParam, 2, warId) && battleHeroes.indexOf(dicTaskParam[0]) != -1) {
result = { inc: 1 };
}
break;
}
case TASK_TYPE.BATTLE_MAIN: // 39. 主线通关第x关
{
let { warId, count } = param;
let dicWar = gameData.war.get(warId);
if (dicWar.warType == WAR_TYPE.NORMAL) {
result = { inc: count };
}
break;
}
case TASK_TYPE.BATTLE_MAIN_SWEEP: // 40. 主线扫荡X次
{
let { warId, count } = param;
let dicWar = gameData.war.get(warId);
if (dicWar.warType == WAR_TYPE.NORMAL) {
result = { inc: count }
}
break;
}
case TASK_TYPE.BATTLE_DAILY_STAR: // 42. 每日x星通关 x 次
{
let { warId, battleStar } = param;
let dicWar = gameData.war.get(warId);
if (dicWar.warType == WAR_TYPE.DAILY && (dicTaskParam[0] == 0|| dicTaskParam[0] == battleStar) && this.checkIdList(dicTaskParam, 2, warId)) {
result = { inc: 1 }
}
break;
}
case TASK_TYPE.BATTLE_DAILY: // 43. 每日关卡挑战x次
{
let { warId, count } = param;
let dicWar = gameData.war.get(warId);
if(dicTaskParam[0] == 0 || dicTaskParam[0] == dicWar.dailyType) {
result = { inc: count };
}
break;
}
case TASK_TYPE.BATTLE_DUNGEON: // 44. 参与秘境x次
{
let { warId, count } = param;
let dicWar = gameData.war.get(warId);
if(dicWar.warType == WAR_TYPE.MYSTERY || dicWar.warType == WAR_TYPE.MYSTERY_ELITE) {
result = { inc: count };
}
break;
}
case TASK_TYPE.BATTLE_DUNGEON_WAR: // 45. 秘境通关x关x难度
{
let { warId, count } = param;
let dicWar = gameData.war.get(warId);
if (dicWar.warType == WAR_TYPE.MYSTERY || dicWar.warType == WAR_TYPE.MYSTERY_ELITE && this.checkIdList(dicTaskParam, 0, warId)) {
result = { inc: count };
}
break;
}
case TASK_TYPE.BATTLE_TOWER: // 47. 通关镇念塔x次
{
let { warId, count } = param;
let dicWar = gameData.war.get(warId);
if (dicWar.warType == WAR_TYPE.TOWER) {
result = { inc: count };
}
break;
}
case TASK_TYPE.BATTLE_VESTIGE: // 48. 挑战遗迹x次
{
let { warId, count } = param;
let dicWar = gameData.war.get(warId);
if (dicWar.warType == WAR_TYPE.VESTIGE) {
result = { inc: count };
}
break;
}
case TASK_TYPE.BATTLE_EXPEDITION: // 49. 开启远征x次
{
let { warId, count } = param;
let dicWar = gameData.war.get(warId);
if (dicWar.warType == WAR_TYPE.EXPEDITION) {
result = { inc: count };
}
break;
}
case TASK_TYPE.COM_BATTLE_CREATE_TEAM: // 51. 寻宝招募队友x次
{
result = { inc: 1 };
break;
}
case TASK_TYPE.COM_BATTLE_ASSIST_TEAM: // 53. 协助寻宝x次
{
result = { inc: 1 };
break;
}
case TASK_TYPE.COM_BATTLE: // 54. 组队寻宝
{
result = { inc: 1 };
break;
}
case TASK_TYPE.PVP_RECEIVE_BOX: // 59. 领取x次pvp巅峰之路宝箱
{
result = { inc: 1 };
break;
}
case TASK_TYPE.PVP: // 57. pvp挑战 x 次
{
result = { inc: 1 };
break;
}
case TASK_TYPE.PVP_WIN: // 58. pvp胜利 x 次
{
let { isSuccess } = param;
if(isSuccess) {
result = { inc: 1 };
}
break;
}
case TASK_TYPE.PVP_WIN_SERIES: // 60. pvp连胜x次
{
let { isSuccess } = param;
if (isSuccess) {
result = { inc: 1 };
} else {
result = { set: 0 };
}
break;
}
case TASK_TYPE.PVP_HERO_SCORE: // 61. pvp拥有x个积分达到x的武将
{
let { heroScores } = param;
let count = 0;
for (let { score } of heroScores) {
if (score >= dicTaskParam[0]) {
count++;
}
}
if (count > 0) {
result = { set: count };
}
break;
}
case TASK_TYPE.HERO_QUALITY_TO_QUALITY_COUNT: // 74. x名初始x品质武将升至X品质
{
let { hero } = param;
let dicHero = gameData.hero.get(hero.hid);
if(dicHero.quality == dicTaskParam[1] && hero.quality == dicTaskParam[2]) {
result = { inc: 1 };
}
break;
}
case TASK_TYPE.HERO_QUALITY_WAKE_UP_COUNT: // 75. x名初始x品质武将觉醒
{
let { hero, oldColorStar } = param;
let dicHero = gameData.hero.get(hero.hid);
if(dicTaskParam[1] == dicHero.quality && oldColorStar == 0 && hero.colorStar > 0) {
result = { inc: 1 };
}
break;
}
case TASK_TYPE.HERO_WAKE_UP_STAR_UP_COUNT: // 76. x名武将觉醒后升至x星
{
let { hero, oldColorStar } = param;
if(dicTaskParam[1] > oldColorStar && hero.colorStar >= dicTaskParam[1]) {
result = { inc: 1 };
}
break;
}
case TASK_TYPE.GACHA_QUALITY_COUNT: // 81. 抽到*次品质*武将
{
let { heroes } = param;
let count = 0;
for (let hero of heroes) {
let dicHero = gameData.hero.get(hero.hid);
if(dicHero.quality == dicTaskParam[1]) count++;
}
if(count > 0) {
result = { inc: count };
}
break;
}
case TASK_TYPE.HERO_WAKE_UP_COUNT: // 84. x名武将觉醒
{
let { hero, oldColorStar } = param;
if(oldColorStar == 0 && hero.colorStar > 0) {
result = { inc: 1 };
}
break;
}
}
return result
}
private async getTreasureHuntTemp() {
if(this.treasureHuntTemp) return this.treasureHuntTemp;
let tempData: ServerTempModelType = await ServerTempModel.findData(this.serverId);
if (tempData) {
this.treasureHuntTemp = tempData;
return tempData
} else {
return null
}
private 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;
}
}
class TaskParam {
role?: RoleType; // 玩家数据
warId?: number;
towerLv?: number;
public setRole(role: RoleType) {
this.role = role;
}
}