diff --git a/game-server/app/servers/chat/remote/chatRemote.ts b/game-server/app/servers/chat/remote/chatRemote.ts index a085adaa8..07eecd942 100644 --- a/game-server/app/servers/chat/remote/chatRemote.ts +++ b/game-server/app/servers/chat/remote/chatRemote.ts @@ -8,6 +8,7 @@ import { ChannelUser } from '../../../domain/ChannelUser'; import { getWorldChannelSid, groupRoomId } from '../../../services/chatService'; import { reloadResources } from '../../../pubUtils/data'; import { GeneralRankParamRole, GeneralRankParamBattle } from '../../../domain/rank'; +import { getAllGuildActivityStatus } from '../../../services/guildActivityService'; export default function (app: Application) { return new ChatRemote(app); @@ -35,6 +36,7 @@ export class ChatRemote { private GUILD_ACTIVITY_END = 'onGuildActivityEnd'; private RACE_ACTIVITY_START = 'onRaceStart'; private RANK_TOP_UPDATE = 'onRankTopUpdated'; + private GUILD_ACTIVITY_STATUS_UPDATE = 'onGuildActivityStatus'; // 军团活动状态变化 /** * 加入世界频道(分服). @@ -210,4 +212,17 @@ export class ChatRemote { public async reloadResources() { reloadResources(); } + + + /** + * @description 全服推送军团活动状态变化 + * @param serverId + */ + public async sendGuildActivityUpdate(serverId: number) { + let roomId = groupRoomId(CHANNEL_PREFIX.WORLD, serverId); + let channel = this.channelService.getChannel(roomId, false); + if (!channel) return; + let guildActivities = getAllGuildActivityStatus(); + channel.pushMessage(this.GUILD_ACTIVITY_STATUS_UPDATE, resResult(STATUS.SUCCESS, { guildActivities })); + } } diff --git a/game-server/app/services/connectorService.ts b/game-server/app/services/connectorService.ts index 0cedb47e9..a3a45ef60 100644 --- a/game-server/app/services/connectorService.ts +++ b/game-server/app/services/connectorService.ts @@ -31,7 +31,7 @@ import { getEvent } from './eventSercive'; import { getBattleListOfMain } from './normalBattleService'; import { GuildType } from '../db/Guild'; import UserGuild, { UserGuildType } from '../db/UserGuild'; -import { setMedianCe } from './guildActivityService'; +import { setMedianCe, getAllGuildActivityStatus } from './guildActivityService'; import { getAllOnlineRoles } from './redisService'; import Item from '../db/Item'; import { PvpDefenseModel } from '../db/PvpDefense'; @@ -47,7 +47,7 @@ export async function pushData(role: RoleType, session: FrontendOrBackendSession const guildData = await getGuildEntryData(role, sid, session); let modules = ['shop', 'rank', 'mail', 'friend', 'daily', 'expedition', 'tower', 'comBattle', 'dungeon', 'pvp', 'gacha', 'school', 'task', 'chat', 'event', 'battle']; if(guildData.hasGuild) { - modules.push('guild', 'auction', 'train', 'boss', 'wishPool'); + modules.push('guild', 'auction', 'train', 'boss', 'wishPool', 'guildActivity'); } let notIncludeModule: string[] = []; if(pushType == 'refresh') { @@ -72,6 +72,7 @@ export async function pushData(role: RoleType, session: FrontendOrBackendSession let { role, session } = data; const { roleId, serverId, roleName, guildCode } = role; let { hasGuild, guild, userGuild, guildResult } = guildData; + console.log('*********', type) switch(type) { case 'shop': // 商店 return await getAllShopList(roleId); @@ -131,6 +132,8 @@ export async function pushData(role: RoleType, session: FrontendOrBackendSession return await getEvent(role.eventStatus, roleId, roleName); case 'battle': return await getBattleListOfMain(role); + case 'guildActivity': + return getAllGuildActivityStatus(); default: return null; } diff --git a/game-server/app/services/guildActivityService.ts b/game-server/app/services/guildActivityService.ts index ab2f86b3a..cc6bfc4d4 100644 --- a/game-server/app/services/guildActivityService.ts +++ b/game-server/app/services/guildActivityService.ts @@ -91,6 +91,15 @@ export function getGuildActivityStatus(id: number) { return getGuildActivityByDic(dicGuildActivity); } +export function getAllGuildActivityStatus() { + let guildActivities: { status: number, time: number, isOpen: boolean }[] = []; + gameData.guildActivity.forEach(dicGuildActivity => { + let res = getGuildActivityByDic(dicGuildActivity); + guildActivities.push(res); + }); + return guildActivities; +} + export function getGuildActivityByDic(dicGuildActivity: DicGuildActivity) { let t = getTimeFun(); let startTime = t.getTimeWithHour(dicGuildActivity.startTime, dicGuildActivity.startMinute, dicGuildActivity.startSeconds); @@ -118,6 +127,14 @@ export function getGuildActivityByDic(dicGuildActivity: DicGuildActivity) { } } +/** + * 军团活动状态变化推送,包括开始活动和定时结束活动,3种活动都会推送 + */ +export async function sendGuildActivityStatus(serverId: number) { + let chatSid = await getWorldChannelSid(serverId); + pinus.app.rpc.chat.chatRemote.sendGuildActivityUpdate.toServer(chatSid, serverId); +} + /** * 根据每回合上报数据判断军功 * @param aid @@ -314,6 +331,7 @@ export async function sendEndMsgToAll() { for (let serverId of serverlist) { let chatSid = await getWorldChannelSid(serverId); pinus.app.rpc.chat.chatRemote.sendGuildActivityEnd.toServer(chatSid, serverId); + await sendGuildActivityStatus(serverId); } } diff --git a/game-server/app/services/redisService.ts b/game-server/app/services/redisService.ts index a792cd6b8..06e80732a 100644 --- a/game-server/app/services/redisService.ts +++ b/game-server/app/services/redisService.ts @@ -383,7 +383,7 @@ export async function readDataBase() { } async function setServerList() { - const serverList = await GameModel.getAllServerList(); + const serverList = await ServerlistModel.getAllServerList(); await redisClient().delAsync(REDIS_KEY.DB_GAME); for(let { id, serverType, name } of serverList) { diff --git a/game-server/app/services/timeTaskService.ts b/game-server/app/services/timeTaskService.ts index c677c2c09..ee3bcd7bd 100644 --- a/game-server/app/services/timeTaskService.ts +++ b/game-server/app/services/timeTaskService.ts @@ -19,7 +19,7 @@ import { STATUS } from '../consts/statusCode'; import { getMailContent, sendMail } from './mailService'; import { reportOnline } from '../pubUtils/httpUtil'; import { UserModel } from '../db/User'; -import { getGuildActivityByDic, setMedianCe, sendEndMsgToAll, autoDeclare } from './guildActivityService'; +import { getGuildActivityByDic, setMedianCe, sendEndMsgToAll, autoDeclare, sendGuildActivityStatus } from './guildActivityService'; import { sendUngotDividendJob, startGuildAuction, startWorldAuction, stopAuction } from './auctionService'; import { DicGuildActivity } from '../pubUtils/dictionary/DicGuildActivity'; import { GuildModel } from '../db/Guild'; @@ -401,6 +401,7 @@ export async function guildActivityStart(dicGuildActivity?: DicGuildActivity) { return false } + let servers = await getAllServers(); // 玩家serverId列表 if(dicGuildActivity.id == GUILD_ACTIVITY_TYPE.GATE_ACTIVITY) { guildActSecondsJobId = scheduleJob('guildActivitySeconds', '*/10 * * * * *', gateActivitySeconds); // 结束时间 @@ -412,7 +413,6 @@ export async function guildActivityStart(dicGuildActivity?: DicGuildActivity) { } else if (dicGuildActivity.id == GUILD_ACTIVITY_TYPE.RACE_ACTIVITY) { // 开始活动 - let servers = await getAllServers(); // 玩家serverId列表 let guildServers = pinus.app.getServersByType('guild'); for(let serverId of servers) { let sid = dispatch(serverId.toString(), guildServers); @@ -423,6 +423,10 @@ export async function guildActivityStart(dicGuildActivity?: DicGuildActivity) { // 结束时间 guildActEndJobId = scheduleJob('guildActivityEnd', Date.now() + dicGuildActivity.duringTime * 1000, raceActivityEnd); } + + for(let serverId of servers) { + await sendGuildActivityStatus(serverId); + } return true; }