任务:修改taskType
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user