127 lines
5.5 KiB
TypeScript
127 lines
5.5 KiB
TypeScript
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, POP_UP_SHOP_CONDITION_TYPE, STATUS } from '../../consts';
|
|
import { ActivityModel, ActivityModelType } from '../../db/Activity';
|
|
import { PopShopItem, PopUpConditionParamInter, PopUpShopData, PopUpShopPackage, PopUpShopItemShow, } from '../../domain/activityField/popUpShopField';
|
|
import { RewardParam } from '../../domain/activityField/rewardField';
|
|
import { addReward, stringToRewardParam } from './giftPackageService';
|
|
import { ActivityPopUpShopModel, ActivityPopUpShopModelType, PopUpShopItem } from '../../db/ActivityPopUpShop';
|
|
import { ServerlistModel } from '../../db/Serverlist';
|
|
import moment = require('moment');
|
|
import { getActivitiesByType, getActivityById, pushActivities, pushActivityInter, pushSingleActivity } from './activityService';
|
|
import { RoleModel, RoleType } from '../../db/Role';
|
|
import { HeroType } from '../../db/Hero';
|
|
|
|
/**
|
|
* 玩家活动数据
|
|
*
|
|
* @param {number} serverId 区Id
|
|
* @param {number} activityId 活动Id
|
|
* @param {string} roleId 角色Id
|
|
*
|
|
*/
|
|
export async function getPopUpShopData(activityId: number, serverId: number, roleId: string, role?: RoleType) {
|
|
if(!role) role = await RoleModel.findByRoleId(roleId, 'roleId totalPay');
|
|
|
|
let activityData = await getActivityById(activityId);
|
|
let playerRecords = await ActivityPopUpShopModel.findAllEffectData(serverId, activityId, roleId);
|
|
let latestRecords = await ActivityPopUpShopModel.findAllLastData(serverId, activityId, roleId);
|
|
|
|
let playerData = new PopUpShopData(activityData);
|
|
playerData.setPlayerRecords(playerRecords, latestRecords, role.totalPay);
|
|
|
|
return playerData;
|
|
}
|
|
|
|
export async function getPopUpShopDataShow(activityId: number, serverId: number, roleId: string, role?: RoleType) {
|
|
let playerData = await getPopUpShopData(activityId, serverId, roleId, role);
|
|
if(playerData && playerData.canShow && playerData.canShow()) {
|
|
return playerData.getShowResult();
|
|
}
|
|
return null
|
|
}
|
|
|
|
export async function checkPopUpConditionInCreateHero(serverId, roleId, heroes: HeroType[]) {
|
|
let conditions = heroes.map(hero => ({ conditionType: POP_UP_SHOP_CONDITION_TYPE.GET_HERO_BY_QUALITY, param: { quality: hero.quality } }));
|
|
return await checkPopUpConditions(serverId, roleId, conditions);
|
|
}
|
|
|
|
export async function checkPopUpCondition(serverId: number, roleId: string, conditionType: POP_UP_SHOP_CONDITION_TYPE, param: PopUpConditionParamInter) {
|
|
return await checkPopUpConditions(serverId, roleId, [{ conditionType, param }]);
|
|
}
|
|
|
|
// 弹出礼包任务
|
|
export async function checkPopUpConditions(serverId: number, roleId: string, conditions: { conditionType: POP_UP_SHOP_CONDITION_TYPE, param: PopUpConditionParamInter }[]) {
|
|
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.POP_UP_SHOP);
|
|
let pushData: pushActivityInter[] = [];
|
|
for(let { activityId, type: activityType } of activities) {
|
|
|
|
let playerData = await getPopUpShopData(activityId, serverId, roleId);
|
|
let pushItems: PopUpShopItemShow[] = [];
|
|
for(let { conditionType, param } of conditions) {
|
|
for(let pkg of playerData.packages) {
|
|
console.log('##### 3', pkg.id, pkg.checkPackageCanPush(conditionType))
|
|
if( !pkg.checkPackageCanPush(conditionType)) { // 筛选推送
|
|
continue;
|
|
}
|
|
let items = pkg.getItemsByCondition(param);
|
|
console.log('##### 4', items, items.length)
|
|
if(items.length > 0) {
|
|
let popUpShopRec = await ActivityPopUpShopModel.createRecord({
|
|
serverId, activityId, roleId, id: pkg.id,
|
|
...pkg.getEffectTime(),
|
|
items: items.map(item => new PopUpShopItem(item))
|
|
});
|
|
let result = pkg.pushPackage(popUpShopRec);
|
|
pushItems.push(...result);
|
|
}
|
|
}
|
|
}
|
|
console.log('##### 5', pushItems.length)
|
|
if(pushItems.length > 0) {
|
|
pushData.push({ activityId, activityType, param: { popUpShopItems: pushItems } });
|
|
}
|
|
}
|
|
console.log('##### 6', pushData.length)
|
|
await pushActivities(pushData, roleId);
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* 结算购买礼包的奖励
|
|
*
|
|
* @param {number} serverId 区Id
|
|
* @param {number} activityId 活动Id
|
|
* @param {string} roleId 角色Id
|
|
* @param {string} productID 商品ID
|
|
*
|
|
*/
|
|
export async function makePopUpShopReward(roleId: string, roleName: string, sid: string, serverId: number,
|
|
activityId: number, productID: string, paramStr: string, roleInfo: RoleType) {
|
|
if (!paramStr) {
|
|
return STATUS.ORDER_PARAM_ERROR;
|
|
}
|
|
let paramObj = JSON.parse(paramStr);
|
|
let code = paramObj.code;
|
|
|
|
let playerData = await getPopUpShopData(activityId, serverId, roleId, roleInfo);
|
|
if (!playerData) {
|
|
return STATUS.ACTIVITY_MISSING;
|
|
}
|
|
if (playerData.type !== ACTIVITY_TYPE.POP_UP_SHOP) {
|
|
return STATUS.ACTIVITY_TYPE_ERROR;
|
|
}
|
|
|
|
let playerRecord: ActivityPopUpShopModelType = await ActivityPopUpShopModel.addRecord(serverId, activityId, roleId, code, productID);
|
|
if (!playerRecord) {
|
|
return STATUS.APPLY_ORDER_ERROR;
|
|
}
|
|
let item = playerData.updateRecord(playerRecord, productID);
|
|
|
|
let rewardParamArr: Array<RewardParam> = stringToRewardParam(item.reward);
|
|
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.POP_UP_BUY_GIFT)
|
|
|
|
return {
|
|
code: 0,
|
|
data: Object.assign(result, { item: item, activityId })
|
|
}
|
|
} |