134 lines
5.5 KiB
TypeScript
134 lines
5.5 KiB
TypeScript
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<RewardParam> = 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 });
|
|
}
|
|
|
|
}
|