diff --git a/game-server/app/servers/activity/handler/activityHandler.ts b/game-server/app/servers/activity/handler/activityHandler.ts index 48f8916de..aaea6426f 100644 --- a/game-server/app/servers/activity/handler/activityHandler.ts +++ b/game-server/app/servers/activity/handler/activityHandler.ts @@ -1,6 +1,6 @@ import { Application, BackendSession } from 'pinus'; import { resResult } from '../../../pubUtils/util'; -import { ACTIVITY_TYPE, FIRST_GIFT_STATE, SERVER_OPEN_TIME, STATUS, TASK_TYPE } from '../../../consts'; +import { ACTIVITY_TYPE, ACTIVITY_GROUP_TYPE, SERVER_OPEN_TIME, STATUS, TASK_TYPE } from '../../../consts'; import { firstGiftActivity, getPlayerFirstGiftData } from '../../../services/firstGiftService'; import { newPlayerSignInActivity, signInActivity, signInVIPActivity } from '../../../services/signInService'; import { growthFundActivity } from '../../../services/growthFundService'; @@ -24,6 +24,10 @@ import { getSelfServiceShopActivityData } from '../../../services/selfServiceSho import { ActivitySelfServiceGoodsModel } from '../../../db/ActivitySelfServiceGoods'; import { dailyMealActivity } from '../../../services/dailyMealService'; import { dailyCoinActivity } from '../../../services/dailyCoinService'; +import { ActivityGroupModel } from '../../../db/ActivityGroup'; +import { ServerlistModel } from '../../../db/Serverlist'; +import { getActivity } from '../../../services/activityService'; +import { ActivityModel } from '../../../db/Activity'; // import { ActivityDailyChallengesModel } from '../../../db/ActivityDailyChallenges'; // import { isComplete } from '../../../pubUtils/taskUtil'; @@ -466,7 +470,27 @@ export class ActivityHandler { } } - return resResult(STATUS.SUCCESS, { playerActivityArray }); + let { activityGroupId } = await ServerlistModel.findByServerId(serverId); + let groups = await ActivityGroupModel.findGroupsData(activityGroupId); + let playerGroupArray = []; + for (let groupData of groups) { + if (groupData.type !== ACTIVITY_GROUP_TYPE.UNKNOW) { + let playerActivityArray = []; + for (let activityId of groupData.activities) { + let activityData = await ActivityModel.findActivity(activityId); + if (activityData) { + let playerActivityData = await getActivity(serverId, roleId, activityId, activityData.type) + if (playerActivityData) playerActivityArray.push(playerActivityData); + } + } + playerGroupArray.push({ + type: groupData.type, + activities: playerActivityArray, + }); + } + } + + return resResult(STATUS.SUCCESS, { playerActivityArray, playerGroupArray }); } //测试活动任务数据 diff --git a/game-server/app/servers/activity/handler/dailyCoinHandler.ts b/game-server/app/servers/activity/handler/dailyCoinHandler.ts index 83787009c..c21879822 100644 --- a/game-server/app/servers/activity/handler/dailyCoinHandler.ts +++ b/game-server/app/servers/activity/handler/dailyCoinHandler.ts @@ -64,6 +64,7 @@ export class DailyCoinHandler { let allConsume: Array = [] let allReward: Array = []; let role = await RoleModel.findByRoleId(roleId) + let rateArray = [];//暴击记录 for (let i = 1; i <= count; i++) { let index = curIndex + i; console.log('第几次抽奖', index) @@ -75,7 +76,7 @@ export class DailyCoinHandler { allConsume = allConsume.concat(consume) } let rate = playerData.getRate()//翻几倍 - + rateArray.push(rate); let rewardItem: CoinRewardFormulaItem = playerData.findCoinRewardFormulaItem(index); let lv = role.lv;//玩家等级 let coinRewardCount = eval(rewardItem.rewardFormula); @@ -86,10 +87,12 @@ export class DailyCoinHandler { reward.count = reward.count * rate; } allReward = allReward.concat(baseRewardParamArr); - if (playerData.isExtra(index)) {//额外奖励 + let extraIndex = playerData.isExtra(index); + if (extraIndex != -1) {//额外奖励 let extraRewardParamArr: Array = stringToRewardParam(playerData.extraReward); - console.log('额外奖励', JSON.stringify(extraRewardParamArr)) - allReward = allReward.concat(extraRewardParamArr); + let extraReward = extraRewardParamArr[extraIndex]; + console.log('额外奖励', JSON.stringify(extraReward)) + allReward.push(extraReward); } } @@ -125,7 +128,7 @@ export class DailyCoinHandler { let exchangeCount = playerData.exchangeCount + count; return resResult(STATUS.SUCCESS, Object.assign(result, { param: { activityId, count }, - item: { exchangeCount }, + item: { exchangeCount, recordMsg: `${count}&${consumeGold}&${addCoin}`, rateArray }, })); } diff --git a/game-server/app/services/activityService.ts b/game-server/app/services/activityService.ts new file mode 100644 index 000000000..3dae3ba22 --- /dev/null +++ b/game-server/app/services/activityService.ts @@ -0,0 +1,97 @@ +import { ACTIVITY_TYPE } from '../consts'; +import { getPlayerFirstGiftData } from './firstGiftService'; +import { getPlayerSignInData, } from './signInService'; +import { getPlayerGrowthFundData, } from './growthFundService'; +import { getPlayerLimitPackageData, } from './limitPackageService'; +import { getPlayerDailyGiftsData } from './dailyGiftsService'; +import { getPlayerYuanbaoShopData, } from './yuanbaoService'; +import { getPlayerMonthlyTicketData, } from './monthlyTicketService'; +import { getPlayerRechargeMoneyData, } from './rechargeMoneyService'; +import { getPlayerThirtyDaysData, playerThirtyDaysActivityDays, } from './thirtyDaysService'; +import { getPlayerVipRechargeMoneyData, } from './vipRechargeMoneyService'; +import { getPlayerActivityData, } from './selfServiceShopActivityService'; +import { ActivitySelfServiceGoodsModel } from '../db/ActivitySelfServiceGoods'; + +/** + * 获取活动数据 + * + * @param {number} serverId 区Id + * @param {number} activityId 活动Id + * @param {string} roleId 角色Id + * + */ +export async function getActivity(serverId: number, roleId: string, activityId: number, activityType: number) { + let activityData = null; + switch (activityType) { + case ACTIVITY_TYPE.SIGN_IN://签到 4 + case ACTIVITY_TYPE.SIGN_IN_VIP://高级签到 5 + case ACTIVITY_TYPE.NEW_PLAYER_SIGN_IN://新手签到 25 + { + activityData = await getPlayerSignInData(activityId, serverId, roleId); + break; + } + case ACTIVITY_TYPE.GROWTH_FUND_MAIN://成长基金 6 + case ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP://高阶成长基金 7 + case ACTIVITY_TYPE.GROWTH_FUND_TOWER://镇念塔成长基金 8 + case ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP://高阶镇念塔成长基金 9 + case ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE://精英成长基金 10 + case ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP://高阶精英成长基金 11 + { + activityData = await getPlayerGrowthFundData(activityId, serverId, roleId); + break; + } + case ACTIVITY_TYPE.THIRTY_DAYS://30天目标活动 12 + { + let data = await getPlayerThirtyDaysData(activityId, serverId, roleId); + let todayIndex = await playerThirtyDaysActivityDays(roleId); + activityData = { playerData: data, todayIndex } + break; + } + case ACTIVITY_TYPE.SELF_SERVICE_SHOP://自选商店 糜家商队 13 + { + let data = await getPlayerActivityData(activityId, serverId, roleId); + let playerGoods = await ActivitySelfServiceGoodsModel.findData(activityId, roleId, data.roundIndex, true); + activityData = { playerData: data, playerGoods: playerGoods ? playerGoods : [] } + break; + } + case ACTIVITY_TYPE.FIRST_GIFT://首冲礼包活动 14 + { + activityData = await getPlayerFirstGiftData(activityId, serverId, roleId); + break; + } + case ACTIVITY_TYPE.LIMIT_PACKAGE_SHOP_DAILY://每日限购礼包,RMB购买礼包 16 + case ACTIVITY_TYPE.LIMIT_PACKAGE_SHOP_WEEKLY://每周限购礼包,RMB购买礼包 17 + { + activityData = await getPlayerLimitPackageData(activityId, serverId, roleId); + break; + } + case ACTIVITY_TYPE.YUAN_BAO_SHOP://元宝商店 18 + { + activityData = await getPlayerYuanbaoShopData(activityId, serverId, roleId); + break; + } + case ACTIVITY_TYPE.MONTHLY_TICKET_1://月卡1 19 + case ACTIVITY_TYPE.MONTHLY_TICKET_2://月卡2 20 + { + activityData = await getPlayerMonthlyTicketData(activityId, serverId, roleId); + break; + } + case ACTIVITY_TYPE.RECHARGE_MONEY://累计充值RMB活动 21 + { + activityData = await getPlayerRechargeMoneyData(activityId, serverId, roleId); + break; + } + case ACTIVITY_TYPE.DAILY_RMB_GIFTS://每日特惠RMB购买,一次性购买7天礼包 22 + { + activityData = await getPlayerDailyGiftsData(activityId, serverId, roleId); + break; + } + case ACTIVITY_TYPE.VIP_RECHARGE_MONEY://vip累计充值活动 26 + { + activityData = await getPlayerVipRechargeMoneyData(activityId, serverId, roleId); + break; + } + } + return activityData; +} + diff --git a/game-server/app/services/dailyCoinService.ts b/game-server/app/services/dailyCoinService.ts index d24b8836b..a2b7c4eb6 100644 --- a/game-server/app/services/dailyCoinService.ts +++ b/game-server/app/services/dailyCoinService.ts @@ -1,6 +1,7 @@ import { ACTIVITY_TYPE, DAILY_MEAL_TYPE } from '../consts'; import { ActivityModel, ActivityModelType } from '../db/Activity'; import { ActivityDailyCoinModel, ActivityDailyCoinModelType } from '../db/ActivityDailyCoin'; +import { ActivityGroupModel } from '../db/ActivityGroup'; import { ServerlistModel } from '../db/Serverlist'; import { DailyCoinData } from '../domain/activityField/dailyCoinField'; diff --git a/shared/consts/constModules/activityConst.ts b/shared/consts/constModules/activityConst.ts index c66b6a534..bf1da3405 100644 --- a/shared/consts/constModules/activityConst.ts +++ b/shared/consts/constModules/activityConst.ts @@ -1,4 +1,12 @@ +/** + * 活动类型 + */ + +export enum ACTIVITY_GROUP_TYPE { + UNKNOW = 0, // 未知类型 + FESTIVAL = 1, // 节日活动合集 +} /** * 活动类型 diff --git a/shared/db/ActivityGroup.ts b/shared/db/ActivityGroup.ts index fd884156a..ee560f4b4 100644 --- a/shared/db/ActivityGroup.ts +++ b/shared/db/ActivityGroup.ts @@ -22,6 +22,8 @@ export default class Activity_Group extends BaseModel { endTime: Date; // 里面的activity的最晚的时间 @prop({ required: true, type: Number }) serverIds: number[]; // 关联服务器列表 + @prop({ required: true }) + type: number; // 类型 ACTIVITY_GROUP_TYPE //查询组 @@ -34,6 +36,12 @@ export default class Activity_Group extends BaseModel { return result; } + //查询组 + public static async findGroupsData(groupIds: number[]) { + let result: ActivityGroupModelType[] = await ActivityGroupModel.find({ groupId: { $in: groupIds } }).lean(); + return result; + } + //查询组 public static async findGroupData(groupId: number) { let result: ActivityGroupModelType = await ActivityGroupModel.findOne({ groupId }).lean(); @@ -71,9 +79,9 @@ export default class Activity_Group extends BaseModel { private static async updateTime(groupId: number, aids: number[]) { let activities = await ActivityModel.findActivityByIds(aids); let beginTime = undefined, endTime = undefined; - for(let activity of activities) { - if(!beginTime || activity.beginTime < beginTime) beginTime = activity.beginTime; - if(!endTime || activity.endTime > endTime) endTime = activity.endTime; + for (let activity of activities) { + if (!beginTime || activity.beginTime < beginTime) beginTime = activity.beginTime; + if (!endTime || activity.endTime > endTime) endTime = activity.endTime; } let result: ActivityGroupModelType = await ActivityGroupModel.findOneAndUpdate({ groupId }, { $set: { beginTime, endTime } }, { new: true }).lean(true); @@ -85,7 +93,7 @@ export default class Activity_Group extends BaseModel { public static async pullByActivityIds(activities: number[], uid = 1) { await ActivityModel.updateGroupId(activities, 0, uid); let activityGroups = await ActivityGroupModel.find({ activities: { $in: activities } }); - for(let { groupId } of activityGroups) { + for (let { groupId } of activityGroups) { let result = await ActivityGroupModel.findOneAndUpdate({ groupId }, { $pull: { activities: { $in: activities } } }, { new: true }).lean(true); await this.updateTime(result.groupId, result.activities); } @@ -108,7 +116,7 @@ export default class Activity_Group extends BaseModel { //查询 public static async findByCondition(page: number, pageSize: number, serverId: number = 0, current: boolean = false, groupId: number = 0) { let searchObj = {}; - if (serverId != 0) searchObj['serverIds'] = { $elemMatch:{$eq:serverId} }; + if (serverId != 0) searchObj['serverIds'] = { $elemMatch: { $eq: serverId } }; if (groupId != 0) searchObj['groupId'] = groupId; if (current) { searchObj['beginTime'] = { $lte: new Date }; diff --git a/shared/domain/activityField/dailyCoinField.ts b/shared/domain/activityField/dailyCoinField.ts index 0f5ab802e..499f439df 100644 --- a/shared/domain/activityField/dailyCoinField.ts +++ b/shared/domain/activityField/dailyCoinField.ts @@ -66,7 +66,7 @@ export class DailyCoinData extends ActivityBase { public isExtra(index: number) { let arr = splitString(this.extraRewardCount, '&'); - return arr.indexOf(index) != -1; + return arr.indexOf(index); } public findConsumeExchangeFormulaItem(index: number) {