diff --git a/game-server/app/servers/activity/remote/activityRemote.ts b/game-server/app/servers/activity/remote/activityRemote.ts index 0aa9357de..a56849240 100644 --- a/game-server/app/servers/activity/remote/activityRemote.ts +++ b/game-server/app/servers/activity/remote/activityRemote.ts @@ -5,6 +5,7 @@ import { reloadResources } from '../../../pubUtils/data'; import { _getActivitiesByType, _getActivityById, _getActivities } from '../../../services/activity/activityService'; import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService'; import { taflush } from '../../../services/sdkService'; +import { ActivityInRemote } from '../../../domain/activityField/activityField'; export default function (app: Application) { new HandlerService(app, {}); @@ -20,7 +21,7 @@ export class ActivityRemote { private channelService: ChannelService; private activityByServer: Map = new Map(); // serverId => activityId[]; - private activities: Map = new Map(); // activityId => activity + private activities: Map = new Map(); // activityId => activity private activityByType: Map> = new Map(); // serverId => type => activityId[]; private groupToServer: Map = new Map(); // group => serverId[]; @@ -45,7 +46,7 @@ export class ActivityRemote { let activities = await ActivityModel.findOpenAndComingActivityes(); let activityIds: number[] = []; for(let activity of activities) { - this.activities.set(activity.activityId, activity); + this.activities.set(activity.activityId, new ActivityInRemote(activity)); activityIds.push(activity.activityId); } this.setActivityTypeAndServer(); @@ -86,7 +87,7 @@ export class ActivityRemote { public async updateActivities(activities: ActivityModelType[]) { let activityIds: number[] = []; for(let activity of activities) { - this.activities.set(activity.activityId, activity); + this.activities.set(activity.activityId, new ActivityInRemote(activity)); activityIds.push(activity.activityId); } this.setActivityTypeAndServer(); diff --git a/game-server/app/services/activity/activityService.ts b/game-server/app/services/activity/activityService.ts index 83c4e5e32..567008b9e 100644 --- a/game-server/app/services/activity/activityService.ts +++ b/game-server/app/services/activity/activityService.ts @@ -32,6 +32,7 @@ import { SignInData } from '../../domain/activityField/signInField'; import { ActivityGroupModel } from '../../db/ActivityGroup'; import { ActivityGroupTypeModel } from '../../db/ActivityGroupType'; import { ServerlistModel } from '../../db/Serverlist'; +import { ActivityInRemote, transActivityInRemoteToModelType } from '../../domain/activityField/activityField'; /** * 获取活动数据 @@ -200,13 +201,15 @@ export async function getActivity(serverId: number, roleId: string, activityId: export async function getActivityById(activityId: number) { let serverType = pinus.app.getServerType(); + let activity: ActivityInRemote; if(serverType == 'activity') { - return _getActivityById(activityId); + activity = _getActivityById(activityId); } else { let servers = pinus.app.getServersByType('activity'); let server = getRandSingleEelm(servers); - return await pinus.app.rpc.activity.activityRemote.getActivityById.toServer(server.id, activityId); + activity = await pinus.app.rpc.activity.activityRemote.getActivityById.toServer(server.id, activityId); } + return transActivityInRemoteToModelType(activity) } export async function getActivitiesByType(serverId: number, type: number) { @@ -227,21 +230,21 @@ export async function getActivities() { } else { let servers = pinus.app.getServersByType('activity'); let server = getRandSingleEelm(servers); - return await pinus.app.rpc.activity.activityRemote.getActivities.toServer(server.id); + return await pinus.app.rpc.activity.activityRemote.getActivities.toServer(server.id); } } export function _getActivityById(activityId: number) { - return pinus.app.get('activities')?.get(activityId); + return pinus.app.get('activities')?.get(activityId); } export function _getActivitiesByType(serverId: number, type: number) { let activityByType = pinus.app.get('activityByType')?.get(serverId)?.get(type)||[]; - let activities: Map = pinus.app.get('activities'); - let result: ActivityModelType[] = []; + let activities: Map = pinus.app.get('activities'); + let result: ActivityInRemote[] = []; for(let activityId of activityByType) { let activity = activities.get(activityId); - if(activity && activity.beginTime <= new Date()) { + if(activity && activity.beginTime <= Date.now()) { result.push(activity); } } @@ -250,7 +253,7 @@ export function _getActivitiesByType(serverId: number, type: number) { export function _getActivities() { let activities = pinus.app.get('activities'); - let result: ActivityModelType[] = []; + let result: ActivityInRemote[] = []; for(let [_, activity] of activities) { result.push(activity); } diff --git a/shared/domain/activityField/activityField.ts b/shared/domain/activityField/activityField.ts index 343df9b61..bee743f60 100644 --- a/shared/domain/activityField/activityField.ts +++ b/shared/domain/activityField/activityField.ts @@ -76,3 +76,47 @@ export abstract class ActivityBase { '今天第几天:', this.todayIndex, '回合:', this.roundIndex, '下次刷新:', this.nextRefreshTime, moment(this.nextRefreshTime).toDate()) } } + +/** + * 存在内存内的活动 + */ +export class ActivityInRemote { + groupId: number; // 组Id + activityId: number; // 活动Id + beginTime: number; // 开启时间 timeType=3 + endTime: number; // 结束时间 timeType=3 + type: number; // 活动类型 + data: string; // 活动表中的数据 + + timeType: number; // 活动时间类型 ACTIVITY_TIME_TYPE 1.服务器开启时间 2.角色创建时间 3.指定开启时间(beginTime,endTime) + days: number; // 活动持续天数 timeType=1、2 + delayDay: number; // 迟几天开启活动,0表示按照规定时间开启 + interval: number; // 周期性活动时间间隔,秒 + + constructor(activity?: ActivityModelType) { + this.groupId = activity.groupId; + this.activityId = activity.activityId; + this.beginTime = activity.beginTime.getTime(); + this.endTime = activity.endTime.getTime(); + this.type = activity.type; + this.data = activity.data; + this.timeType = activity.timeType; + this.days = activity.days; + this.delayDay = activity.delayDay; + this.interval = activity.interval; + } +} + +export function transActivityInRemoteToModelType(activity: ActivityInRemote) { + if(!activity) return null; + return { + ...activity, + beginTime: new Date(activity.beginTime), + endTime: new Date(activity.endTime), + _id: '', + createdAt: new Date(), + updatedAt: new Date(), + createdBy: 0, + updatedBy: 0 + } +} diff --git a/shared/pubUtils/roleUtil.ts b/shared/pubUtils/roleUtil.ts index 69e863ecd..da9ccf9d7 100644 --- a/shared/pubUtils/roleUtil.ts +++ b/shared/pubUtils/roleUtil.ts @@ -100,6 +100,7 @@ import { WishPoolReportModel } from '../db/WishPoolReport'; import { pick } from "underscore"; import { HeroShowParam } from '../domain/roleField/hero'; import { saveCeChangeLog } from "./logUtil"; +import { ActivityInRemote } from "../domain/activityField/activityField"; // 储存在内存中的初始数据 export function getInitRoleInfo() { @@ -318,7 +319,7 @@ export class CreateHeroes extends UpdateHeroes { this.resultHeroes = await HeroModel.insertHeroes(this.roleId, this.roleName, this.serverId, heroeInfos); } - public async clearTask(activitiesTypeMap: ActivityModelType[]) { + public async clearTask(activitiesTypeMap: ActivityInRemote[]) { // 任务 console.log('****** checkTask before', Date.now()) let m1 = await checkTask(this.roleId, TASK_TYPE.HERO_NUM, this.heroNum, true, {}); @@ -329,8 +330,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, null, activitiesTypeMap) - let mm2 = await accomplishTask(this.serverId, this.roleId, TASK_TYPE.HERO_QUALITY, this.heroNum, { heroes: this.resultHeroes }, activitiesTypeMap) + 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 0701d9bdd..950ea0b95 100644 --- a/shared/pubUtils/taskUtil.ts +++ b/shared/pubUtils/taskUtil.ts @@ -31,6 +31,7 @@ import moment = require("moment"); import { GuildModel } from '../db/Guild'; import { RefreshTaskData } from '../domain/activityField/refreshTaskField'; import { ActivityRefreshTaskModel } from '../db/ActivityRefreshTask'; +import { ActivityInRemote, transActivityInRemoteToModelType } from '../domain/activityField/activityField'; @@ -487,7 +488,7 @@ function checkRecResult(rec: UserTaskRecType, id: number) { * @param {number} parma 参数 * */ -export async function accomplishTask(serverId: number, roleId: string, taskType: TASK_TYPE, count: number, parma?: any, activities?: ActivityModelType[]) { +export async function accomplishTask(serverId: number, roleId: string, taskType: TASK_TYPE, count: number, parma?: any, activities?: ActivityInRemote[]) { // console.log('accomplishTask', roleId, taskType, count, JSON.stringify(parma)) let pushMessage = []; let { activityGroupId } = await ServerlistModel.findByServerId(serverId); @@ -495,9 +496,9 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: if(activities) { let result: ActivityModelType[] = []; for(let activity of activities) { - if(activity.beginTime <= new Date() && activity.endTime >= new Date()) { + if(activity.beginTime <= Date.now() && activity.endTime >= Date.now()) { if(activityGroupId.includes(activity.groupId) && types.includes(activity.type)) { - result.push(activity); + result.push( transActivityInRemoteToModelType(activity)); } } } @@ -519,7 +520,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: let growthActivity = playerData.growth; let growthTaskArray = growthActivity.findTaskByType(taskType); for (let task of growthTaskArray) { - let taskRecord = await ActivityGrowthModel.findDataByCellIndex(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType) + let taskRecord = await ActivityGrowthModel.findDataByCellIndex(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType); let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null; let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, activity.activityId, parma, recordData); if (addCount) {