diff --git a/game-server/app/servers/activity/handler/activityHandler.ts b/game-server/app/servers/activity/handler/activityHandler.ts index 94389d4fa..83ad9a4c6 100644 --- a/game-server/app/servers/activity/handler/activityHandler.ts +++ b/game-server/app/servers/activity/handler/activityHandler.ts @@ -5,7 +5,8 @@ import { firstGiftActivity, getPlayerFirstGiftData } from '../../../services/fir import { RoleModel } from '../../../db/Role'; import { addReward, stringToRewardParam, useGiftPackage } from '../../../services/giftPackageService'; import { ActivityFirstGiftModel } from '../../../db/ActivityFirstGift'; -import { signInActivity } from '../../../services/signInService'; +import { signInActivity, signInVIPActivity } from '../../../services/signInService'; +import { growthFundActivity } from '../../../services/growthFundService'; export default function (app: Application) { return new ActivityHandler(app); @@ -51,6 +52,83 @@ export class ActivityHandler { }); } } + //高级签到 + { + let data = await signInVIPActivity(serverId, roleId); + if (data) { + playerActivityArray.push({ + type: ACTIVITY_TYPE.SIGN_IN, + activityId: data.activityId, + data, + }); + } + } + //成长基金 + { + let data = await growthFundActivity(ACTIVITY_TYPE.GROWTH_FUND_MAIN, serverId, roleId); + if (data) { + playerActivityArray.push({ + type: ACTIVITY_TYPE.GROWTH_FUND_MAIN, + activityId: data.activityId, + data, + }); + } + } + //高阶成长基金 + { + let data = await growthFundActivity(ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP, serverId, roleId); + if (data) { + playerActivityArray.push({ + type: ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP, + activityId: data.activityId, + data, + }); + } + } + //镇念塔成长基金 + { + let data = await growthFundActivity(ACTIVITY_TYPE.GROWTH_FUND_TOWER, serverId, roleId); + if (data) { + playerActivityArray.push({ + type: ACTIVITY_TYPE.GROWTH_FUND_TOWER, + activityId: data.activityId, + data, + }); + } + } + //高阶镇念塔成长基金 + { + let data = await growthFundActivity(ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP, serverId, roleId); + if (data) { + playerActivityArray.push({ + type: ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP, + activityId: data.activityId, + data, + }); + } + } + //精英成长基金 + { + let data = await growthFundActivity(ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE, serverId, roleId); + if (data) { + playerActivityArray.push({ + type: ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE, + activityId: data.activityId, + data, + }); + } + } + //高阶精英成长基金 + { + let data = await growthFundActivity(ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP, serverId, roleId); + if (data) { + playerActivityArray.push({ + type: ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP, + activityId: data.activityId, + data, + }); + } + } return resResult(STATUS.SUCCESS, { playerActivityArray }); } diff --git a/game-server/app/servers/activity/handler/growthFundHandler.ts b/game-server/app/servers/activity/handler/growthFundHandler.ts index 41945022d..777181de3 100644 --- a/game-server/app/servers/activity/handler/growthFundHandler.ts +++ b/game-server/app/servers/activity/handler/growthFundHandler.ts @@ -5,6 +5,8 @@ import { getPlayerGrowthFundData, growthFundActivity } from '../../../services/g import { GrowthFundItem } from '../../../domain/activityField/growthFundField'; import { addItems, createHeroes } from '../../../services/rewardService'; import { ActivityGrowthFundModel } from '../../../db/ActivityGrowthFund'; +import { addReward, stringToRewardParam } from '../../../services/giftPackageService'; +import { RewardParam } from '../../../domain/activityField/rewardField'; export default function (app: Application) { @@ -19,16 +21,16 @@ export class GrowthFundHandler { /** * @description 获取成长基金活动数据 - * @param {{ type: number}} msg + * @param {{ activityId: number}} msg * @param {BackendSession} session * @memberof GrowthFundHandler */ - async getGrowthFundActivity(msg: { type: number }, session: BackendSession) { - const { type } = msg; + async getGrowthFundActivity(msg: { activityId: number }, session: BackendSession) { + const { activityId } = msg; const roleId = session.get('roleId'); const serverId = session.get('serverId'); - let playerData = await growthFundActivity(type, serverId, roleId); + let playerData = await getPlayerGrowthFundData(activityId, serverId, roleId); if (!playerData) return resResult(STATUS.ACTIVITY_GROWTH_FUND_END); @@ -67,18 +69,17 @@ export class GrowthFundHandler { return resResult(STATUS.ACTIVITY_REWARDED); } - await ActivityGrowthFundModel.addRecord(activityId, roleId, pageIndex, cellIndex); - let reward = growthFundItemData.goodReward(); - let goods = await addItems(roleId, roleName, sid, reward); - let heroReward = growthFundItemData.heroReward(); - let addHeros = []; - if (heroReward.length > 0) { - let heroResult = await createHeroes(roleId, roleName, sid, serverId, funcs, heroReward); - goods = goods.concat(heroResult.goods) - addHeros = addHeros.concat(heroResult.heroes); - } + growthFundItemData.isReceive = true; - return resResult(STATUS.SUCCESS, { goods, addHeros }); + await ActivityGrowthFundModel.addRecord(activityId, roleId, pageIndex, cellIndex); + + let rewardParamArr: Array = stringToRewardParam(growthFundItemData.reward); + let result = await addReward(roleId, roleName, sid, serverId, funcs, rewardParamArr) + + return resResult(STATUS.SUCCESS, Object.assign(result, { + param: { activityId, pageIndex, cellIndex }, + item: growthFundItemData + })); } } diff --git a/game-server/app/services/firstGiftService.ts b/game-server/app/services/firstGiftService.ts index eda6056c3..4633560bf 100644 --- a/game-server/app/services/firstGiftService.ts +++ b/game-server/app/services/firstGiftService.ts @@ -20,7 +20,7 @@ export async function firstGiftActivity(serverId: number, roleId: string) { } let activityData = activityArray[0]; let playerRecord: ActivityFirstGiftModelType = await ActivityFirstGiftModel.findData(activityData.activityId, roleId); - if (playerRecord.isOver) { + if (!playerRecord || playerRecord.isOver) { return null; } diff --git a/game-server/app/services/growthFundService.ts b/game-server/app/services/growthFundService.ts index 5dc297a69..1455ecb11 100644 --- a/game-server/app/services/growthFundService.ts +++ b/game-server/app/services/growthFundService.ts @@ -22,16 +22,16 @@ import { GrowthFundData, GrowthFundItem } from '../domain/activityField/growthFu GROWTH_FUND_MAIN_ELITE_VIP = 11, // 精英成长基金(高阶) */ export async function growthFundActivity(type: number, serverId: number, roleId: string) { - let activityArray: ActivityModelType[] = await ActivityModel.findActivityByType(serverId, type, 1) - - for (let i = 0; i < activityArray.length; i++) { - let activityData = activityArray[i]; - let playerData = await getPlayerGrowthFundData(activityData.activityId, serverId, roleId); - if (!playerData.isComplete()) { - return playerData; - } + let activityArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(serverId, type, new Date()) + if (activityArray.length == 0) { + return null; } - return null + let activityData = activityArray[0] + let playerData = await getPlayerGrowthFundData(activityData.activityId, serverId, roleId); + if (playerData.isComplete()) { + return null; + } + return playerData; } /** diff --git a/game-server/app/services/signInService.ts b/game-server/app/services/signInService.ts index 6c45decdf..9e04a18d8 100644 --- a/game-server/app/services/signInService.ts +++ b/game-server/app/services/signInService.ts @@ -20,14 +20,40 @@ export async function signInActivity(serverId: number, roleId: string) { } let activityArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(serverId, ACTIVITY_TYPE.SIGN_IN, new Date()); - if (activityArray.length > 0) { - let activityData = activityArray[0]; - let playerData = new SignInData(activityData); - let playerRecords: ActivitySignInModelType[] = await ActivitySignInModel.findData(activityData.activityId, roleId, playerData.roundIndex); - playerData.setPlayerRecords(playerRecords); - return playerData; + if (activityArray.length == 0) { + return null; } - return null + let activityData = activityArray[0]; + let playerData = new SignInData(activityData); + let playerRecords: ActivitySignInModelType[] = await ActivitySignInModel.findData(activityData.activityId, roleId, playerData.roundIndex); + playerData.setPlayerRecords(playerRecords); + return playerData; +} + +/** + * 获取活动数据 + * + * @param {number} type 普通、高级 ACTIVITY_TYPE + * @param {number} serverId 区Id + * @param {number} activityId 活动Id + * @param {string} roleId 角色Id + * + */ +export async function signInVIPActivity(serverId: number, roleId: string) { + let todayIndex = moment(new Date()).date(); + if (todayIndex < SIGNIN_OPEN || todayIndex > SIGNIN_CLOSE) {//未开启 + return null; + } + + let activityArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(serverId, ACTIVITY_TYPE.SIGN_IN_VIP, new Date()); + if (activityArray.length == 0) { + return null; + } + let activityData = activityArray[0]; + let playerData = new SignInData(activityData); + let playerRecords: ActivitySignInModelType[] = await ActivitySignInModel.findData(activityData.activityId, roleId, playerData.roundIndex); + playerData.setPlayerRecords(playerRecords); + return playerData; } /** diff --git a/shared/db/Activity.ts b/shared/db/Activity.ts index 7f0ca5fef..529a21e42 100644 --- a/shared/db/Activity.ts +++ b/shared/db/Activity.ts @@ -24,7 +24,7 @@ export default class Activity extends BaseModel { //根据活动类型查询开启的活动数据 public static async findOpenActivityByType(serverId: number, type: number, date: Date, lean = true) { - let result: ActivityModelType[] = await ActivityModel.find({ serverId, type, beginTime: { $lte: date }, endTime: { $gte: date } }).lean(lean); + let result: ActivityModelType[] = await ActivityModel.find({ serverId, type, beginTime: { $lte: date }, endTime: { $gte: date } }).sort({ activityId: -1 }).lean(lean); return result; } diff --git a/shared/domain/activityField/growthFundField.ts b/shared/domain/activityField/growthFundField.ts index ff75aad37..db4df0ada 100644 --- a/shared/domain/activityField/growthFundField.ts +++ b/shared/domain/activityField/growthFundField.ts @@ -30,6 +30,8 @@ export class GrowthFundItem { this.taskType = data.taskType; this.taskParam = data.taskParam; this.reward = data.reward; + this.isComplete = false; + this.isReceive = false; this.taskParamArray = splitString(data.taskParam, '&') }