diff --git a/game-server/app/servers/gm/handler/gmHandler.ts b/game-server/app/servers/gm/handler/gmHandler.ts index 026f432d0..49b73297a 100644 --- a/game-server/app/servers/gm/handler/gmHandler.ts +++ b/game-server/app/servers/gm/handler/gmHandler.ts @@ -153,8 +153,8 @@ export class GmHandler { } } - async updateActivity(msg: { activityId: number|string, groupId: number, beginTime: number, endTime: number, type: number, data: string, timeType: number, days: number, delayDay: number, interval: number, name: string }, session: BackendSession) { - const { activityId, groupId, beginTime, endTime, type, data, timeType = 3, days = 0, delayDay = 0, interval = 0, name = '' } = msg; + async updateActivity(msg: { activityId: number|string, groupId: number, beginTime: number, endTime: number, type: number, data: string, timeType: number, days: number, delayDay: number, interval: number, name: string, hideDayByServer: number }, session: BackendSession) { + const { activityId, groupId, beginTime, endTime, type, data, timeType = 3, days = 0, delayDay = 0, interval = 0, name = '', hideDayByServer = 0 } = msg; const uid = session.get('uid'); if (!type || !data) { return resResult(STATUS.WRONG_PARMS); @@ -173,7 +173,7 @@ export class GmHandler { let checkGroup = await checkActivityGroupTypeWithId(groupId, activities); if(!checkGroup) return resResult(STATUS.GM_ACTIVITY_NOT_FIT_GROUP_TYPE); - activities = await ActivityModel.addActivity(aids, groupId, beginTime ? new Date(beginTime) : undefined, endTime ? new Date(endTime) : undefined, type, data, timeType, days, delayDay, interval, name, uid); + activities = await ActivityModel.addActivity(aids, groupId, beginTime ? new Date(beginTime) : undefined, endTime ? new Date(endTime) : undefined, type, data, timeType, days, delayDay, interval, name, hideDayByServer, uid); let activityServers = pinus.app.getServersByType('activity'); diff --git a/game-server/app/services/activity/activityService.ts b/game-server/app/services/activity/activityService.ts index e1cf9054f..a7753eff7 100644 --- a/game-server/app/services/activity/activityService.ts +++ b/game-server/app/services/activity/activityService.ts @@ -217,6 +217,9 @@ export async function getActivity(serverId: number, roleId: string, guildCode: s break; } } + if(activityData && activityData.canShow && !activityData.canShow()) { + return null + } return activityData; } diff --git a/shared/db/Activity.ts b/shared/db/Activity.ts index f95197635..93463ece7 100644 --- a/shared/db/Activity.ts +++ b/shared/db/Activity.ts @@ -33,6 +33,8 @@ export default class Activity extends BaseModel { delayDay: number; // 迟几天开启活动,0表示按照规定时间开启 @prop({ required: true }) interval: number; // 周期性活动时间间隔,秒 + @prop({ required: true }) + hideDayByServer: number; // 开服后几天内该活动不可见 // 获取正在开启和即将到来的活动列表 public static async findOpenAndComingActivityes() { @@ -76,13 +78,13 @@ export default class Activity extends BaseModel { } //新增活动 - public static async addActivity(aids: number[], groupId: number, beginTime: Date, endTime: Date, type: number, data: string, timeType: number, days: number, delayDay: number, interval: number, name: string, uid = 1) { + public static async addActivity(aids: number[], groupId: number, beginTime: Date, endTime: Date, type: number, data: string, timeType: number, days: number, delayDay: number, interval: number, name: string, hideDayByServer: number, uid = 1) { let result: ActivityModelType[] = []; let newAids = []; for (let activityId of aids) { if (!activityId) activityId = await CounterModel.getNewCounter(COUNTER.ACTIVITY); newAids.push(activityId); - let update = { type, data, timeType, days, delayDay, interval, groupId, name } + let update = { type, data, timeType, days, delayDay, interval, groupId, name, hideDayByServer } if (beginTime != undefined) { update["beginTime"] = beginTime; } diff --git a/shared/domain/activityField/activityField.ts b/shared/domain/activityField/activityField.ts index 14b1a01c9..bebb53d97 100644 --- a/shared/domain/activityField/activityField.ts +++ b/shared/domain/activityField/activityField.ts @@ -13,6 +13,7 @@ export abstract class ActivityBase { type: number = 0; todayIndex: number = 0;//从1开始 delayDay: number = 0;//延迟多少天开启,0表示按照原计划开启 + hideDayByServer: number = 0; roundIndex: number = 0;//周期活动第几个周期,从1开始 nextRefreshTime: number = 0;//周期活动下次刷新时间 @@ -50,6 +51,7 @@ export abstract class ActivityBase { this.activityId = activityData.activityId; this.groupId = activityData.groupId; this.delayDay = activityData.delayDay ? activityData.delayDay : 0; + this.hideDayByServer = activityData.hideDayByServer||0; this.beginTime = moment(activityData.beginTime).add(this.delayDay, 'd').valueOf(); this.endTime = moment(activityData.endTime).add(this.delayDay, 'd').valueOf(); this.todayIndex = deltaDays(moment(this.beginTime).toDate(), new Date) + 1; @@ -97,6 +99,10 @@ export abstract class ActivityBase { this.nextRefreshTime = moment(this.beginTime).add(activityData.interval * this.roundIndex, 'second').valueOf(); this.todayIndex = Math.ceil(((moment(new Date).valueOf() - this.beginTime) / (24 * 60 * 60 * 1000))); } + if(activityData.hideDayByServer > 0) { + let hidOverTime = moment(serverTime * 1000).add(activityData.hideDayByServer, 'd').startOf('d').add(REFRESH_TIME, 'h').valueOf(); + if(this.beginTime < hidOverTime) this.beginTime = hidOverTime; + } console.log('活动时间数据...', '活动id:', activityData.activityId, '类型:', activityData.timeType, '开始时间:', this.beginTime, moment(this.beginTime).toDate(), '结束:', this.endTime, moment(this.endTime).toDate(), '今天第几天:', this.todayIndex, '回合:', this.roundIndex, '下次刷新:', this.nextRefreshTime, moment(this.nextRefreshTime).toDate()) @@ -118,6 +124,7 @@ export class ActivityInRemote { days: number; // 活动持续天数 timeType=1、2 delayDay: number; // 迟几天开启活动,0表示按照规定时间开启 interval: number; // 周期性活动时间间隔,秒 + hideDayByServer: number; name: string; constructor(activity?: ActivityModelType) { @@ -131,6 +138,7 @@ export class ActivityInRemote { this.days = activity.days; this.delayDay = activity.delayDay; this.interval = activity.interval; + this.hideDayByServer = activity.hideDayByServer; this.name = activity.name; } }