import { Application, BackendSession } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { STATUS, ACTIVITY_RESOURCES_TYPE, ACTIVITY_TYPE } from '../../../consts'; import { getPlayerThirtyDaysData, thirtyDaysActivity } from '../../../services/thirtyDaysService'; import { ThirtyDaysItem, ThirtyDaysPointItem } from '../../../domain/activityField/thirtyDaysField'; import { addItems, createHeroes } from '../../../services/rewardService'; import { ActivityThirtyDaysModel } from '../../../db/ActivityThirtyDays'; import { ActivityThirtyDaysPointRewardModel } from '../../../db/ActivityThirtyDaysPointReward'; export default function (app: Application) { return new thirtyDaysHandler(app); } export class thirtyDaysHandler { constructor(private app: Application) { } /************************30天大目标****************************/ /** * @description 获取30目标活动数据 * @param {{ }} msg * @param {BackendSession} session * @memberof thirtyDaysHandler */ async getThirtyDaysActivity(msg: {}, session: BackendSession) { const { } = msg; const roleId = session.get('roleId'); const serverId = session.get('serverId'); let playerData = await thirtyDaysActivity(ACTIVITY_TYPE.THIRTY_DAYS, serverId, roleId); if (!playerData) return resResult(STATUS.ACTIVITY_THIRTY_DAYS_END); return resResult(STATUS.SUCCESS, playerData); } /** * @description 获取30天完成任务的奖励 * @param {{ activityId: number, pageIndex: number, cellIndex: number}} msg * @param {BackendSession} session * @memberof thirtyDaysHandler */ async getThirtyDaysCellReward(msg: { activityId: number, pageIndex: number, cellIndex: number }, session: BackendSession) { const { activityId, pageIndex, cellIndex } = 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 getPlayerThirtyDaysData(activityId, serverId, roleId) if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); let thirtyDaysItemData: ThirtyDaysItem = playerData.findThirtyDaysItem(pageIndex, cellIndex); if (!thirtyDaysItemData) { return resResult(STATUS.ACTIVITY_DATA_ERROR); } if (!thirtyDaysItemData.isComplete) {//未完成任务 return resResult(STATUS.ACTIVITY_TASK_UNCOMPLETED); } if (thirtyDaysItemData.isReceive) {//已经领取过 return resResult(STATUS.ACTIVITY_REWARDED); } await ActivityThirtyDaysModel.addRecord(activityId, roleId, pageIndex, cellIndex); let reward = thirtyDaysItemData.goodReward(); let goods = await addItems(roleId, roleName, sid, reward); let heroReward = thirtyDaysItemData.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, cellIndex: number}} msg * @param {BackendSession} session * @memberof thirtyDaysHandler */ async getThirtyDaysPointReward(msg: { activityId: number, cellIndex: number }, session: BackendSession) { const { activityId, cellIndex } = 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 getPlayerThirtyDaysData(activityId, serverId, roleId) if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); let thirtyDaysPointItemData: ThirtyDaysPointItem = playerData.findThirtyDaysPointItem(cellIndex); if (!thirtyDaysPointItemData) { return resResult(STATUS.ACTIVITY_DATA_ERROR); } if (playerData.totalPoint - playerData.consumePoint < thirtyDaysPointItemData.consumePoint) {//点数不足 return resResult(STATUS.ACTIVITY_NO_POINT); } if (thirtyDaysPointItemData.isReceive) {//已经领取过 return resResult(STATUS.ACTIVITY_REWARDED); } await ActivityThirtyDaysPointRewardModel.addRecord(activityId, roleId, cellIndex); let reward = thirtyDaysPointItemData.goodReward(); let goods = await addItems(roleId, roleName, sid, reward); let heroReward = thirtyDaysPointItemData.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 }); } }