import { Application, BackendSession } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { STATUS, } from '../../../consts'; import { getPlayerGrowthData } from '../../../services/growthService'; import { getPlayerDailyChallengesData } from '../../../services/dailyChallengesService'; import { GrowthItem } from '../../../domain/activityField/growthField'; import { addItems, createHeroes } from '../../../services/rewardService'; import { ActivityGrowthModel } from '../../../db/ActivityGrowth'; import { DailyItem } from '../../../domain/activityField/dailyChallengesField'; export default function (app: Application) { return new SevenDaysHandler(app); } export class SevenDaysHandler { constructor(private app: Application) { } /** * @description 获取七天乐活动数据 * @param {{ activityId: number}} msg * @param {BackendSession} session * @memberof SevenDaysHandler */ async getSevenDaysGrowthActivity(msg: { activityId: number }, session: BackendSession) { const { activityId } = msg; const roleId = session.get('roleId'); const serverId = session.get('serverId'); let playerData = await getPlayerGrowthData(activityId, serverId, roleId) if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); return resResult(STATUS.SUCCESS, playerData); } /** * @description 获取成长任务每天完成的单个奖励 * @param {{ activityId: number, dayIndex: number, cellIndex: number, type: number}} msg * @param {BackendSession} session * @memberof SevenDaysHandler */ async getGrowthCellReward(msg: { activityId: number, dayIndex: number, cellIndex: number, type: number }, session: BackendSession) { const { activityId, dayIndex, cellIndex, type } = msg; const roleId = session.get('roleId'); const serverId = session.get('serverId'); const sid = session.get('sid'); const roleName = session.get('roleName'); const funcs: number[] = session.get('funcs'); let playerData = await getPlayerGrowthData(activityId, serverId, roleId) if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); let growthItemData: GrowthItem = playerData.findGrowthItem(dayIndex, cellIndex, type); if (!growthItemData) { return resResult(STATUS.ACTIVITY_DATA_ERROR); } if (!growthItemData.isComplete()) {//未完成任务 return resResult(STATUS.ACTIVITY_TASK_UNCOMPLETED); } if (!growthItemData.canReceive()) {//已经领取过 return resResult(STATUS.ACTIVITY_REWARDED); } await ActivityGrowthModel.addCellRecord(activityId, roleId, dayIndex, cellIndex, type, 1); let reward = growthItemData.goodReward(); let goods = await addItems(roleId, roleName, sid, reward); let heroReward = growthItemData.heroReward(); let addHeros = []; if (heroReward.length > 0) { let heroResult = await createHeroes(roleId, roleName, sid, serverId, funcs, heroReward); goods = goods.concat(heroResult.goods) addHeros = addHeros.concat(heroResult.heroes); } return resResult(STATUS.SUCCESS, { goods, addHeros }); } /** * @description 成长任务每天奖章兑换奖励 * @param {{ activityId: number, dayIndex: number}} msg * @param {BackendSession} session * @memberof SevenDaysHandler */ async getGrowthDayReward(msg: { activityId: number, dayIndex: number }, session: BackendSession) { const { activityId, dayIndex } = msg; const roleId = session.get('roleId'); const serverId = session.get('serverId'); const sid = session.get('sid'); const roleName = session.get('roleName'); const funcs = session.get('funcs'); let playerData = await getPlayerGrowthData(activityId, serverId, roleId) if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); let dayItemData: GrowthItem = playerData.findDayItem(dayIndex); if (!dayItemData) { return resResult(STATUS.ACTIVITY_DATA_ERROR); } if (playerData.totalPoint - playerData.totalConsumePoint < dayItemData.consumePoint) { return resResult(STATUS.ACTIVITY_NO_POINT); } if (dayItemData.getPointReward) {//已经领取过 return resResult(STATUS.ACTIVITY_REWARDED); } if (playerData.today() != dayIndex) { return resResult(STATUS.ACTIVITY_TIME_ERROR); } await ActivityGrowthModel.addDayRecord(activityId, roleId, dayIndex, 1); let reward = dayItemData.goodReward(); let goods = await addItems(roleId, roleName, sid, reward); let heroReward = dayItemData.heroReward(); let addHeros = []; if (heroReward.length > 0) { let heroResult = await createHeroes(roleId, roleName, sid, serverId, funcs, heroReward); goods = goods.concat(heroResult.goods) addHeros = addHeros.concat(heroResult.heroes); } return resResult(STATUS.SUCCESS, { goods, addHeros }); } /************************今日挑战****************************/ /** * @description 获取今日挑战活动数据 * @param {{ activityId: number}} msg * @param {BackendSession} session * @memberof SevenDaysHandler */ async getSevenDayDailyChallengesActivity(msg: { activityId: number }, session: BackendSession) { const { activityId } = msg; const roleId = session.get('roleId'); const serverId = session.get('serverId'); let playerData = await getPlayerDailyChallengesData(activityId, serverId, roleId) if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); return resResult(STATUS.SUCCESS, playerData); } /** * @description 获取今日挑战的单个奖励 * @param {{ activityId: number, dayIndex: number, cellIndex: number, type: number}} msg * @param {BackendSession} session * @memberof SevenDaysHandler */ async getDailyChallengesCellReward(msg: { activityId: number, dayIndex: number, cellIndex: number, type: number }, session: BackendSession) { const { activityId, dayIndex, cellIndex, type } = msg; const roleId = session.get('roleId'); const serverId = session.get('serverId'); const sid = session.get('sid'); const roleName = session.get('roleName'); const funcs = session.get('funcs'); let playerData = await getPlayerDailyChallengesData(activityId, serverId, roleId) if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); let dailyItemData: DailyItem = playerData.findDailyChallengesItem(dayIndex, cellIndex, type); if (!dailyItemData) { return resResult(STATUS.ACTIVITY_DATA_ERROR); } if (!dailyItemData.isComplete()) {//未完成任务 return resResult(STATUS.ACTIVITY_TASK_UNCOMPLETED); } if (!dailyItemData.canReceive()) {//已经领取过 return resResult(STATUS.ACTIVITY_REWARDED); } await ActivityGrowthModel.addCellRecord(activityId, roleId, dayIndex, cellIndex, type, 1); let reward = dailyItemData.goodReward(); let goods = await addItems(roleId, roleName, sid, reward); let heroReward = dailyItemData.heroReward(); let addHeros = []; if (heroReward.length > 0) { let heroResult = await createHeroes(roleId, roleName, sid, serverId, funcs, heroReward); goods = goods.concat(heroResult.goods) addHeros = addHeros.concat(heroResult.heroes); } return resResult(STATUS.SUCCESS, { goods, addHeros }); } }