diff --git a/game-server/app/servers/activity/remote/activityRemote.ts b/game-server/app/servers/activity/remote/activityRemote.ts index 6f0e63a98..2499c67f6 100644 --- a/game-server/app/servers/activity/remote/activityRemote.ts +++ b/game-server/app/servers/activity/remote/activityRemote.ts @@ -2,7 +2,7 @@ import { Application, ChannelService, HandlerService, } from 'pinus'; import { ActivityModel, ActivityModelType } from '../../../db/Activity'; import { ServerlistModel } from '../../../db/Serverlist'; import { reloadResources } from '../../../pubUtils/data'; -import { _getActivitiesByType, _getActivityById } from '../../../services/activity/activityService'; +import { _getActivitiesByType, _getActivityById, _getActivities } from '../../../services/activity/activityService'; export default function (app: Application) { new HandlerService(app, {}); @@ -73,4 +73,8 @@ export class ActivityRemote { public getActivitiesByType(serverId: number, type: number) { return _getActivitiesByType(serverId, type); } + + public getActivities() { + return _getActivities(); + } } \ No newline at end of file diff --git a/game-server/app/servers/role/handler/roleHandler.ts b/game-server/app/servers/role/handler/roleHandler.ts index 7fb5fd8d6..fd00e19b2 100644 --- a/game-server/app/servers/role/handler/roleHandler.ts +++ b/game-server/app/servers/role/handler/roleHandler.ts @@ -22,6 +22,7 @@ import { RScriptRecordModel } from '../../../db/RScriptRecord'; import { SkinModel, SkinUpdate } from '../../../db/Skin'; import { CreateHeroes } from '../../../pubUtils/roleUtil'; import { Figure } from '../../../domain/dbGeneral'; +import { getActivities } from '../../../services/activity/activityService'; export default function (app: Application) { new HandlerService(app, {}); @@ -57,6 +58,7 @@ export class RoleHandler { infos.set(heroInfo.hid, { heroInfo, skinInfo }); } await createHero.createWithInitInfo(infos, initInfos.figureInfo); + await createHero.clearTask(await getActivities()); await createHero.pushMessage(pinus, sid); console.log('updateRedisRank before', Date.now()) await createHero.updateRedisRank(Rank); diff --git a/game-server/app/services/activity/activityService.ts b/game-server/app/services/activity/activityService.ts index 5521dcc80..b0e610cce 100644 --- a/game-server/app/services/activity/activityService.ts +++ b/game-server/app/services/activity/activityService.ts @@ -216,6 +216,17 @@ export async function getActivitiesByType(serverId: number, type: number) { } } +export async function getActivities() { + let serverType = pinus.app.getServerType(); + if(serverType == 'activity') { + return _getActivities(); + } else { + let servers = pinus.app.getServersByType('activity'); + let server = getRandSingleEelm(servers); + return await pinus.app.rpc.activity.activityRemote.getActivities.toServer(server.id); + } +} + export function _getActivityById(activityId: number) { return pinus.app.get('activities')?.get(activityId); } @@ -232,3 +243,12 @@ export function _getActivitiesByType(serverId: number, type: number) { } return result; } + +export function _getActivities() { + let activities = pinus.app.get('activities'); + let result: ActivityModelType[] = []; + for(let [_, activity] of activities) { + result.push(activity); + } + return result; +} \ No newline at end of file diff --git a/game-server/app/services/rewardService.ts b/game-server/app/services/rewardService.ts index 2fd505ca7..6a95073e6 100644 --- a/game-server/app/services/rewardService.ts +++ b/game-server/app/services/rewardService.ts @@ -24,6 +24,7 @@ import { calEquipSeids } from '../pubUtils/playerCe'; import { CreateHeroes } from '../pubUtils/roleUtil'; import { SkinUpdate } from '../db/Skin'; import { getInitHeroById } from './roleService'; +import { getActivities } from './activity/activityService'; export class CheckMeterial { private roleId: string; @@ -471,6 +472,7 @@ export async function createHeroes(roleId: string, roleName: string, sid: string if (infos.size > 0) { let createHero = new CreateHeroes(roleId, roleName, serverId); await createHero.createWithHeroInfo(infos); + await createHero.clearTask(await getActivities()) await createHero.pushMessage(pinus, sid); await createHero.updateRedisRank(Rank); resultHeroes = createHero.getResultHeroes(); diff --git a/game-server/app/services/taskService.ts b/game-server/app/services/taskService.ts index b4921697b..e0f445b9e 100644 --- a/game-server/app/services/taskService.ts +++ b/game-server/app/services/taskService.ts @@ -15,6 +15,7 @@ import { UserTaskHistoryModel } from '../db/UserTaskHistory'; import { gameData, getGoodById } from '../pubUtils/data'; import { getSeconds, getZeroPointD } from '../pubUtils/timeUtil'; import { RoleStatus } from '../db/ComBattleTeam'; +import { getActivities } from './activity/activityService'; export async function checkTaskWithRoles(serverId: number, roleId: string, sid: string, taskType: number, roles: RoleType[]) { for (let role of roles) { @@ -74,7 +75,7 @@ export async function pushTaskUpdate(roleId: string, sid: string, pushMessage: T export async function checkActivityTask(serverId: number, sid: string, roleId: string, taskType: TASK_TYPE, count: number, parma?: any) { - let pushMessage = await taskUtil.accomplishTask(serverId, roleId, taskType, count, parma); + let pushMessage = await taskUtil.accomplishTask(serverId, roleId, taskType, count, parma, await getActivities()); pushActivityUpdate(roleId, sid, pushMessage); return pushMessage; } diff --git a/shared/pubUtils/roleUtil.ts b/shared/pubUtils/roleUtil.ts index ac130763d..d77536591 100644 --- a/shared/pubUtils/roleUtil.ts +++ b/shared/pubUtils/roleUtil.ts @@ -15,6 +15,7 @@ import { reduceCe, resResult } from "./util"; import { calculatetopLineup, } from "./playerCe"; import { GuildModel, GuildType } from "../db/Guild"; import { PvpDefenseModel } from "../db/PvpDefense"; +import { ActivityModelType } from "../db/Activity"; // 储存在内存中的初始数据 export function getInitRoleInfo() { @@ -219,7 +220,6 @@ export class CreateHeroes extends UpdateHeroes { this.addRoleUpdateParam({ frames, heads, spines }); // 更新战力 await this.saveCeToDb(); - await this.clearTask(); } // 创建初始账号时候的初始 @@ -233,10 +233,9 @@ export class CreateHeroes extends UpdateHeroes { heroeInfos.push({ ...heroInfo, skins, _id: new HeroModel()._id}); } this.resultHeroes = await HeroModel.insertHeroes(this.roleId, this.roleName, this.serverId, heroeInfos); - await this.clearTask(); } - private async clearTask() { + public async clearTask(activitiesTypeMap: ActivityModelType[]) { // 任务 console.log('****** checkTask before', Date.now()) let m1 = await checkTask(this.roleId, TASK_TYPE.HERO_NUM, this.heroNum, true, {}); @@ -247,8 +246,8 @@ export class CreateHeroes extends UpdateHeroes { console.log('****** checkTask after', Date.now()) //成长任务 console.log('****** accomplishTask before', Date.now()) - let mm1 = await accomplishTask(this.serverId, this.roleId, TASK_TYPE.HERO_NUM, this.heroNum) - let mm2 = await accomplishTask(this.serverId, this.roleId, TASK_TYPE.HERO_QUALITY, this.heroNum, { heroes: this.resultHeroes }) + let mm1 = await accomplishTask(this.serverId, this.roleId, TASK_TYPE.HERO_NUM, this.heroNum, null, activitiesTypeMap) + let mm2 = await accomplishTask(this.serverId, this.roleId, TASK_TYPE.HERO_QUALITY, this.heroNum, { heroes: this.resultHeroes }, activitiesTypeMap) console.log('****** accomplishTask after', Date.now()) this.activityTaskPushMessage.push(...mm1, ...mm2); } diff --git a/shared/pubUtils/taskUtil.ts b/shared/pubUtils/taskUtil.ts index f956e5993..0ab0311d4 100644 --- a/shared/pubUtils/taskUtil.ts +++ b/shared/pubUtils/taskUtil.ts @@ -485,10 +485,27 @@ function checkRecResult(rec: UserTaskRecType, id: number) { * @param {number} parma 参数 * */ -export async function accomplishTask(serverId: number, roleId: string, taskType: TASK_TYPE, count: number, parma?: any) { +export async function accomplishTask(serverId: number, roleId: string, taskType: TASK_TYPE, count: number, parma?: any, activities?: ActivityModelType[]) { // console.log('accomplishTask', roleId, taskType, count, JSON.stringify(parma)) let pushMessage = []; let { activityGroupId } = await ServerlistModel.findByServerId(serverId); + let findActivitiesByTypes = async (types: number[]) => { + if(activities) { + let result: ActivityModelType[] = []; + for(let activity of activities) { + if(activityGroupId.includes(activity.groupId) && types.includes(activity.type)) { + result.push(activity); + } + } + return result; + } else { + if(types.length > 1) { + return ActivityModel.findOpenActivityByTypes(activityGroupId, types, new Date()); + } else { + return ActivityModel.findOpenActivityByType(activityGroupId, types[0], new Date()); + } + } + } let { createTime } = await RoleModel.findByRoleId(roleId); // //成长活动统计 // let allActivity: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.TASK_GROWTH, new Date()); @@ -551,7 +568,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: // } //七天乐 - let allActivity: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.SEVEN_DAY, new Date()); + let allActivity: ActivityModelType[] = await findActivitiesByTypes([ACTIVITY_TYPE.SEVEN_DAY]); for (let activity of allActivity) { let playerData = new SevenDaysData(activity, createTime) //成长活动统计 @@ -609,7 +626,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: } //今日挑战统计 - allActivity = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.TASK_DAILY_CHALLENGES, new Date()); + allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.TASK_DAILY_CHALLENGES]); for (let activity of allActivity) { let growthActivity = new DailyChallengesData(activity, createTime); let taskArray = growthActivity.findTaskByType(taskType, growthActivity.today()); @@ -639,7 +656,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: } //刷新任务统计 - allActivity = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.REFRESH_TASK, new Date()); + allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.REFRESH_TASK]); for (let activity of allActivity) { let taskActivity = new RefreshTaskData(activity, createTime); let taskArray = taskActivity.findTaskByType(taskType); @@ -729,7 +746,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: taskType === TASK_TYPE.EQUIP_SUIT_JEWEL_STAGE || taskType === TASK_TYPE.EQUIP_QUALITY ) { - allActivity = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.THIRTY_DAYS, new Date()); + allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.THIRTY_DAYS]); for (let activity of allActivity) { let thirtyDaysActivity = new ThirtyDaysData(activity, createTime); let playerRecords: ActivityThirtyDaysModelType[] = await ActivityThirtyDaysModel.findData(serverId, activity.activityId, roleId); @@ -762,7 +779,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: //弹出商店 { - allActivity = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.POP_UP_SHOP, new Date()); + allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.POP_UP_SHOP]); for (let activity of allActivity) { let allTaskData: any[] = JSON.parse(activity.data); for (let task of allTaskData) { @@ -834,7 +851,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: } //主线成长基金 if (taskType === TASK_TYPE.BATTLE_MAIN) { - allActivity = await ActivityModel.findOpenActivityByTypes(activityGroupId, [ACTIVITY_TYPE.GROWTH_FUND_MAIN, ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP], new Date()); + allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.GROWTH_FUND_MAIN, ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP]); for (let activity of allActivity) { let growthFundActivity = new GrowthFundData(activity, createTime); let playerRecords: ActivityGrowthFundModelType[] = await ActivityGrowthFundModel.findData(activity.activityId, roleId); @@ -850,7 +867,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: } //镇念塔成长基金getRoleOnlineInfo if (taskType === TASK_TYPE.BATTLE_TOWER_LV) { - allActivity = await ActivityModel.findOpenActivityByTypes(activityGroupId, [ACTIVITY_TYPE.GROWTH_FUND_TOWER, ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP], new Date()); + allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.GROWTH_FUND_TOWER, ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP]); for (let activity of allActivity) { let growthFundActivity = new GrowthFundData(activity, createTime); let playerRecords: ActivityGrowthFundModelType[] = await ActivityGrowthFundModel.findData(activity.activityId, roleId); @@ -866,7 +883,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: } //精英成长基金 if (taskType === TASK_TYPE.BATTLE_MAIN_ELITE) { - allActivity = await ActivityModel.findOpenActivityByTypes(activityGroupId, [ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE, ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP], new Date()); + allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE, ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP]); for (let activity of allActivity) { let growthFundActivity = new GrowthFundData(activity, createTime); let playerRecords: ActivityGrowthFundModelType[] = await ActivityGrowthFundModel.findData(activity.activityId, roleId);