import { Application, BackendSession } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { STATUS, ACTIVITY_RESOURCES_TYPE } from '../../../consts'; import { getPlayerGrowthData } from '../../../services/growthService'; import { getPlayerDailyChallengesData } from '../../../services/dailyChallengesService'; import { GrowthItem } from '../../../domain/activityField/growthField'; import { addItems, createHeroes, handleCost } from '../../../services/rewardService'; import { ActivityGrowthModel } from '../../../db/ActivityGrowth'; import { DailyItem } from '../../../domain/activityField/dailyChallengesField'; import { getPlayerDailyGiftsData } from '../../../services/dailyGiftsService'; import { DailyGiftItem } from '../../../domain/activityField/dailyGiftsField'; import { ActivityDailyGiftsModel } from '../../../db/ActivityDailyGifts'; 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 }); } /************************每日特惠礼包****************************/ /** * @description 获取每日特惠礼包活动数据 * @param {{ activityId: number}} msg * @param {BackendSession} session * @memberof SevenDaysHandler */ async getSevenDayDailyGiftsActivity(msg: { activityId: number }, session: BackendSession) { const { activityId } = msg; const roleId = session.get('roleId'); const serverId = session.get('serverId'); let playerData = await getPlayerDailyGiftsData(activityId, serverId, roleId) if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); return resResult(STATUS.SUCCESS, playerData); } /** * @description 购买每日特惠礼包 * @param {{ activityId: number, dayIndex: number, cellIndex: number}} msg * @param {BackendSession} session * @memberof SevenDaysHandler */ async buyDailyGiftsCell(msg: { activityId: number, dayIndex: number, cellIndex: number }, session: BackendSession) { const { activityId, dayIndex, cellIndex } = 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 getPlayerDailyGiftsData(activityId, serverId, roleId) if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); let dailyItemData: DailyGiftItem = playerData.findDailyGiftsItem(dayIndex, cellIndex); if (!dailyItemData) { return resResult(STATUS.ACTIVITY_DATA_ERROR); } if (!dailyItemData.canBuy()) {//最大次数 return resResult(STATUS.ACTIVITY_MAX_COUNT); } if (dayIndex > playerData.today()) {//还未开启 return resResult(STATUS.ACTIVITY_UNOPENED); } //货币是否足够 let consumeData = dailyItemData.consumeRes(); let consumeType = consumeData.type;//购买类型 if (consumeType == ACTIVITY_RESOURCES_TYPE.GOODS) {//物品表,元宝、金币、体力 let result = await handleCost(roleId, sid, [{ id: consumeData.id, count: consumeData.count }]); if (!result) return resResult(STATUS.ACTIVITY_RES_NOT_ENOUGH); } else if (consumeType == ACTIVITY_RESOURCES_TYPE.RMB) {//RMB购买 } await ActivityDailyGiftsModel.buyRecord(activityId, roleId, dayIndex, cellIndex, 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 }); } }