import { Application, BackendSession, HandlerService, } from 'pinus'; import { resResult, splitString } from '../../../pubUtils/util'; import { ACTIVITY_RESOURCES_TYPE, CURRENCY_BY_TYPE, STATUS, CURRENCY_TYPE, ITEM_CHANGE_REASON, POP_UP_SHOP_CONDITION_TYPE, ACTIVITY_TYPE, DEBUG_MAGIC_WORD, } from '../../../consts'; import { checkPopUpCondition, getPopUpShopData, getPopUpShopDataShow } from '../../../services/activity/popUpShopService'; import { ActivityModel, ActivityModelType } from '../../../db/Activity'; import { ActivityPopUpShopModel, ActivityPopUpShopModelType } from '../../../db/ActivityPopUpShop'; import { PopUpShopData } from '../../../domain/activityField/popUpShopField'; import { addReward, stringToConsumeParam, stringToRewardParam } from '../../../services/activity/giftPackageService'; import { RewardParam } from '../../../domain/activityField/rewardField'; import { handleCost } from '../../../services/role/rewardService'; import moment = require('moment'); import { getActivitiesByType, getActivityById } from '../../../services/activity/activityService'; export default function (app: Application) { new HandlerService(app, {}); return new PopUpShopHandler(app); } export class PopUpShopHandler { constructor(private app: Application) { } /************************弹出式商店****************************/ /** * @description 获取弹出式商店数据 * @param {{ }} msg * @param {{ activityId: number}} msg * @param {BackendSession} session * @memberof PopUpShopHandler */ async getPopUpShopActivity(msg: { activityId: number }, session: BackendSession) { const { activityId } = msg; const roleId = session.get('roleId'); const serverId = session.get('serverId'); let playerData = await getPopUpShopDataShow(activityId, serverId, roleId) if (!playerData) return resResult(STATUS.ACTIVITY_THIRTY_DAYS_END); return resResult(STATUS.SUCCESS, { playerData }); } async checkPopUpCondition(msg: { conditionType: number }, session: BackendSession) { const roleId = session.get('roleId'); const serverId = session.get('serverId'); let { conditionType } = msg; if( conditionType != POP_UP_SHOP_CONDITION_TYPE.GACHA_RES_NOT_ENOUGH && conditionType != POP_UP_SHOP_CONDITION_TYPE.TERAPH_RES_NOT_ENOUGH ) { return resResult(STATUS.WRONG_PARMS); } await checkPopUpCondition(serverId, roleId, conditionType, {}); return resResult(STATUS.SUCCESS); } /** * @description 购买礼包 * @param {{ activityId: number, id: number, beginTimeStamp: number}} msg * @param {BackendSession} session * @memberof PopUpShopHandler */ async buyGift(msg: { activityId: number, id: number, code: string }, session: BackendSession) { const { activityId, code, id } = msg; const roleId = session.get('roleId'); const serverId = session.get('serverId'); const sid = session.get('sid'); const roleName = session.get('roleName'); let playerData = await getPopUpShopData(activityId, serverId, roleId); if (!playerData) { return resResult(STATUS.ACTIVITY_MISSING); } if (playerData.type !== ACTIVITY_TYPE.POP_UP_SHOP) { return resResult(STATUS.ACTIVITY_TYPE_ERROR); } let record = await ActivityPopUpShopModel.findByCode(serverId, activityId, roleId, code); if(!record) return resResult(STATUS.ACTIVITY_TASK_NOT_COMPLETE); let pkg = playerData.findPackageById(record.id); let item = pkg?.findItemById(id); if(!item) { return resResult(STATUS.ACTIVITY_MISSING); } let consume = stringToConsumeParam(item.consume); let consumeResult = await handleCost(roleId, sid, consume, ITEM_CHANGE_REASON.POP_UP_BUY_GIFT); if(!consumeResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); record = await ActivityPopUpShopModel.addRecordById(serverId, activityId, roleId, code, id); let showItem = playerData.updateRecordById(record, id); let rewardParamArr: Array = stringToRewardParam(item.reward); let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.POP_UP_BUY_GIFT) return resResult(STATUS.SUCCESS, { ...result, param: { activityId, id }, item: showItem }); } async debugPushPopUpShop(msg: { conditionType: number, magicWord: string }, session: BackendSession) { const roleId = session.get('roleId'); let serverId = session.get('serverId'); const { magicWord, conditionType } = msg; if (magicWord !== DEBUG_MAGIC_WORD) { return resResult(STATUS.TOKEN_ERR); } let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.POP_UP_SHOP); for(let { activityId } of activities) { let playerData = await getPopUpShopData(activityId, serverId, roleId); for(let pkg of playerData.packages) { if(pkg.conditionType == conditionType) { await ActivityPopUpShopModel.deleteMany({ roleId, activityId, id: pkg.id }); } } } let arr = await checkPopUpCondition(serverId, roleId, conditionType, { oldLv: 0, newLv: 100, quality: 3, }); return resResult(STATUS.SUCCESS, { activities:arr }); } }