import { Application, BackendSession } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { STATUS, } from '../../../consts'; import { getPlayerGrowthData } from '../../../services/growthService'; import { GrowthItem } from '../../../domain/activityField/growthField'; import { addItems, createHero } from '../../../services/rewardService'; import { HeroModel } from '../../../db/Hero'; import { gameData } from '../../../pubUtils/data'; import { ActivityModelType } from '../../../db/Activity'; import { ActivityGrowthModel } from '../../../db/ActivityGrowth'; 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'); 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) { for (let heroParam of heroReward) { // 检查是否存在武将 let hid = heroParam.id; let count = heroParam.count; let hasHero = await HeroModel.findByHidAndRole(hid, roleId); if (hasHero && count > 1) {//已经有武将 continue; } // 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质 let dicHero = gameData.hero.get(hid); if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND); // createHero let hero = await createHero(roleId, roleName, sid, serverId, { hid }); addHeros.push(hero); } } return resResult(STATUS.SUCCESS, { playerData, 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'); 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); } 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) { for (let heroParam of heroReward) { // 检查是否存在武将 let hid = heroParam.id; let count = heroParam.count; let hasHero = await HeroModel.findByHidAndRole(hid, roleId); if (hasHero && count > 1) {//已经有武将 continue; } // 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质 let dicHero = gameData.hero.get(hid); if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND); // createHero let { heroes } = await createHero(roleId, roleName, sid, serverId, { hid }); for(let hero of heroes) { addHeros.push(hero); } } } return resResult(STATUS.SUCCESS, { playerData, goods, addHeros }); } }