diff --git a/game-server/app/servers/activity/handler/activityHandler.ts b/game-server/app/servers/activity/handler/activityHandler.ts index e34701932..b0db01aa3 100644 --- a/game-server/app/servers/activity/handler/activityHandler.ts +++ b/game-server/app/servers/activity/handler/activityHandler.ts @@ -17,6 +17,7 @@ import { playerThirtyDaysActivityDays, thirtyDaysActivity } from '../../../servi import { dailyRMBGiftsActivity } from '../../../services/dailyRMBGiftsService'; import { popUpShopActivity } from '../../../services/popUpShopService'; import { vipRechargeMoneyActivity } from '../../../services/vipRechargeMoneyService'; +import { sevenDaysActivity } from '../../../services/sevenDaysService'; // import { ActivityDailyChallengesModel } from '../../../db/ActivityDailyChallenges'; // import { isComplete } from '../../../pubUtils/taskUtil'; @@ -42,44 +43,44 @@ export class ActivityHandler { let test = true; let playerActivityArray = []; - //七天乐活动-成长任务 1 2 3 - { - let endTime = moment(SERVER_OPEN_TIME).startOf('d').add(7, 'd').toDate(); - if (new Date() < endTime || test) {//开启中,开服7天后过期 - let sevenData = []; - let growthData = await growthActivity(serverId, roleId); - if (growthData) { - sevenData.push({ - type: ACTIVITY_TYPE.TASK_GROWTH, - activityId: growthData.activityId, - data: growthData, - }); - } - let dailyChallengesData = await dailyChallengesActivity(serverId, roleId); - if (dailyChallengesData) { - sevenData.push({ - type: ACTIVITY_TYPE.TASK_DAILY_CHALLENGES, - activityId: dailyChallengesData.activityId, - data: dailyChallengesData, - }); - } - let dailyGiftsData = await dailyGiftsActivity(serverId, roleId); - if (dailyGiftsData) { - sevenData.push({ - type: ACTIVITY_TYPE.DAILY_DISCOUNT_GIFT, - activityId: dailyGiftsData.activityId, - data: dailyGiftsData, - }); - } - if (sevenData.length > 0) { - playerActivityArray.push({ - type: ACTIVITY_TYPE.SEVEN_DAY, - activityId: 0, - data: sevenData, - }); - } - } - } + // //七天乐活动-成长任务 1 2 3 + // { + // let endTime = moment(SERVER_OPEN_TIME).startOf('d').add(7, 'd').toDate(); + // if (new Date() < endTime || test) {//开启中,开服7天后过期 + // let sevenData = []; + // let growthData = await growthActivity(serverId, roleId); + // if (growthData) { + // sevenData.push({ + // type: ACTIVITY_TYPE.TASK_GROWTH, + // activityId: growthData.activityId, + // data: growthData, + // }); + // } + // let dailyChallengesData = await dailyChallengesActivity(serverId, roleId); + // if (dailyChallengesData) { + // sevenData.push({ + // type: ACTIVITY_TYPE.TASK_DAILY_CHALLENGES, + // activityId: dailyChallengesData.activityId, + // data: dailyChallengesData, + // }); + // } + // let dailyGiftsData = await dailyGiftsActivity(serverId, roleId); + // if (dailyGiftsData) { + // sevenData.push({ + // type: ACTIVITY_TYPE.DAILY_DISCOUNT_GIFT, + // activityId: dailyGiftsData.activityId, + // data: dailyGiftsData, + // }); + // } + // if (sevenData.length > 0) { + // playerActivityArray.push({ + // type: ACTIVITY_TYPE.SEVEN_DAY, + // activityId: 0, + // data: sevenData, + // }); + // } + // } + // } //14天乐活动-成长任务 1 2 3 // { // let beginTime = moment(SERVER_OPEN_TIME).startOf('d').add(7, 'd').toDate(); @@ -383,6 +384,42 @@ export class ActivityHandler { }); } } + + //七天乐活动 27 + { + let data = await sevenDaysActivity(serverId, roleId, ACTIVITY_TYPE.SEVEN_DAY); + if (data) { + playerActivityArray.push({ + type: ACTIVITY_TYPE.SEVEN_DAY, + activityId: data.activityId, + data, + }); + } + } + + //十四天乐活动 28 + { + let data = await sevenDaysActivity(serverId, roleId, ACTIVITY_TYPE.FOURTEEN_DAY); + if (data) { + playerActivityArray.push({ + type: ACTIVITY_TYPE.FOURTEEN_DAY, + activityId: data.activityId, + data, + }); + } + } + + //通用七天乐活动 29 + { + let data = await sevenDaysActivity(serverId, roleId, ACTIVITY_TYPE.COMMON_SEVEN_DAY); + if (data) { + playerActivityArray.push({ + type: ACTIVITY_TYPE.COMMON_SEVEN_DAY, + activityId: data.activityId, + data, + }); + } + } return resResult(STATUS.SUCCESS, { playerActivityArray }); } diff --git a/game-server/app/servers/activity/handler/dailyChallengesHandler.ts b/game-server/app/servers/activity/handler/dailyChallengesHandler.ts new file mode 100644 index 000000000..fe46894fa --- /dev/null +++ b/game-server/app/servers/activity/handler/dailyChallengesHandler.ts @@ -0,0 +1,79 @@ +import { Application, BackendSession } from 'pinus'; +import { resResult } from '../../../pubUtils/util'; +import { STATUS } from '../../../consts'; +import { getPlayerDailyChallengesData } from '../../../services/dailyChallengesService'; +import { DailyItem } from '../../../domain/activityField/dailyChallengesField'; +import { addReward, stringToRewardParam } from '../../../services/giftPackageService'; +import { RewardParam } from '../../../domain/activityField/rewardField'; +import { ActivityDailyChallengesModel } from '../../../db/ActivityDailyChallenges'; + + +export default function (app: Application) { + return new DailyChallengesHandler(app); +} + +export class DailyChallengesHandler { + constructor(private app: Application) { + } + + /************************今日挑战****************************/ + + /** + * @description 获取今日挑战活动数据 + * @param {{ activityId: number}} msg + * @param {BackendSession} session + * @memberof DailyChallengesHandler + */ + async getDailyChallengesActivity(msg: { activityId: number }, session: BackendSession) { + const { activityId } = msg; + const roleId = session.get('roleId'); + const serverId = session.get('serverId'); + + let playerData = await getPlayerDailyChallengesData(activityId, serverId, roleId) + + if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); + + return resResult(STATUS.SUCCESS, playerData); + } + + /** + * @description 获取今日挑战的单个奖励 + * @param {{ activityId: number, dayIndex: number, cellIndex: number, type: number}} msg + * @param {BackendSession} session + * @memberof DailyChallengesHandler + */ + async getDailyChallengeReward(msg: { activityId: number, dayIndex: number, cellIndex: number, type: number }, session: BackendSession) { + const { activityId, dayIndex, cellIndex, type } = msg; + const roleId = session.get('roleId'); + const serverId = session.get('serverId'); + const sid = session.get('sid'); + const roleName = session.get('roleName'); + const funcs = session.get('funcs'); + + let playerData = await getPlayerDailyChallengesData(activityId, serverId, roleId) + if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); + + let dailyItemData: DailyItem = playerData.findDailyChallengesItem(dayIndex, cellIndex, type); + if (!dailyItemData) { + return resResult(STATUS.ACTIVITY_DATA_ERROR); + } + if (!dailyItemData.isComplete()) {//未完成任务 + return resResult(STATUS.ACTIVITY_TASK_UNCOMPLETED); + } + if (!dailyItemData.canReceive()) {//已经领取过 + return resResult(STATUS.ACTIVITY_REWARDED); + } + + await ActivityDailyChallengesModel.addCellRecord(serverId, activityId, roleId, dayIndex, cellIndex, type, 1); + + let rewardParamArr: Array = stringToRewardParam(dailyItemData.reward); + let result = await addReward(roleId, roleName, sid, serverId, funcs, rewardParamArr) + + dailyItemData.receiveRewardCount = 1; + return resResult(STATUS.SUCCESS, Object.assign(result, { + param: { activityId, dayIndex, cellIndex, type }, + item: dailyItemData, + })); + } + +} diff --git a/game-server/app/servers/activity/handler/dailyGiftsHandler.ts b/game-server/app/servers/activity/handler/dailyGiftsHandler.ts new file mode 100644 index 000000000..5308a52df --- /dev/null +++ b/game-server/app/servers/activity/handler/dailyGiftsHandler.ts @@ -0,0 +1,92 @@ +import { Application, BackendSession } from 'pinus'; +import { resResult } from '../../../pubUtils/util'; +import { STATUS, ACTIVITY_RESOURCES_TYPE } from '../../../consts'; +import { handleCost } from '../../../services/rewardService'; +import { getPlayerDailyGiftsData } from '../../../services/dailyGiftsService'; +import { DailyGiftItem } from '../../../domain/activityField/dailyGiftsField'; +import { ActivityDailyGiftsModel } from '../../../db/ActivityDailyGifts'; +import { addReward, stringToRewardParam } from '../../../services/giftPackageService'; +import { RewardParam } from '../../../domain/activityField/rewardField'; + + +export default function (app: Application) { + return new DailyGiftsHandler(app); +} + +export class DailyGiftsHandler { + constructor(private app: Application) { + } + + + /************************每日特惠礼包****************************/ + + /** + * @description 获取每日特惠礼包活动数据 + * @param {{ activityId: number}} msg + * @param {BackendSession} session + * @memberof DailyGiftsHandler + */ + async getDailyGiftsActivity(msg: { activityId: number }, session: BackendSession) { + const { activityId } = msg; + const roleId = session.get('roleId'); + const serverId = session.get('serverId'); + + let playerData = await getPlayerDailyGiftsData(activityId, serverId, roleId) + + if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); + + return resResult(STATUS.SUCCESS, playerData); + } + + /** + * @description 购买每日特惠礼包 + * @param {{ activityId: number, dayIndex: number, cellIndex: number}} msg + * @param {BackendSession} session + * @memberof DailyGiftsHandler + */ + async buyDailyGiftsCell(msg: { activityId: number, dayIndex: number, cellIndex: number }, session: BackendSession) { + const { activityId, dayIndex, cellIndex } = msg; + const roleId = session.get('roleId'); + const serverId = session.get('serverId'); + const sid = session.get('sid'); + const roleName = session.get('roleName'); + const funcs = session.get('funcs'); + + let playerData = await getPlayerDailyGiftsData(activityId, serverId, roleId) + if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); + + let dailyItemData: DailyGiftItem = playerData.findDailyGiftsItem(dayIndex, cellIndex); + if (!dailyItemData) { + return resResult(STATUS.ACTIVITY_DATA_ERROR); + } + if (!dailyItemData.canBuy()) {//最大次数 + return resResult(STATUS.ACTIVITY_MAX_COUNT); + } + if (dayIndex > playerData.today()) {//还未开启 + return resResult(STATUS.ACTIVITY_UNOPENED); + } + + //货币是否足够 + let consumeData = dailyItemData.consumeRes(); + let consumeType = consumeData.type;//购买类型 + + if (consumeType == ACTIVITY_RESOURCES_TYPE.GOODS) {//物品表,元宝、金币、体力 + let result = await handleCost(roleId, sid, [{ id: consumeData.id, count: consumeData.count }]); + if (!result) return resResult(STATUS.ACTIVITY_RES_NOT_ENOUGH); + } else if (consumeType == ACTIVITY_RESOURCES_TYPE.RMB) {//RMB购买 + return resResult(STATUS.ACTIVITY_NEED_PAY); + } + + await ActivityDailyGiftsModel.buyRecord(serverId, activityId, roleId, dayIndex, cellIndex, 1); + + let rewardParamArr: Array = stringToRewardParam(dailyItemData.reward); + let result = await addReward(roleId, roleName, sid, serverId, funcs, rewardParamArr) + + dailyItemData.buyCount += 1; + return resResult(STATUS.SUCCESS, Object.assign(result, { + param: { activityId, dayIndex, cellIndex }, + item: dailyItemData, + })); + } + +} diff --git a/game-server/app/servers/activity/handler/growthHandler.ts b/game-server/app/servers/activity/handler/growthHandler.ts new file mode 100644 index 000000000..aaafd304e --- /dev/null +++ b/game-server/app/servers/activity/handler/growthHandler.ts @@ -0,0 +1,119 @@ +import { Application, BackendSession } from 'pinus'; +import { resResult } from '../../../pubUtils/util'; +import { STATUS } from '../../../consts'; +import { getPlayerGrowthData } from '../../../services/growthService'; +import { GrowthItem, PointRewardItem } from '../../../domain/activityField/growthField'; +import { ActivityGrowthModel } from '../../../db/ActivityGrowth'; +import { addReward, stringToRewardParam } from '../../../services/giftPackageService'; +import { RewardParam } from '../../../domain/activityField/rewardField'; +import { ActivityGrowthPointModel } from '../../../db/ActivityGrowthPoint'; + + +export default function (app: Application) { + return new GrowthHandler(app); +} + +export class GrowthHandler { + constructor(private app: Application) { + } + + /************************成长任务****************************/ + + /** + * @description 获取成长任务活动数据 + * @param {{ activityId: number}} msg + * @param {BackendSession} session + * @memberof GrowthHandler + */ + async getGrowthActivity(msg: { activityId: number }, session: BackendSession) { + const { activityId } = msg; + const roleId = session.get('roleId'); + const serverId = session.get('serverId'); + + let playerData = await getPlayerGrowthData(activityId, serverId, roleId) + + if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); + + return resResult(STATUS.SUCCESS, playerData); + } + + /** + * @description 获取成长任务每天完成的单个奖励 + * @param {{ activityId: number, dayIndex: number, cellIndex: number, type: number}} msg + * @param {BackendSession} session + * @memberof GrowthHandler + */ + async getGrowthCellReward(msg: { activityId: number, dayIndex: number, cellIndex: number, type: number }, session: BackendSession) { + const { activityId, dayIndex, cellIndex, type } = msg; + const roleId = session.get('roleId'); + const serverId = session.get('serverId'); + const sid = session.get('sid'); + const roleName = session.get('roleName'); + const funcs: number[] = session.get('funcs'); + + let playerData = await getPlayerGrowthData(activityId, serverId, roleId) + if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); + + let growthItemData: GrowthItem = playerData.findGrowthItem(dayIndex, cellIndex, type); + if (!growthItemData) { + return resResult(STATUS.ACTIVITY_DATA_ERROR); + } + if (!growthItemData.isComplete()) {//未完成任务 + return resResult(STATUS.ACTIVITY_TASK_UNCOMPLETED); + } + if (!growthItemData.canReceive()) {//已经领取过 + return resResult(STATUS.ACTIVITY_REWARDED); + } + + await ActivityGrowthModel.addCellRecord(serverId, activityId, roleId, dayIndex, cellIndex, type, 1); + let rewardParamArr: Array = stringToRewardParam(growthItemData.reward); + let result = await addReward(roleId, roleName, sid, serverId, funcs, rewardParamArr) + + growthItemData.receiveRewardCount = 1; + return resResult(STATUS.SUCCESS, Object.assign(result, { + param: { activityId, dayIndex, cellIndex, type }, + item: growthItemData, + })); + } + + /** + * @description 成长任务每天奖章兑换奖励 + * @param {{ activityId: number, id: number}} msg + * @param {BackendSession} session + * @memberof GrowthHandler + */ + async getGrowthDayReward(msg: { activityId: number, id: number }, session: BackendSession) { + const { activityId, id } = msg; + const roleId = session.get('roleId'); + const serverId = session.get('serverId'); + const sid = session.get('sid'); + const roleName = session.get('roleName'); + const funcs = session.get('funcs'); + + let playerData = await getPlayerGrowthData(activityId, serverId, roleId) + if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); + + let pointItemData: PointRewardItem = playerData.findPointItem(id); + if (!pointItemData) { + return resResult(STATUS.ACTIVITY_DATA_ERROR); + } + if (playerData.getTotalPoint() < pointItemData.progress) { + return resResult(STATUS.ACTIVITY_NO_POINT); + } + if (pointItemData.getPointReward) {//已经领取过 + return resResult(STATUS.ACTIVITY_REWARDED); + } + + await ActivityGrowthPointModel.addRecord(serverId, activityId, roleId, id); + + let rewardParamArr: Array = stringToRewardParam(pointItemData.reward); + let result = await addReward(roleId, roleName, sid, serverId, funcs, rewardParamArr) + + + pointItemData.getPointReward = true; + return resResult(STATUS.SUCCESS, Object.assign(result, { + param: { activityId, id }, + item: pointItemData, + })); + } +} diff --git a/game-server/app/servers/activity/handler/sevenDaysHandler.ts b/game-server/app/servers/activity/handler/sevenDaysHandler.ts index c3e039fae..695c086dd 100644 --- a/game-server/app/servers/activity/handler/sevenDaysHandler.ts +++ b/game-server/app/servers/activity/handler/sevenDaysHandler.ts @@ -1,19 +1,15 @@ import { Application, BackendSession } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { STATUS, ACTIVITY_RESOURCES_TYPE } from '../../../consts'; -import { getPlayerGrowthData } from '../../../services/growthService'; -import { getPlayerDailyChallengesData } from '../../../services/dailyChallengesService'; -import { GrowthItem, PointRewardItem } from '../../../domain/activityField/growthField'; -import { addItems, createHeroes, handleCost } from '../../../services/rewardService'; +import { handleCost } from '../../../services/rewardService'; import { ActivityGrowthModel } from '../../../db/ActivityGrowth'; -import { DailyItem } from '../../../domain/activityField/dailyChallengesField'; -import { getPlayerDailyGiftsData } from '../../../services/dailyGiftsService'; -import { DailyGiftItem } from '../../../domain/activityField/dailyGiftsField'; import { ActivityDailyGiftsModel } from '../../../db/ActivityDailyGifts'; import { addReward, stringToRewardParam } from '../../../services/giftPackageService'; import { RewardParam } from '../../../domain/activityField/rewardField'; import { ActivityDailyChallengesModel } from '../../../db/ActivityDailyChallenges'; import { ActivityGrowthPointModel } from '../../../db/ActivityGrowthPoint'; +import { getPlayerSevenDaysData, getPlayerSevenDaysGrowthData, getPlayerSevenDaysDailyChallengesData, getPlayerSevenDaysDailyGiftsData } from '../../../services/sevenDaysService'; +import { SevenDaysGrowthItem, SevenDaysPointRewardItem, SevenDaysDailyItem, SevenDaysDailyGiftItem } from '../../../domain/activityField/sevenDaysField'; export default function (app: Application) { @@ -24,26 +20,27 @@ export class SevenDaysHandler { constructor(private app: Application) { } - /************************成长任务****************************/ - /**第一个七天乐(人物注册时间-人物注册时间第7天结束),开启第二个七天乐(人物注册时间第8天-人物注册时间第14天结束);之后会有七天乐 - * @description 获取七天乐活动数据 - * @param {{ activityId: number}} msg - * @param {BackendSession} session - * @memberof SevenDaysHandler - */ - async getSevenDaysGrowthActivity(msg: { activityId: number }, session: BackendSession) { + /** + * @description 获取七天乐活动总的数据 + * @param {{ activityId: number}} msg + * @param {BackendSession} session + * @memberof SevenDaysHandler + */ + async getSevenDaysActivity(msg: { activityId: number }, session: BackendSession) { const { activityId } = msg; const roleId = session.get('roleId'); const serverId = session.get('serverId'); - let playerData = await getPlayerGrowthData(activityId, serverId, roleId) + let playerData = await getPlayerSevenDaysData(activityId, serverId, roleId) if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); return resResult(STATUS.SUCCESS, playerData); } + /************************成长任务****************************/ + /** * @description 获取成长任务每天完成的单个奖励 * @param {{ activityId: number, dayIndex: number, cellIndex: number, type: number}} msg @@ -58,10 +55,10 @@ export class SevenDaysHandler { const roleName = session.get('roleName'); const funcs: number[] = session.get('funcs'); - let playerData = await getPlayerGrowthData(activityId, serverId, roleId) + let playerData = await getPlayerSevenDaysGrowthData(activityId, serverId, roleId) if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); - let growthItemData: GrowthItem = playerData.findGrowthItem(dayIndex, cellIndex, type); + let growthItemData: SevenDaysGrowthItem = playerData.growth.findGrowthItem(dayIndex, cellIndex, type); if (!growthItemData) { return resResult(STATUS.ACTIVITY_DATA_ERROR); } @@ -97,14 +94,14 @@ export class SevenDaysHandler { const roleName = session.get('roleName'); const funcs = session.get('funcs'); - let playerData = await getPlayerGrowthData(activityId, serverId, roleId) + let playerData = await getPlayerSevenDaysGrowthData(activityId, serverId, roleId) if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); - let pointItemData: PointRewardItem = playerData.findPointItem(id); + let pointItemData: SevenDaysPointRewardItem = playerData.growth.findPointItem(id); if (!pointItemData) { return resResult(STATUS.ACTIVITY_DATA_ERROR); } - if (playerData.getTotalPoint() < pointItemData.progress) { + if (playerData.growth.getTotalPoint() < pointItemData.progress) { return resResult(STATUS.ACTIVITY_NO_POINT); } if (pointItemData.getPointReward) {//已经领取过 @@ -126,24 +123,6 @@ export class SevenDaysHandler { /************************今日挑战****************************/ - /** - * @description 获取今日挑战活动数据 - * @param {{ activityId: number}} msg - * @param {BackendSession} session - * @memberof SevenDaysHandler - */ - async getSevenDayDailyChallengesActivity(msg: { activityId: number }, session: BackendSession) { - const { activityId } = msg; - const roleId = session.get('roleId'); - const serverId = session.get('serverId'); - - let playerData = await getPlayerDailyChallengesData(activityId, serverId, roleId) - - if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); - - return resResult(STATUS.SUCCESS, playerData); - } - /** * @description 获取今日挑战的单个奖励 * @param {{ activityId: number, dayIndex: number, cellIndex: number, type: number}} msg @@ -158,10 +137,10 @@ export class SevenDaysHandler { const roleName = session.get('roleName'); const funcs = session.get('funcs'); - let playerData = await getPlayerDailyChallengesData(activityId, serverId, roleId) + let playerData = await getPlayerSevenDaysDailyChallengesData(activityId, serverId, roleId) if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); - let dailyItemData: DailyItem = playerData.findDailyChallengesItem(dayIndex, cellIndex, type); + let dailyItemData: SevenDaysDailyItem = playerData.dailyChallenge.findDailyChallengesItem(dayIndex, cellIndex, type); if (!dailyItemData) { return resResult(STATUS.ACTIVITY_DATA_ERROR); } @@ -187,24 +166,6 @@ export class SevenDaysHandler { /************************每日特惠礼包****************************/ - /** - * @description 获取每日特惠礼包活动数据 - * @param {{ activityId: number}} msg - * @param {BackendSession} session - * @memberof SevenDaysHandler - */ - async getSevenDayDailyGiftsActivity(msg: { activityId: number }, session: BackendSession) { - const { activityId } = msg; - const roleId = session.get('roleId'); - const serverId = session.get('serverId'); - - let playerData = await getPlayerDailyGiftsData(activityId, serverId, roleId) - - if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); - - return resResult(STATUS.SUCCESS, playerData); - } - /** * @description 购买每日特惠礼包 * @param {{ activityId: number, dayIndex: number, cellIndex: number}} msg @@ -219,10 +180,10 @@ export class SevenDaysHandler { const roleName = session.get('roleName'); const funcs = session.get('funcs'); - let playerData = await getPlayerDailyGiftsData(activityId, serverId, roleId) + let playerData = await getPlayerSevenDaysDailyGiftsData(activityId, serverId, roleId) if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); - let dailyItemData: DailyGiftItem = playerData.findDailyGiftsItem(dayIndex, cellIndex); + let dailyItemData: SevenDaysDailyGiftItem = playerData.dailyGift.findDailyGiftsItem(dayIndex, cellIndex); if (!dailyItemData) { return resResult(STATUS.ACTIVITY_DATA_ERROR); } diff --git a/game-server/app/services/dailyGiftsService.ts b/game-server/app/services/dailyGiftsService.ts index 066b89e08..19bc681d1 100644 --- a/game-server/app/services/dailyGiftsService.ts +++ b/game-server/app/services/dailyGiftsService.ts @@ -2,7 +2,7 @@ import { ACTIVITY_TYPE } from '../consts'; import { ActivityModel, ActivityModelType } from '../db/Activity'; import { ActivityDailyGiftsModel, ActivityDailyGiftsModelType } from '../db/ActivityDailyGifts'; import { ServerlistModel } from '../db/Serverlist'; -import { DailyGiftsData, DailyGiftItem } from '../domain/activityField/dailyGiftsField'; +import { DailyGiftsData } from '../domain/activityField/dailyGiftsField'; diff --git a/game-server/app/services/sevenDaysService.ts b/game-server/app/services/sevenDaysService.ts new file mode 100644 index 000000000..de14c061f --- /dev/null +++ b/game-server/app/services/sevenDaysService.ts @@ -0,0 +1,128 @@ +import { ACTIVITY_TYPE } from '../consts'; +import { ActivityModel, ActivityModelType } from '../db/Activity'; +import { ActivityGrowthModel, ActivityGrowthModelType } from '../db/ActivityGrowth'; +import { ActivityGrowthPointModel, ActivityGrowthPointModelType } from '../db/ActivityGrowthPoint'; +import { HeroModel } from '../db/Hero'; +import { ServerlistModel } from '../db/Serverlist'; +import { SevenDaysData } from '../domain/activityField/sevenDaysField'; +import { ActivityDailyChallengesModel, ActivityDailyChallengesModelType } from '../db/ActivityDailyChallenges'; +import { ActivityDailyGiftsModel, ActivityDailyGiftsModelType } from '../db/ActivityDailyGifts'; + +/** + * 获取活动数据 + * + * @param {number} serverId 区Id + * @param {number} activityId 活动Id + * @param {string} roleId 角色Id + * + */ +export async function sevenDaysActivity(serverId: number, roleId: string, type: number) { + let { activityGroupId } = await ServerlistModel.findByServerId(serverId); + let activityDataArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, type, new Date()); + if (activityDataArray.length === 0) { + return null; + } + let activityData: ActivityModelType = activityDataArray[0]; + + let playerData = new SevenDaysData(activityData) + //成长数据 + let playerGrowthRecords: ActivityGrowthModelType[] = await ActivityGrowthModel.findData(serverId, activityData.activityId, roleId); + let playerPointRecord: ActivityGrowthPointModelType = await ActivityGrowthPointModel.findData(serverId, activityData.activityId, roleId); + let userHeroes = await HeroModel.findByRole(roleId); + await playerData.growth.setPlayerRecords(playerGrowthRecords, roleId, userHeroes); + playerData.growth.setPlayerPointRecord(playerPointRecord); + //今日挑战 + let playerDailyChallengeRecords: ActivityDailyChallengesModelType[] = await ActivityDailyChallengesModel.findData(serverId, activityData.activityId, roleId); + playerData.dailyChallenge.setPlayerRecords(playerDailyChallengeRecords); + //每日特惠礼包 + let playerRecords: ActivityDailyGiftsModelType[] = await ActivityDailyGiftsModel.findData(serverId, activityData.activityId, roleId); + playerData.dailyGift.setPlayerRecords(playerRecords); + + return playerData; +} + +/** + * 玩家活动数据 + * + * @param {number} serverId 区Id + * @param {number} activityId 活动Id + * @param {string} roleId 角色Id + * + */ +export async function getPlayerSevenDaysData(activityId: number, serverId: number, roleId: string) { + let activityData: ActivityModelType = await ActivityModel.findActivity(activityId); + + let playerData = new SevenDaysData(activityData) + //成长数据 + let playerGrowthRecords: ActivityGrowthModelType[] = await ActivityGrowthModel.findData(serverId, activityId, roleId); + let playerPointRecord: ActivityGrowthPointModelType = await ActivityGrowthPointModel.findData(serverId, activityId, roleId); + let userHeroes = await HeroModel.findByRole(roleId); + await playerData.growth.setPlayerRecords(playerGrowthRecords, roleId, userHeroes); + playerData.growth.setPlayerPointRecord(playerPointRecord); + //今日挑战 + let playerDailyChallengeRecords: ActivityDailyChallengesModelType[] = await ActivityDailyChallengesModel.findData(serverId, activityId, roleId); + playerData.dailyChallenge.setPlayerRecords(playerDailyChallengeRecords); + //每日特惠礼包 + let playerRecords: ActivityDailyGiftsModelType[] = await ActivityDailyGiftsModel.findData(serverId, activityId, roleId); + playerData.dailyGift.setPlayerRecords(playerRecords); + return playerData; +} + + +/** + * 玩家成长数据 + * + * @param {number} serverId 区Id + * @param {number} activityId 活动Id + * @param {string} roleId 角色Id + * + */ +export async function getPlayerSevenDaysGrowthData(activityId: number, serverId: number, roleId: string) { + let activityData: ActivityModelType = await ActivityModel.findActivity(activityId); + + let playerData = new SevenDaysData(activityData) + //成长数据 + let playerGrowthRecords: ActivityGrowthModelType[] = await ActivityGrowthModel.findData(serverId, activityId, roleId); + let playerPointRecord: ActivityGrowthPointModelType = await ActivityGrowthPointModel.findData(serverId, activityId, roleId); + let userHeroes = await HeroModel.findByRole(roleId); + await playerData.growth.setPlayerRecords(playerGrowthRecords, roleId, userHeroes); + playerData.growth.setPlayerPointRecord(playerPointRecord); + return playerData; +} + + +/** + * 玩家今日挑战数据 + * + * @param {number} serverId 区Id + * @param {number} activityId 活动Id + * @param {string} roleId 角色Id + * + */ +export async function getPlayerSevenDaysDailyChallengesData(activityId: number, serverId: number, roleId: string) { + let activityData: ActivityModelType = await ActivityModel.findActivity(activityId); + + let playerData = new SevenDaysData(activityData) + //今日挑战 + let playerDailyChallengeRecords: ActivityDailyChallengesModelType[] = await ActivityDailyChallengesModel.findData(serverId, activityId, roleId); + playerData.dailyChallenge.setPlayerRecords(playerDailyChallengeRecords); + return playerData; +} + +/** + * 玩家每日特惠礼包数据 + * + * @param {number} serverId 区Id + * @param {number} activityId 活动Id + * @param {string} roleId 角色Id + * + */ +export async function getPlayerSevenDaysDailyGiftsData(activityId: number, serverId: number, roleId: string) { + let activityData: ActivityModelType = await ActivityModel.findActivity(activityId); + + let playerData = new SevenDaysData(activityData) + //每日特惠礼包 + let playerRecords: ActivityDailyGiftsModelType[] = await ActivityDailyGiftsModel.findData(serverId, activityId, roleId); + playerData.dailyGift.setPlayerRecords(playerRecords); + return playerData; +} \ No newline at end of file diff --git a/game-server/app/services/signInService.ts b/game-server/app/services/signInService.ts index 15707d831..eff0a90ca 100644 --- a/game-server/app/services/signInService.ts +++ b/game-server/app/services/signInService.ts @@ -120,10 +120,10 @@ export async function getPlayerSignInData(activityId: number, serverId: number, let curDate = moment(createTime * 1000); if (curDate.hour() < REFRESH_TIME) { betinTime = moment(createTime * 1000).startOf('d').add(-1, 'd').add(REFRESH_TIME, 'h').toDate(); - endTime = moment(betinTime).add(NEW_PLAYER_SIGIN_DAYS - 1, 'd').endOf('d').toDate() + endTime = moment(betinTime).add(NEW_PLAYER_SIGIN_DAYS, 'd').toDate() } else { betinTime = moment(createTime * 1000).startOf('d').add(REFRESH_TIME, 'h').toDate(); - endTime = moment(betinTime).add(NEW_PLAYER_SIGIN_DAYS - 1, 'd').endOf('d').toDate() + endTime = moment(betinTime).add(NEW_PLAYER_SIGIN_DAYS, 'd').toDate() } playerData.setNewPlayerDate(betinTime, endTime) } diff --git a/shared/consts/constModules/activityConst.ts b/shared/consts/constModules/activityConst.ts index d4802e048..036fc5bed 100644 --- a/shared/consts/constModules/activityConst.ts +++ b/shared/consts/constModules/activityConst.ts @@ -5,7 +5,6 @@ */ export enum ACTIVITY_TYPE { - SEVEN_DAY = 0, // 七天乐活动(虚) DAILY_DISCOUNT_GIFT = 1, // 七天乐活动,每日特惠礼包 TASK_GROWTH = 2, // 成长任务活动 TASK_DAILY_CHALLENGES = 3, // 今日挑战活动 @@ -32,10 +31,9 @@ export enum ACTIVITY_TYPE { POP_UP_SHOP = 24, // 弹出商店 NEW_PLAYER_SIGN_IN = 25, // 新手签到活动 VIP_RECHARGE_MONEY = 26, // vip累计充值RMB活动 - // FOURTEEN_DAY = 25, // 14天乐活动(虚) - // FOURTEEN_DAILY_DISCOUNT_GIFT = 26, // 14天乐活动,每日特惠礼包 - // FOURTEEN_TASK_GROWTH = 27, // 14天乐成长任务活动 - // FOURTEEN_TASK_DAILY_CHALLENGES = 28, // 14天乐今日挑战活动 + SEVEN_DAY = 27, // 七天乐活动(每日特惠礼包,成长任务活动,今日挑战活动) + FOURTEEN_DAY = 28, // 十四天乐活动 + COMMON_SEVEN_DAY = 29, // 通用七天乐活动 } /** diff --git a/shared/domain/activityField/sevenDaysField.ts b/shared/domain/activityField/sevenDaysField.ts new file mode 100644 index 000000000..3ecc3f09b --- /dev/null +++ b/shared/domain/activityField/sevenDaysField.ts @@ -0,0 +1,328 @@ +import { ActivityModelType } from '../../db/Activity'; +import { ActivityBase } from './activityField'; +import { TASK_TYPE } from '../../consts'; +import { ActivityGrowthModelType } from '../../db/ActivityGrowth'; +import { ActivityGrowthPointModelType } from '../../db/ActivityGrowthPoint'; +import { HeroType } from '../../db/Hero'; +import { RoleModel } from '../../db/Role'; +import { splitString } from '../../pubUtils/util'; +import { ActivityDailyGiftsModelType } from '../../db/ActivityDailyGifts'; +import { parseResStr } from '../../pubUtils/util'; +import { ConsumeResParam } from '../activityField/consumeField'; +import { ActivityDailyChallengesModelType } from '../../db/ActivityDailyChallenges'; + +// 今日挑战的每日配置数据 +export class SevenDaysDailyItem { + dayIndex: number; // 第几天,从1开始 + cellIndex: number; // 当天第几行,从1开始 + name: string; // 任务名称 + taskType: number; // 任务类型 dic_zyz_taskType.json + taskParam: string; //任务数据 dic_zyz_taskType.json + condition: number; //任务数据条件 dic_zyz_taskType.jsonT + reward: string; // 任务奖励,格式:1&3&1(类型&id&数量) 类型定义:1.英雄,2.物品 + + totalCount: number = 0; //完成任务累计次数 + receiveRewardCount: number = 0; //领取奖励次数 + + constructor(data: any) { + this.dayIndex = data.dayIndex; + this.cellIndex = data.cellIndex; + this.name = data.name; + this.taskType = data.taskType; + this.taskParam = data.taskParam; + this.condition = data.condition; + this.reward = data.reward; + this.totalCount = 0; + this.receiveRewardCount = 0; + } + + public canReceive(): boolean { + return this.receiveRewardCount == 0; + } + + public isComplete(): boolean { + let complete = this.totalCount >= this.condition; + return complete; + } +} + + +// 今日挑战活动数据 +export class SevenDaysDailyChallengesData { + list: Array = []; + + public findDailyChallengesItem(dayIndex: number, cellIndex: number, type: number) { + let index = this.list.findIndex(obj => { return obj && obj.dayIndex == dayIndex && obj.cellIndex == cellIndex && obj.taskType == type }) + return (index != -1) ? this.list[index] : null; + } + + public findTaskByType(type: TASK_TYPE, dayIndex: number) { + return this.list.filter(obj => { + return obj && obj.taskType == type && obj.dayIndex == dayIndex; + }) + } + + //解析玩家领取记录 + public setPlayerRecords(data: ActivityDailyChallengesModelType[]) { + for (let obj of this.list) { + let index = data.findIndex(record => { return obj.dayIndex == record.dayIndex && obj.cellIndex == record.cellIndex }) + if (index != -1) { + obj.totalCount = data[index].totalCount ? data[index].totalCount : 0; + obj.receiveRewardCount = data[index].receiveRewardCount ? data[index].receiveRewardCount : 0; + } + } + } + + public initData(data: any) { + for (let obj of data) { + this.list.push(new SevenDaysDailyItem(obj)) + } + } + + constructor(activityData: any) { + this.initData(activityData) + } +} + +/****************************************************************/ +// 每日礼包配置数据 +export class SevenDaysDailyGiftItem { + dayIndex: number; // 第几天,从1开始 + cellIndex: number; // 当天第几行,从1开始 + name: string; // 名称 + consume: string; // 购买的资源数据; 格式:type:id:count, type:ACTIVITY_RESOURCES_TYPE;RMB时id无效 + reward: string; // 任务奖励,格式:1&3&1(类型&id&数量) 类型定义:1.英雄,2.物品 + maxCount: number = 1; //最大可购买次数 + discount: number = 0;// 商品显示的折扣 + + buyCount: number = 0; //购买次数 + + constructor(data: any) { + this.dayIndex = data.dayIndex; + this.cellIndex = data.cellIndex; + this.name = data.name; + this.consume = data.consume; + this.reward = data.reward; + this.maxCount = data.maxCount; + this.discount = data.discount; + this.buyCount = 0; + } + + //消耗的资源 + public consumeRes(): ConsumeResParam { + let consumeArray = parseResStr(this.consume); + return consumeArray[0]; + } + + public canBuy(): boolean { + return this.buyCount < this.maxCount; + } + +} + + +// 今日挑战活动数据 +export class SevenDaysDailyGiftsData { + list: Array = []; + + public findDailyGiftsItem(dayIndex: number, cellIndex: number) { + let index = this.list.findIndex(obj => { return obj && obj.dayIndex == dayIndex && obj.cellIndex == cellIndex }) + return (index != -1) ? this.list[index] : null; + } + + //解析玩家购买记录 + public setPlayerRecords(data: ActivityDailyGiftsModelType[]) { + for (let obj of this.list) { + let index = data.findIndex(record => { return obj.dayIndex == record.dayIndex && obj.cellIndex == record.cellIndex }) + if (index != -1) { + obj.buyCount = data[index].buyCount ? data[index].buyCount : 0; + } else { + obj.buyCount = 0; + } + } + } + + public initData(dataObj: any) { + + let arr = dataObj; + + for (let obj of arr) { + this.list.push(new SevenDaysDailyGiftItem(obj)) + } + } + + constructor(activityData: any) { + this.initData(activityData) + } +} + +/****************************************************************/ + +// 积分兑换奖励数据 +export class SevenDaysPointRewardItem { + id: number; // 第几天,从1开始 + reward: string; // 任务奖励,格式:1&3&1(类型&id&数量) 类型定义:1.英雄,2.物品 + progress: number; // 需要的奖章数量 + quality: string; // + star: number; // + + getPointReward: boolean = false; // 是否兑换领取奖章奖励 + + constructor(data: any) { + this.id = data.id; + this.reward = data.reward; + this.progress = data.progress; + this.quality = data.quality; + this.star = data.star; + this.getPointReward = false; + } +} + +// 每日配置数据 +export class SevenDaysGrowthItem { + id: number; + dayIndex: number; // 第几天,从1开始 + cellIndex: number; // 当天第几行,从1开始 + name: string; // 任务名称 + taskType: number; // 任务类型 dic_zyz_taskType.json + taskParam: string; //任务数据 dic_zyz_taskType.jsonT + condition: number; //任务数据条件 dic_zyz_taskType.jsonT + point: number; // 任务达成获得的奖章数量,只在当前活动中有用,虚拟 + reward: string; // 任务奖励,格式:1&3&1(类型&id&数量) 类型定义:1.英雄,2.物品 + taskParamArray: number[]; + + totalCount: number = 0; //完成任务累计次数 + receiveRewardCount: number = 0; //领取奖励次数 + + constructor(data: any) { + this.dayIndex = data.dayIndex; + this.cellIndex = data.cellIndex; + this.name = data.name; + this.taskType = data.taskType; + this.taskParam = data.taskParam; + this.condition = data.condition; + this.point = data.point; + this.reward = data.reward; + this.totalCount = 0; + this.receiveRewardCount = 0; + this.taskParamArray = splitString(data.taskParam, '&') + + } + + public canReceive(): boolean { + return this.receiveRewardCount == 0; + } + + public isComplete(): boolean { + let complete = this.totalCount >= this.condition; + return complete; + } +} + + +// 成长活动数据 +export class SevenDaysGrowthData extends ActivityBase { + list: Array = []; + pointRewardList: Array = []; + + public getTotalPoint() { + let total = 0; + for (let obj of this.list) { + if (obj.receiveRewardCount) { + total += obj.point; + } + } + return total; + } + + //第几天的奖章兑换 + public findPointItem(id: number) { + let index = this.pointRewardList.findIndex(obj => { return obj && obj.id === id }) + return (index != -1) ? this.pointRewardList[index] : null; + } + + public findGrowthItem(dayIndex: number, cellIndex: number, type: number) { + let index = this.list.findIndex(obj => { return obj && obj.dayIndex == dayIndex && obj.cellIndex == cellIndex && obj.taskType == type }) + return (index != -1) ? this.list[index] : null; + } + + public findTaskByType(type: TASK_TYPE) { + return this.list.filter(obj => { + return obj && obj.taskType == type; + }) + } + + //解析玩家积分兑换记录 + public setPlayerPointRecord(data: ActivityGrowthPointModelType) { + if (!data) { + return; + } + for (let obj of this.pointRewardList) { + let index = data.ids.findIndex(id => { return id === obj.id }) + if (index != -1) { + obj.getPointReward = true; + } + } + } + + //解析玩家领取记录 + public async setPlayerRecords(data: ActivityGrowthModelType[], roleId: string, userHeroes: HeroType[]) { + let { heroNum, towerLv } = await RoleModel.findByRoleId(roleId); + for (let obj of this.list) { + let index = data.findIndex(record => { return obj.dayIndex == record.dayIndex && obj.cellIndex == record.cellIndex }) + if (index != -1) { + obj.totalCount = data[index].totalCount ? data[index].totalCount : 0; + obj.receiveRewardCount = data[index].receiveRewardCount ? data[index].receiveRewardCount : 0; + } + if (obj.taskType === TASK_TYPE.HERO_NUM) { + obj.totalCount = heroNum; + } else if (obj.taskType === TASK_TYPE.HERO_LV) { + let lv = obj.taskParamArray[1]; + let heroes = userHeroes.filter(hero => { return hero.lv >= lv }) + obj.totalCount = heroes.length; + } else if (obj.taskType === TASK_TYPE.BATTLE_TOWER_LV) { + obj.totalCount = towerLv; + } + } + } + + public initData(data: string) { + let objData = JSON.parse(data); + + let arr = objData.data; + for (let obj of arr) { + this.list.push(new SevenDaysGrowthItem(obj)) + } + let pointRewardArray = objData.pointReward; + for (let obj of pointRewardArray) { + this.pointRewardList.push(new SevenDaysPointRewardItem(obj)) + } + } + + constructor(activityData: ActivityModelType) { + super(activityData) + this.initData(activityData.data) + } +} + +/****************************************************************/ +// 七天乐活动数据 +export class SevenDaysData extends ActivityBase { + growth: SevenDaysGrowthData = null; + dailyGift: SevenDaysDailyGiftsData = null; + dailyChallenge: SevenDaysDailyChallengesData = null; + + public initData(data: string) { + let objData = JSON.parse(data); + + this.growth = new SevenDaysGrowthData(objData.growth) + this.dailyGift = new SevenDaysDailyGiftsData(objData.dailyGift) + this.dailyChallenge = new SevenDaysDailyChallengesData(objData.dailyChallenge) + + } + + constructor(activityData: ActivityModelType) { + super(activityData) + this.initData(activityData.data) + } +} \ No newline at end of file diff --git a/shared/domain/activityField/signInField.ts b/shared/domain/activityField/signInField.ts index a24c02962..ebbf68156 100644 --- a/shared/domain/activityField/signInField.ts +++ b/shared/domain/activityField/signInField.ts @@ -64,7 +64,7 @@ export class SignInData extends ActivityBase { this.endTime = moment(endTime).valueOf(); this.roundIndex = 1; let date = new Date(); - this.todayIndex = Math.ceil((moment(date).valueOf() - this.beginTime) / 24 * 60 * 60 * 1000); + this.todayIndex = Math.ceil((moment(date).valueOf() - this.beginTime) / (24 * 60 * 60 * 1000)); } public initData(data: string) { @@ -83,7 +83,7 @@ export class SignInData extends ActivityBase { if (this.type === ACTIVITY_TYPE.NEW_PLAYER_SIGN_IN) { this.roundIndex = 1; } - this.todayIndex = Math.ceil((moment(date).valueOf() - this.beginTime) / 24 * 60 * 60 * 1000); + this.todayIndex = Math.ceil((moment(date).valueOf() - this.beginTime) / (24 * 60 * 60 * 1000)); let arr = dataObj.data for (let obj of arr) { diff --git a/shared/pubUtils/taskUtil.ts b/shared/pubUtils/taskUtil.ts index 76ff30952..0e0c0622b 100644 --- a/shared/pubUtils/taskUtil.ts +++ b/shared/pubUtils/taskUtil.ts @@ -492,7 +492,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: console.log('accomplishTask', roleId, taskType, count, JSON.stringify(parma)) let pushMessage = []; let { activityGroupId } = await ServerlistModel.findByServerId(serverId); - //七天乐-成长活动统计 + //成长活动统计 let allActivity: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.TASK_GROWTH, new Date()); for (let activity of allActivity) { let growthActivity = new GrowthData(activity);