diff --git a/game-server/app/servers/gm/handler/gmHandler.ts b/game-server/app/servers/gm/handler/gmHandler.ts index fcfa89b69..92dccf196 100644 --- a/game-server/app/servers/gm/handler/gmHandler.ts +++ b/game-server/app/servers/gm/handler/gmHandler.ts @@ -372,6 +372,7 @@ export class GmHandler { await pinus.app.rpc.systimer.systimerRemote.setGuildActivitySchedule.broadcast(); // 向客户端发送时间 let time = getTimeFunM().getTimeWithWeek(day, 20, 0, 0) - startActivity; + pinus.app.rpc.guild.guildActivityRemote.setCurrentTime.broadcast(time); await pushCurrentTime(time); return resResult(STATUS.SUCCESS, { startActivity: startTimes[0], @@ -382,4 +383,22 @@ export class GmHandler { endWorldAuction: startTimes[0] + endActivity * 1000 + startGuildAuction * 1000 + endGuildAuction * 1000 + startWorldAuction * 1000 + endWorldAuction * 1000, }); } + + async cancelGuildActivityDebug(msg: { }, session: BackendSession) { + // 设置字典 + let now = new Date(); + + await pinus.app.rpc.guild.guildRemote.reloadResources.broadcast(); + await pinus.app.rpc.systimer.systimerRemote.reloadResources.broadcast(); + await pinus.app.rpc.guild.guildActivityRemote.setDay.broadcast(now.getDay()); + await pinus.app.rpc.systimer.systimerRemote.setDay.broadcast(now.getDay()); + + // 开启定时器 + await pinus.app.rpc.systimer.systimerRemote.setAuctionSchedule.broadcast(); + await pinus.app.rpc.systimer.systimerRemote.setGuildActivitySchedule.broadcast(); + // 向客户端发送时间 + pinus.app.rpc.guild.guildActivityRemote.setCurrentTime.broadcast(now.getTime()); + await pushCurrentTime(now.getTime()); + return resResult(STATUS.SUCCESS); + } } \ No newline at end of file diff --git a/game-server/app/servers/guild/handler/cityActivityHandler.ts b/game-server/app/servers/guild/handler/cityActivityHandler.ts index 4af2fb344..393b1a0ea 100644 --- a/game-server/app/servers/guild/handler/cityActivityHandler.ts +++ b/game-server/app/servers/guild/handler/cityActivityHandler.ts @@ -10,12 +10,13 @@ import { UserGuildModel } from "../../../db/UserGuild"; import { GuildActivityRecordModel } from "../../../db/GuildActivityRec"; import { nowSeconds, getTimeFun } from "../../../pubUtils/timeUtil"; import { getGoldObject } from "../../../pubUtils/itemUtils"; -import { GUILDACTIVITY } from "../../../pubUtils/dicParam"; +import { GUILDACTIVITY, SERVER_DEBUG_MODE } from "../../../pubUtils/dicParam"; import { handleCost } from "../../../services/rewardService"; import { addActive } from "../../../services/guildService"; import { Rank } from "../../../services/rankService"; import { checkActivityTask, checkTask } from "../../../services/taskService"; import { guildInter } from "../../../pubUtils/interface"; +import { dispatch } from "../../../pubUtils/dispatcher"; export default function (app: Application) { new HandlerService(app, {}); @@ -69,7 +70,10 @@ export class CityActivityHandler { let obj = getCityActivityObj(); let gateHp = obj.getGateHpAndInc(serverId, cityId, dicCity.hp); - let myGuildActivityRec = await UserGuildActivityRecModel.findByRoleId(roleId, this.aid); + let guildActivityRec = await GuildActivityRecordModel.getRecord(guildCode, serverId, this.aid); + if (!guildActivityRec) return resResult(STATUS.INTERNAL_ERR); + + let myGuildActivityRec = await UserGuildActivityRecModel.findByRoleId(roleId, guildActivityRec.code); let challengeTime = 0; if (myGuildActivityRec) { challengeTime = myGuildActivityRec.challengeTime; @@ -278,7 +282,13 @@ export class CityActivityHandler { if (!dicCity) return resResult(STATUS.DIC_DATA_NOT_FOUND); // 更新userGuildActivityRecord - let challengeTime = getTimeFun().getBeforeSeconds(-1 * GUILDACTIVITY.CITYACTIVITY_CHALLENGE_CD); + let challengeTime = nowSeconds() + GUILDACTIVITY.CITYACTIVITY_CHALLENGE_CD; + if(SERVER_DEBUG_MODE.CURRENT_TIME == 1) { + let guilds = pinus.app.getServersByType('guild'); + let guild = dispatch(roleId, guilds, 'guild'); + let currentTime = await pinus.app.rpc.guild.guildActivityRemote.getCurrentTime.toServer(guild.id); + challengeTime = Math.floor(currentTime/1000) + GUILDACTIVITY.CITYACTIVITY_CHALLENGE_CD; + } let myGuildActivityRec = await UserGuildActivityRecModel.updateInfo(code, { isSuccess, isCompleted: true, cityId, challengeTime }); if (!myGuildActivityRec) return resResult(STATUS.INTERNAL_ERR); diff --git a/game-server/app/servers/guild/remote/guildActivityRemote.ts b/game-server/app/servers/guild/remote/guildActivityRemote.ts index 2bf876d19..0157b816f 100644 --- a/game-server/app/servers/guild/remote/guildActivityRemote.ts +++ b/game-server/app/servers/guild/remote/guildActivityRemote.ts @@ -16,6 +16,8 @@ export class GuildActivityRemote { } private channelService: ChannelService; + private currentTime: number = Date.now(); + private setTime: number = Date.now(); /** * 从systimer服分发到guild各个服,发送排行榜数据 @@ -88,4 +90,13 @@ export class GuildActivityRemote { async setDay(week: number) { setWeek(week); } + + setCurrentTime(time: number) { + this.currentTime = time; + this.setTime = Date.now(); + } + + getCurrentTime() { + return Date.now() - this.setTime + this.currentTime; + } } \ No newline at end of file diff --git a/game-server/app/services/auctionService.ts b/game-server/app/services/auctionService.ts index effc8df03..d0f6a19ed 100644 --- a/game-server/app/services/auctionService.ts +++ b/game-server/app/services/auctionService.ts @@ -7,7 +7,7 @@ import { getCurDay, getTimeFunD, getTimeFunM } from '../pubUtils/timeUtil'; import { gameData, getGoodById } from '../pubUtils/data'; import { DividendParam, DividendType } from '../db/Dividend'; import { sendMailByContent } from './mailService'; -import { FrontendOrBackendSession } from 'pinus'; +import { FrontendOrBackendSession, pinus } from 'pinus'; import { participants } from './guildActivityService'; import { Member } from '../domain/battleField/guildActivity'; import * as dicParam from '../pubUtils/dicParam'; @@ -230,7 +230,7 @@ export async function startGuildAuction() { if(dicParam.SERVER_DEBUG_MODE.CURRENT_TIME == 1) { let day = getCurDay(); let time = getTimeFunM().getTimeWithWeek(day, 20, 20, 0); - await pushCurrentTime(time); + pinus.app.rpc.guild.guildActivityRemote.setCurrentTime.broadcast(time); } return true; @@ -251,7 +251,7 @@ export async function startWorldAuction() { if(dicParam.SERVER_DEBUG_MODE.CURRENT_TIME == 1) { let day = getCurDay(); let time = getTimeFunM().getTimeWithWeek(day, 20, 40, 0); - await pushCurrentTime(time); + pinus.app.rpc.guild.guildActivityRemote.setCurrentTime.broadcast(time); } return true; } catch (e) { @@ -270,7 +270,7 @@ export async function stopAuction() { if(dicParam.SERVER_DEBUG_MODE.CURRENT_TIME == 1) { let day = getCurDay(); let time = getTimeFunM().getTimeWithWeek(day, 22, 0, 0); - await pushCurrentTime(time); + pinus.app.rpc.guild.guildActivityRemote.setCurrentTime.broadcast(time); } return true; } catch (e) { diff --git a/game-server/app/services/refreshService.ts b/game-server/app/services/refreshService.ts index cde2c5bdd..1e31d2f3a 100644 --- a/game-server/app/services/refreshService.ts +++ b/game-server/app/services/refreshService.ts @@ -7,6 +7,7 @@ import { refDailyTask, refDailyTaskBox } from './taskService' // import { EVENT_STATUS, FUNCS_ID } from "../consts"; // import { startEvent } from "./eventSercive"; import * as dicParam from '../pubUtils/dicParam'; +import { dispatch } from "../pubUtils/dispatcher"; /** * 刷新 @@ -17,7 +18,14 @@ export async function refresh(session: FrontendOrBackendSession) { const sid = session.get('sid'); let uids = [{uid: roleId, sid}]; - if(dicParam.SERVER_DEBUG_MODE.CURRENT_TIME != 1) pinus.app.get('channelService').pushMessageByUids('onPushCurrentTime', resResult(STATUS.SUCCESS, {time: Date.now()}), uids); + if(dicParam.SERVER_DEBUG_MODE.CURRENT_TIME != 1) { + pinus.app.get('channelService').pushMessageByUids('onPushCurrentTime', resResult(STATUS.SUCCESS, {time: Date.now()}), uids); + } else { + let guilds = pinus.app.getServersByType('guild'); + let guild = dispatch(roleId, guilds, 'guild'); + let currentTime = await pinus.app.rpc.guild.guildActivityRemote.getCurrentTime.toServer(guild.id); + pinus.app.get('channelService').pushMessageByUids('onPushCurrentTime', resResult(STATUS.SUCCESS, {time: currentTime }), uids); + } await refreshDaily(session); // await startEvent(session); } diff --git a/shared/db/UserGuildActivityRec.ts b/shared/db/UserGuildActivityRec.ts index 23f26ebcc..20d11aaae 100644 --- a/shared/db/UserGuildActivityRec.ts +++ b/shared/db/UserGuildActivityRec.ts @@ -30,6 +30,7 @@ export class DamageRecord { } @index({ code: 1 }) +@index({ roleId: 1, sourceCode: 1 }) export default class UserGuildActivityRec extends BaseModel { @prop({ required: true }) @@ -105,9 +106,9 @@ export default class UserGuildActivityRec extends BaseModel { } - public static async findByRoleId(roleId: string, aid: number) { + public static async findByRoleId(roleId: string, sourceCode: string) { let today = getZeroPointD(); - let rec: UserGuildActivityRecType = await UserGuildActivityRecModel.findOne({ roleId, aid, createdAt: { $gte: today }}).lean(); + let rec: UserGuildActivityRecType = await UserGuildActivityRecModel.findOne({ roleId, sourceCode, createdAt: { $gte: today }}).lean(); return rec; }