import { Application, BackendSession } from 'pinus'; import { deltaDays, resResult } from '../../../pubUtils/util'; import { STATUS, ACTIVITY_RESOURCES_TYPE, ACTIVITY_TYPE } from '../../../consts'; import { getPlayerThirtyDaysData, playerThirtyDaysActivityDays, thirtyDaysActivity } from '../../../services/thirtyDaysService'; import { ThirtyDaysData, ThirtyDaysItem, ThirtyDaysPointItem } from '../../../domain/activityField/thirtyDaysField'; import { addItems, createHeroes } from '../../../services/rewardService'; import { ActivityThirtyDaysModel } from '../../../db/ActivityThirtyDays'; import { ActivityThirtyDaysPointRewardModel } from '../../../db/ActivityThirtyDaysPointReward'; import moment = require('moment'); import { ActivityModel, ActivityModelType } from '../../../db/Activity'; import { ServerlistModel } from '../../../db/Serverlist'; export default function (app: Application) { return new ThirtyDaysHandler(app); } export class ThirtyDaysHandler { constructor(private app: Application) { } /************************30天大目标****************************/ /** * @description 获取30目标活动数据 * @param {{ }} msg * @param {{ activityId: number}} msg * @param {BackendSession} session * @memberof ThirtyDaysHandler */ async getThirtyDaysActivity(msg: { activityId: number }, session: BackendSession) { const { activityId } = msg; const roleId = session.get('roleId'); const serverId = session.get('serverId'); let todayIndex = await playerThirtyDaysActivityDays(roleId) let playerData = await getPlayerThirtyDaysData(activityId, serverId, roleId) if (!playerData) return resResult(STATUS.ACTIVITY_THIRTY_DAYS_END); return resResult(STATUS.SUCCESS, { playerData, todayIndex }); } /** * @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 todayIndex = await playerThirtyDaysActivityDays(roleId);//玩家当前的天数 let { activityGroupId } = await ServerlistModel.findByServerId(serverId); let activityArray: ActivityModelType[] = await ActivityModel.findActivityByType(activityGroupId, ACTIVITY_TYPE.THIRTY_DAYS, 1) let activityDays = 0; for (let i = 0; i < activityArray.length; i++) { let playerData = new ThirtyDaysData(activityArray[i]); if (playerData.activityId != activityId) { activityDays += playerData.days;//周期天数 } else { break; } } 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); } if (activityDays < todayIndex && todayIndex <= (activityDays + playerData.days)) {//时间正常范围内 } else if (todayIndex > (activityDays + playerData.days)) {//活动已经过期 console.log('过期奖励') let expiredItems: Array = playerData.needMark(); let cells = expiredItems.map(obj => obj.cellIndex) await ActivityThirtyDaysPointRewardModel.setExpired(activityId, roleId, cells); } else {//活动未到开启时间 return resResult(STATUS.ACTIVITY_TIME_ERROR); } await ActivityThirtyDaysModel.addRecord(serverId, 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 }); } }