import { Application, BackendSession } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { ACTIVITY_TYPE, FIRST_GIFT_STATE, STATUS } from '../../../consts'; import { newPlayerLimitPackageActivity, getPlayerLimitPackageData, limitPackageActivity } from '../../../services/limitPackageService'; import { addReward, stringToRewardParam, useGiftPackage } from '../../../services/giftPackageService'; import { ActivityShopModel } from '../../../db/ActivityShop'; import moment = require('moment'); export default function (app: Application) { return new limitPackageHandler(app); } export class limitPackageHandler { constructor(private app: Application) { } /************************新手限定礼包****************************/ /** * @description 获取新手限定活动数据 * @param {{ activityId:number}} msg * @param {BackendSession} session * @memberof limitPackageHandler */ async getNewPlayerLimitPackageActivity(msg: { activityId: number }, session: BackendSession) { const { activityId } = msg; const roleId = session.get('roleId'); const serverId = session.get('serverId'); let playerData = await newPlayerLimitPackageActivity(serverId, roleId); if (!playerData) { return resResult(STATUS.ACTIVITY_MISSING); } return resResult(STATUS.SUCCESS, { playerData }); } /************************每日每周限购礼包****************************/ /** * @description 获取每日/每周限购礼包数据 * @param {{ activityId:number, type:number }} msg * @param {BackendSession} session * @memberof limitPackageHandler */ async getLimitPackageActivity(msg: { activityId: number, type: number }, session: BackendSession) { const { activityId, type } = msg; const roleId = session.get('roleId'); const serverId = session.get('serverId'); let playerData = await limitPackageActivity(serverId, roleId, type); if (!playerData) { return resResult(STATUS.ACTIVITY_MISSING); } return resResult(STATUS.SUCCESS, { playerData }); } /** * @description 购买礼包 * @param {{ activityId: number, roundIndex: number, id: number}} msg * @param {BackendSession} session * @memberof limitPackageHandler */ async buyGood(msg: { activityId: number, roundIndex: number, id: number }, session: BackendSession) { const { activityId, roundIndex, id, } = 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 getPlayerLimitPackageData(activityId, serverId, roleId); if (!playerData) { return resResult(STATUS.ACTIVITY_MISSING); } if (playerData.roundIndex != roundIndex) { return resResult(STATUS.ACTIVITY_EXPIRE); } switch (playerData.type) { case ACTIVITY_TYPE.NEW_PLAYER_LIMIT_PACKAGE: { if (playerData.endTime < moment(new Date).valueOf()) { return resResult(STATUS.ACTIVITY_NEW_PLAYER_LIMIT_PACKAGE_END); } break; } default: break; } let item = playerData.findItem(id); if (item.countMax > 0 && item.buyCount >= item.countMax) { return resResult(STATUS.ACTIVITY_MAX_COUNT); } let rewardArray = stringToRewardParam(item.reward) let result = await addReward(roleId, roleName, sid, serverId, funcs, rewardArray); await ActivityShopModel.addRecord(activityId, roleId, roundIndex, id); return resResult(STATUS.SUCCESS, Object.assign(result, {})); } }