活动:弹窗活动新类型

This commit is contained in:
luying
2022-04-20 21:37:51 +08:00
parent 7b3b826167
commit 1913a4a2b9
13 changed files with 128 additions and 43 deletions
@@ -1,4 +1,4 @@
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, POP_UP_SHOP_CONDITION_TYPE, STATUS } from '../../consts';
import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, POP_UP_SHOP_CONDITION_TYPE, PUSH_BATCH, PUSH_INTERVAL, 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';
@@ -9,6 +9,9 @@ import moment = require('moment');
import { getActivitiesByType, getActivityById, pushActivities, pushActivityInter, pushSingleActivity } from './activityService';
import { RoleModel, RoleType } from '../../db/Role';
import { HeroType } from '../../db/Hero';
import { pinus } from 'pinus';
import { getRandEelm, getRandSingleEelm } from '../../pubUtils/util';
import { getAllOnlineRoles } from '../redisService';
/**
* 玩家活动数据
@@ -44,12 +47,40 @@ export async function checkPopUpConditionInCreateHero(serverId: number, roleId:
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 checkPopUpCondition(serverId: number, roleId: string, conditionType: POP_UP_SHOP_CONDITION_TYPE, param: PopUpConditionParamInter, sid?: string) {
return await checkPopUpConditions(serverId, roleId, [{ conditionType, param }], sid);
}
export async function checkPopUpConditionInEntry(serverId: number, roleId: string, sid: string) {
let guilds = pinus.app.getServersByType('guild');
let guild = getRandSingleEelm(guilds);
let isAuctionPopUpShow = await pinus.app.rpc.guild.guildActivityRemote.getAuctionPopUpShow.toServer(guild.id);
if(isAuctionPopUpShow) {
await checkPopUpCondition(serverId, roleId, POP_UP_SHOP_CONDITION_TYPE.AUCTION, {}, sid);
}
}
export async function checkPopUpConditionWhenGuildActivityEnd() {
let allOnlineUsers = await getAllOnlineRoles();
let n = Math.ceil(allOnlineUsers.length / PUSH_BATCH); // 一共多少批
let i = -1;
let interval = setInterval(async () => {
if (++i < n) {
console.log('****', i)
let users = allOnlineUsers.slice(i * PUSH_BATCH, (i + 1) * PUSH_BATCH - 1);
console.log('****', users)
for(let { serverId, roleId, sid } of users) {
await checkPopUpCondition(serverId, roleId, POP_UP_SHOP_CONDITION_TYPE.AUCTION, {}, sid);
}
} else {
clearInterval(interval);
}
}, PUSH_INTERVAL);
}
// 弹出礼包任务
export async function checkPopUpConditions(serverId: number, roleId: string, conditions: { conditionType: POP_UP_SHOP_CONDITION_TYPE, param: PopUpConditionParamInter }[]) {
export async function checkPopUpConditions(serverId: number, roleId: string, conditions: { conditionType: POP_UP_SHOP_CONDITION_TYPE, param: PopUpConditionParamInter }[], sid?: string) {
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.POP_UP_SHOP);
let pushData: pushActivityInter[] = [];
for(let { activityId, type: activityType } of activities) {
@@ -63,15 +94,23 @@ export async function checkPopUpConditions(serverId: number, roleId: string, con
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);
let map = new Map<string, PopShopItem[]>();
for(let item of items) {
if(!map.has(item.param)) {
map.set(item.param, []);
}
map.get(item.param).push(item);
}
for(let [_, items] of map) {
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);
}
}
}
}
@@ -81,7 +120,7 @@ export async function checkPopUpConditions(serverId: number, roleId: string, con
}
}
console.log('##### 6', pushData.length)
return await pushActivities(pushData, roleId);
return await pushActivities(pushData, roleId, sid);
}