diff --git a/game-server/app/servers/guild/handler/gvgBattleHandler.ts b/game-server/app/servers/guild/handler/gvgBattleHandler.ts index 0b30388c0..d495e5110 100644 --- a/game-server/app/servers/guild/handler/gvgBattleHandler.ts +++ b/game-server/app/servers/guild/handler/gvgBattleHandler.ts @@ -341,6 +341,7 @@ export class GVGBattleHandler { let teamObj = getGVGBattleData(groupKey); teamObj.move(teamCode, areaId, team.fromAreaId, team.startMoveTime, team.stopMoveTime); + await leaveGVGAreaTeamChannel(roleId, sid); await addRoleToAreaTeamChannel(roleId, groupKey, areaId, sid); await pushTeamMoveMessage(team); return resResult(STATUS.SUCCESS, { areaId, cityId, stopMoveTime: team.stopMoveTime, moveCdTime: team.moveCdTime }); @@ -365,8 +366,6 @@ export class GVGBattleHandler { let teamObj = getGVGBattleData(groupKey); teamObj.move(teamCode, areaId, 0, team.startMoveTime, team.stopMoveTime); - await leaveGVGAreaTeamChannel(roleId, sid); - await addRoleToAreaTeamChannel(roleId, groupKey, areaId, sid); return resResult(STATUS.SUCCESS, { areaId, cityId, curTeam: new MyTeamInfo(team) }); } diff --git a/game-server/app/servers/guild/remote/guildRemote.ts b/game-server/app/servers/guild/remote/guildRemote.ts index e640825a2..0df83798f 100644 --- a/game-server/app/servers/guild/remote/guildRemote.ts +++ b/game-server/app/servers/guild/remote/guildRemote.ts @@ -10,10 +10,8 @@ import { getGVGConfig, setGVGConfig, setGVGServerGroup } from '../../../services import { GVGConfigType } from '../../../db/GVGConfig'; import { catapultHurt, gvgBattleEnd, gvgBattleSeconds, gvgBattleStart, initCatapult, leaveCityMem } from '../../../services/gvg/gvgBattleService'; import { clearBattleMemory } from '../../../services/gvg/gvgBattleMemory'; -import { GVGLeagueType } from '../../../db/GVGLeague'; import { updateLeagueNameMem, updateTeamRoleInfoMem } from '../../../services/gvg/gvgTeamService'; import { resetPeriodTime, setPeriodTime } from '../../../services/gvg/gvgFightService'; -import { GVGTeamType } from '../../../db/GVGTeam'; export default function (app: Application) { new HandlerService(app, {}); @@ -173,9 +171,9 @@ export class GuildRemote { } } - public async leaveCityMem(groupKey: string, roleId: string, teams: GVGTeamType[]) { + public async leaveCityMem(groupKey: string, roleId: string) { try { - return leaveCityMem(groupKey, roleId, teams); + return leaveCityMem(groupKey, roleId); } catch(e) { errlogger.error(`remote ${__filename} \n ${e.stack}`); } diff --git a/game-server/app/services/gvg/gvgBattleMemory.ts b/game-server/app/services/gvg/gvgBattleMemory.ts index 1495cae4d..5896cba07 100644 --- a/game-server/app/services/gvg/gvgBattleMemory.ts +++ b/game-server/app/services/gvg/gvgBattleMemory.ts @@ -86,12 +86,13 @@ class GVGBattleData { this.leagueToTeam.get(team.leagueCode).add(team.teamCode); } - this.setAreaMap(team.teamCode, fromAreaId, team.areaId); + this.setAreaMap(team.teamCode, fromAreaId, team.areaId, 'enterCity'); } } - private setAreaMap(teamCode: string, fromAreaId: number, toAreaId: number) { + private setAreaMap(teamCode: string, fromAreaId: number, toAreaId: number, fromFun) { if(fromAreaId == toAreaId) return; + // console.log('#### gvgBattleMemory setAreaMap', 'teamCode:', teamCode, 'fromAreaId: ', fromAreaId, 'toAreaId:', toAreaId, 'appid', pinus.app.getServerId(), 'from', fromFun) let fromAreaSet = this.areaToTeams.get(fromAreaId); if(fromAreaSet && fromAreaSet.has(teamCode)) fromAreaSet.delete(teamCode); @@ -119,7 +120,7 @@ class GVGBattleData { let team = this.teams.get(teamCode); if(!team) return; team.moveToArea(areaId, fromAreaId, startMoveTime, stopMoveTime); - this.setAreaMap(teamCode, fromAreaId, areaId); + this.setAreaMap(teamCode, fromAreaId, areaId, 'move'); } public setTime(teamCode: string, teamUpdate: GVGTeamType) { @@ -149,7 +150,7 @@ class GVGBattleData { let { areaId: fromAreaId, pointId: originPointId } = teamMem; teamMem.updateTeam(team); this.setRolePoints(team.roleId, originPointId, curTeamBreak? 0: pointId, team.teamCode); - this.setAreaMap(team.teamCode, fromAreaId, team.areaId); + this.setAreaMap(team.teamCode, fromAreaId, team.areaId, 'battleEnd'); } } diff --git a/game-server/app/services/gvg/gvgBattleService.ts b/game-server/app/services/gvg/gvgBattleService.ts index 2c404d150..788ceebfa 100644 --- a/game-server/app/services/gvg/gvgBattleService.ts +++ b/game-server/app/services/gvg/gvgBattleService.ts @@ -10,7 +10,7 @@ import { getGVGBattleData, getGVGBattleMap } from "./gvgBattleMemory"; import { GVGAttackSpine, GVGCityMapInfo, GVGTeamInList, GVGTeamInListOnPoint, GVGTeamSpineInMap } from "../../domain/gvgField/returnData"; import { GVG } from "../../pubUtils/dicParam"; import { GVGHeroInfo, PvpEnemies, PvpHeroInfo } from "../../domain/dbGeneral"; -import { getGroupKey, getGVGConfig, getGVGPeriodData } from "./gvgService"; +import { getGroupKey, getGVGConfig, getGVGConfigFromRemote, getGVGPeriodData } from "./gvgService"; import { GVGLeaguePrepareModel } from "../../db/GVGLeaguePrepare"; import { pinus } from "pinus"; import { dispatch } from "../../pubUtils/dispatcher"; @@ -219,30 +219,31 @@ export async function generNewLineup(roleId: string, heroes: HeroType[], lineup: export async function leaveCity(isForce: boolean, roleId: string, serverId: number, guildCode: string, myLeague?: GVGLeagueType) { if(!myLeague) myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); let groupKey = await getGroupKey(serverId); - let { configId } = getGVGConfig(); + let { configId } = await getGVGConfigFromRemote(); let teams = await GVGTeamModel.findByRole(roleId); let hasPoint = !!teams.find(team => team.pointId > 0); + // console.log('######### leaveCity', configId, groupKey) if(isForce || !hasPoint) { await GVGTeamModel.leaveCity(roleId); await GVGCityModel.decreasePlayer(configId, groupKey, roleId); if(myLeague) await GVGUserDataModel.changeCity(configId, myLeague.leagueCode, roleId, 0); await GVGCityAreaPointModel.playerLeave(configId, groupKey, roleId); // 处理内存数据 - await pinus.app.rpc.guild.guildRemote.leaveCityMem.broadcast(groupKey, roleId, teams); + await pinus.app.rpc.guild.guildRemote.leaveCityMem.broadcast(groupKey, roleId); + for(let team of teams) { + if(team.cityId > 0 && team.areaId > 0) { + await sendMessageToGVGAreaByTeamWithSuc(groupKey, team.areaId, PUSH_ROUTE.GVG_PLAYER_LEAVE_AREA, { + cityId: team.cityId, areaId: team.areaId, teamCode: team.teamCode + }); + } + } } } -export async function leaveCityMem(groupKey: string, roleId: string, teams: GVGTeamType[]) { +export async function leaveCityMem(groupKey: string, roleId: string) { let teamObj = getGVGBattleData(groupKey); teamObj.leaveCity(roleId); - for(let team of teams) { - if(team.cityId > 0 && team.areaId > 0) { - await sendMessageToGVGAreaByTeamWithSuc(groupKey, team.areaId, PUSH_ROUTE.GVG_PLAYER_LEAVE_AREA, { - cityId: team.cityId, areaId: team.areaId, teamCode: team.teamCode - }); - } - } } // 复活cd @@ -478,6 +479,7 @@ export async function gvgBattleSeconds() { const serverNames = await getAllServerName(); let keys: { groupKey: string, cityId: number }[] = [] for(let [_key, teamObj] of getGVGBattleMap()) { + // console.log('#### gvgBattleSeconds groupKey: ', _key, 'areas', teamObj.findAreas(), 'appid', pinus.app.getServerId()); if(startFightTime <= nowSeconds() && endFightTime >= nowSeconds()) { // 每5秒给据点上的人加积分 let teams = teamObj.findSettledPoint(); @@ -500,12 +502,13 @@ export async function gvgBattleSeconds() { if(index == -1) keys.push({ groupKey: teamObj.groupKey, cityId: dicArea.cityId }); } for(let [cityId, spines] of spinesByCity) { - await sendMessageToGVGCityWithSuc(teamObj.groupKey, cityId, PUSH_ROUTE.GVG_AREA_SPINE_CHANGE, { cityId, spines }); + if(spines.length > 0) await sendMessageToGVGCityWithSuc(teamObj.groupKey, cityId, PUSH_ROUTE.GVG_AREA_SPINE_CHANGE, { cityId, spines }); } } if(startFightTime <= nowSeconds() && endFightTime >= nowSeconds()) { + // console.log('#### cityRank keys', JSON.stringify(keys), 'appid', pinus.app.getServerId()) for(let { groupKey, cityId } of keys) { let { ranks } = await getBattleRanksByCity(configId, groupKey, cityId); await sendMessageToGVGCityWithSuc(groupKey, cityId, PUSH_ROUTE.GVG_CITY_RANK_UPDATE, { cityId, ranks }); diff --git a/game-server/app/services/gvg/gvgService.ts b/game-server/app/services/gvg/gvgService.ts index 761b3051d..2577dacbe 100644 --- a/game-server/app/services/gvg/gvgService.ts +++ b/game-server/app/services/gvg/gvgService.ts @@ -88,9 +88,14 @@ export function getPeriodTime() { } export async function getGVGConfigFromRemote() { - let guildServers = pinus.app.getServersByType('guild'); - let server = getRandSingleEelm(guildServers); - return await pinus.app.rpc.guild.guildRemote.getGVGConfig.toServer(server.id); + let serverType = pinus.app.getServerType(); + if(serverType == 'guild') { + return getGVGConfig(); + } else { + let guildServers = pinus.app.getServersByType('guild'); + let server = getRandSingleEelm(guildServers); + return await pinus.app.rpc.guild.guildRemote.getGVGConfig.toServer(server.id); + } } export async function setGVGConfig(config?: GVGConfigType) {