任务:添加任务类型

This commit is contained in:
luying
2022-04-29 23:09:23 +08:00
parent 7d3f71a2d0
commit 1401de6d6e
9 changed files with 277 additions and 64 deletions
@@ -13,7 +13,7 @@ import { getAp, setAp } from '../../../services/actionPointService';
import { STATUS } from '../../../consts/statusCode';
import { resResult } from '../../../pubUtils/util';
import { calculateWarStar, checkBattleHeroes, roleLevelup } from '../../../services/normalBattleService';
import { checkTask, checkTaskInBattleEnd } from '../../../services/task/taskService';
import { checkTask, checkTaskInBattleEnd, checkTaskInBattleStart } from '../../../services/task/taskService';
import { gameData } from '../../../pubUtils/data';
import * as dicParam from '../../../pubUtils/dicParam';
import { getSeconds, nowSeconds } from '../../../pubUtils/timeUtil';
@@ -125,6 +125,8 @@ export class ExpeditionBattleHandler {
let roleId = session.get('roleId');
let roleName = session.get('roleName');
let ip = session.get('ip');
let serverId = session.get('serverId');
let sid = session.get('sid');
let warInfo = gameData.war.get(battleId);
if (!warInfo) {
return resResult(STATUS.BATTLE_MISS_INFO);
@@ -167,6 +169,7 @@ export class ExpeditionBattleHandler {
}, true);
let result = await ExpeditionWarRecordModel.updateBattleCode(expeditionCode, expeditionId, EXPEDITION_WAR_RECORD_STATUS.WAITING, battleCode);
await checkTaskInBattleStart(serverId, roleId, sid, battleId);
return resResult(STATUS.SUCCESS, {
expeditionCode,
@@ -19,7 +19,7 @@ import { gameData } from '../../../pubUtils/data';
import { pushMysteryFirstMsg, pushTowerMsg, pushVestigeFirstMsg } from '../../../services/chatService';
import { getSeconds, nowSeconds } from '../../../pubUtils/timeUtil';
import { Rank } from '../../../services/rankService';
import { checkTaskInBattleEnd, checkTaskInBattleSweep } from '../../../services/task/taskService';
import { checkTaskInBattleEnd, checkTaskInBattleStart, checkTaskInBattleSweep } from '../../../services/task/taskService';
import { ActivitySelfServiceModel } from '../../../db/ActivitySelfService';
import { getSelfServiceShopActivityData } from '../../../services/activity/selfServiceShopActivityService';
import { challengeDailyGK } from '../../../services/activity/dailyGKService';
@@ -45,6 +45,8 @@ export class NormalBattleHandler {
const { battleId, heroes: seqIds = [] } = msg;
let roleId = session.get('roleId');
let roleName = session.get('roleName');
let serverId = session.get('serverId');
let sid = session.get('sid');
let ip = session.get('ip');
let warInfo = gameData.war.get(battleId);
if (!warInfo) {
@@ -113,7 +115,7 @@ export class NormalBattleHandler {
let { status } = BattleRecord;
await checkTaskInBattleStart(serverId, roleId, sid, battleId);
return resResult(STATUS.SUCCESS, {
battleId, battleCode, status, dailyNum, towerData, dungeonNum
});
@@ -332,7 +332,7 @@ export class TowerBattleHandler {
pushTowerMsg(roleId, roleName, serverId, MSG_SOURCE.TOWER_SUC, role.towerLv);
let data = await getTowerStatus(role);
await checkTask(serverId, roleId, sid, TASK_TYPE.BATTLE_TOWER_LV, { towerLv: role.towerLv - 1 });
// 更新redis
let r = new Rank(REDIS_KEY.TOWER_RANK, { serverId });
await r.setRankWithRoleInfo(roleId, role.towerLv - 1, role.towerUpTime.getTime(), role);
@@ -18,6 +18,7 @@ import { getRewardByBlueprtId, gameData, getBossHpByBlueprtId, getDicBlueprtById
import { getZeroPointD, nowSeconds } from '../pubUtils/timeUtil';
import { handleCost } from './role/rewardService';
import { addUserToTeamChannel, delTeamChannel, sendMessageToTeam, sendMessageToUsersWithSuc } from './pushService';
import { checkTaskInComBattleEnd } from './task/taskService';
/**
* 在给定的品质列表中随机返回一定数量的藏宝图Id
@@ -226,6 +227,7 @@ export async function handleComBtlProgress(teamStatus: MemComBtlTeam, robotHurtT
for (let st of teamStatus.roleStatus) {
st.fixReward = await getRealReward(teamStatus.blueprtId, st);
};
await checkTaskInComBattleEnd(teamStatus.roleStatus, teamStatus.capId);
}
let team = await ComBattleTeamModel.syncTeamData({ teamCode, status: battleSt, roleStatus: teamStatus.roleStatus, bossHpArr: teamStatus.bossHpArr, endTime: teamStatus.endTime });
if (!team) return resResult(STATUS.COM_BATTLE_RESULT_ERR);
+73 -3
View File
@@ -697,9 +697,9 @@ export class CheckSingleTask {
}
case TASK_TYPE.BATTLE_TOWER: // 47. 通关镇念塔x次
{
let { warId, count } = param;
let { warId, count = 1, skipTower } = param;
let dicWar = gameData.war.get(warId);
if (dicWar.warType == WAR_TYPE.TOWER) {
if (dicWar.warType == WAR_TYPE.TOWER || skipTower) {
result = { inc: count };
}
break;
@@ -708,7 +708,7 @@ export class CheckSingleTask {
{
let { warId, count } = param;
let dicWar = gameData.war.get(warId);
if (dicWar.warType == WAR_TYPE.VESTIGE) {
if (dicWar.warType == WAR_TYPE.VESTIGE && this.checkIdList(dicTaskParam, 0, warId)) {
result = { inc: count };
}
break;
@@ -1209,6 +1209,76 @@ export class CheckSingleTask {
result = { inc: count };
break;
}
case TASK_TYPE.BATTLE_MAIN_START: // 111. 挑战主线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_TOWER_START: // 112. 挑战镇念塔X次
{
let { warId, count = 1, skipTower } = param;
let dicWar = gameData.war.get(warId);
if (dicWar.warType == WAR_TYPE.TOWER || skipTower) {
result = { inc: count };
}
break;
}
case TASK_TYPE.BATTLE_VESTIGE_START: // 113. 挑战遗迹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_DAILY_START: // 114. 挑战每日关卡X次
{
let { warId, count } = param;
let dicWar = gameData.war.get(warId);
if(dicWar.warType == WAR_TYPE.DAILY && (dicTaskParam[0] == 0 || dicTaskParam[0] == dicWar.dailyType)) {
result = { inc: count };
}
break;
}
case TASK_TYPE.COM_BATTLE_CREATE_TEAM_WIN: // 115. 寻宝招募队友x次
{
result = { inc: 1 };
break;
}
case TASK_TYPE.COM_BATTLE_ASSIST_TEAM_WIN: // 116. 协助寻宝x次
{
result = { inc: 1 };
break;
}
case TASK_TYPE.COM_BATTLE_WIN: // 117. 组队寻宝
{
result = { inc: 1 };
break;
}
case TASK_TYPE.BATTLE_EXPEDITION_START: // 118. 远征挑战X次
{
let { warId, count } = param;
let dicWar = gameData.war.get(warId);
if (dicWar.warType == WAR_TYPE.EXPEDITION) {
result = { inc: count };
}
break;
}
case TASK_TYPE.BATTLE_DUNGEON_START: // 119. 秘境挑战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;
}
}
return result
}
@@ -107,6 +107,17 @@ export async function checkTaskInGuildTrain(serverId: number, roleId: string, si
await task.saveAndPush(sid);
}
export async function checkTaskInBattleStart(serverId: number, roleId: string, sid: string, warId: number) {
let task = new CheckTask(serverId, roleId);
task.setParam(TASK_TYPE.BATTLE_MAIN_START, { warId, count: 1 });
task.setParam(TASK_TYPE.BATTLE_TOWER_START, { warId, count: 1 });
task.setParam(TASK_TYPE.BATTLE_VESTIGE_START, { warId, count: 1 });
task.setParam(TASK_TYPE.BATTLE_DAILY_START, { warId, count: 1 });
task.setParam(TASK_TYPE.BATTLE_EXPEDITION_START, { warId, count: 1 });
task.setParam(TASK_TYPE.BATTLE_DUNGEON_START, { warId, count: 1 });
await task.saveAndPush(sid);
}
/**
* battle.normalBattleHandler.battleEnd 中会触发的任务,因为有点多提出来了
*/
@@ -131,6 +142,14 @@ export async function checkTaskInGuildTrain(serverId: number, roleId: string, si
}
}
export async function checkTaskInSkipTower(serverId: number, roleId: string, sid: string, towerLv: number) {
let task = new CheckTask(serverId, roleId);
task.setParam(TASK_TYPE.BATTLE_TOWER_LV, { towerLv: towerLv - 1 });
task.setParam(TASK_TYPE.BATTLE_TOWER_START, { skipTower: true });
task.setParam(TASK_TYPE.BATTLE_TOWER, { skipTower: true });
await task.saveAndPush(sid);
}
export async function checkTaskInBattleSweep(serverId: number, roleId: string, sid: string, warId: number, count: number) {
let task = new CheckTask(serverId, roleId);
@@ -165,6 +184,23 @@ export async function checkTaskInComBattleStart(roleStatus: RoleStatus[], capId:
}
}
export async function checkTaskInComBattleEnd(roleStatus: RoleStatus[], capId: string) {
for (let { roleId, isRobot } of roleStatus) {
if (!isRobot) {
let role = await RoleModel.findByRoleId(roleId);
let task = new CheckTask(role.serverId, roleId);
task.setRole(role);
if (roleId == capId && roleStatus.length > 1) { // 招募队友
task.setParam(TASK_TYPE.COM_BATTLE_CREATE_TEAM_WIN, {});
} else if (roleId !== capId) { // 协助寻宝
task.setParam(TASK_TYPE.COM_BATTLE_ASSIST_TEAM_WIN, {});
}
task.setParam(TASK_TYPE.COM_BATTLE_WIN, {});
await task.saveAndPush();
}
}
}
export async function checkTaskInPvpEnd(serverId: number, roleId: string, sid: string, isSuccess: boolean, heroScores: HeroScores[], myRank: number) {
let task = new CheckTask(serverId, roleId);
task.setParam(TASK_TYPE.PVP_WIN, { isSuccess });