diff --git a/game-server/app/servers/guild/handler/gvgBattleHandler.ts b/game-server/app/servers/guild/handler/gvgBattleHandler.ts index 972de6c1d..88316c1ed 100644 --- a/game-server/app/servers/guild/handler/gvgBattleHandler.ts +++ b/game-server/app/servers/guild/handler/gvgBattleHandler.ts @@ -6,7 +6,7 @@ import { GVGCityModel } from '../../../db/GVGCity'; import { Application, BackendSession, ChannelService, HandlerService, pinus } from "pinus"; import { resResult, genCode } from "../../../pubUtils/util"; import { GVGLeagueModel } from '../../../db/GVGLeague'; -import { checkGVGPeriod, getGroupIdOfServer, getGVGConfig, getGVGPeriodData, getGVGServerType } from '../../../services/gvg/gvgService'; +import { getGroupKey, getGVGConfig, getGVGPeriodData } from '../../../services/gvg/gvgService'; import { redisAddBattleScore, battleEndSendMessage, calBattleScoreByCe, checkAreaIsInCity, checkGVGBattleStart, checkMoveStatus, getBattleRanksByCity, getBirthAreaOfCity, getGVGWarId, getOppHeroes, getTechKnifeHurt, getTechReviveMinus, initRobots, pushTeamMoveMessage, getGVGCitiesInfo } from '../../../services/gvg/gvgBattleService'; import { getGVGBattleData } from '../../../services/gvg/gvgBattleMemory'; import { GVGBattleRecModel } from '../../../db/GVGBattleRec'; @@ -66,15 +66,13 @@ export class GVGBattleHandler { let { configId, period } = getGVGPeriodData(); // if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD); // TODO 测试临时注 - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); - let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); let { leagueCode, name: leagueName } = myLeague; let durability = gameData.gvgTeamDurability.get(index)||0; - let updateParam: SaveTeamUpdateParam = { index, head, spine, frame, configId, groupId, serverType } + let groupKey = await getGroupKey(serverId); + let updateParam: SaveTeamUpdateParam = { index, head, spine, frame, configId, groupKey } if(lineup) { let attrByHid = await getHeroesAttributes(roleId); let { isOK, heroes } = await checkBattleHeroesByHid(roleId, lineup.map(cur => cur.actorId)); @@ -117,13 +115,11 @@ export class GVGBattleHandler { let { configId, period } = getGVGPeriodData(); let { startFightTime, endFightTime } = getFightTimeByPeriod(period); - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); - let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); - const city = await GVGCityModel.findByCityId(configId, groupId, serverType, cityId); + let groupKey = await getGroupKey(serverId); + const city = await GVGCityModel.findByCityId(configId, groupKey, cityId); const { guardLeague: leagueCode = '', guardLeagueName: name = '', guardLeagueIcon: icon = 0, players = [] } = city||{}; let ourTeamCnt = 0, oppTeamCnt = 0; @@ -171,14 +167,13 @@ export class GVGBattleHandler { let { configId, period } = getGVGPeriodData(); // if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD); // TODO 测试临时注 - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); // 初始化本城池的守擂机器人 - await initRobots(configId, groupId, serverType, cityId); + await initRobots(configId, groupKey, cityId); let teams = await GVGTeamModel.findByRole(roleId, '-_id'); // 每赛季初自己的几支队伍恢复耐久、城市、顺便更新一下自己的玩家名、联军 @@ -186,7 +181,7 @@ export class GVGBattleHandler { for(let team of teams) { if(team.configId != configId) { let { teamCode, maxDurability } = team; - updateArr.push({ teamCode, durability: maxDurability, cityId: 0, areaId: 0, pointId: 0, roleName, guildCode, leagueCode: myLeague.leagueCode, leagueName: myLeague.name, groupId, serverType }); + updateArr.push({ teamCode, durability: maxDurability, cityId: 0, areaId: 0, pointId: 0, roleName, guildCode, leagueCode: myLeague.leagueCode, leagueName: myLeague.name, groupKey }); } if(team.cityId) originCityId = team.cityId; } @@ -196,26 +191,26 @@ export class GVGBattleHandler { if (originCityId != cityId) { let gvgUserData = await GVGUserDataModel.findByRole(configId, myLeague.leagueCode, roleId); if(gvgUserData?.cityId > 0) { // 如果leaveCity没有退出成功,玩家还遗留在上一座城中,做一下处理 - await GVGCityModel.decreasePlayer(configId, groupId, serverType, gvgUserData.cityId, roleId); + await GVGCityModel.decreasePlayer(configId, groupKey, gvgUserData.cityId, roleId); } const roleTeamCnt = await GVGTeamModel.getTeamCntByRole(roleId); - let city = await GVGCityModel.increasePlayer(configId, groupId, serverType, cityId, roleId, myLeague.leagueCode, roleTeamCnt); + let city = await GVGCityModel.increasePlayer(configId, groupKey, cityId, roleId, myLeague.leagueCode, roleTeamCnt); if(!city) return resResult(STATUS.GVG_BATTLE_CITY_FULL); gvgUserData = await GVGUserDataModel.changeCity(configId, myLeague.leagueCode, roleId, cityId); let areaId = getBirthAreaOfCity(city, myLeague.leagueCode); - await GVGTeamModel.enterCity(roleId, cityId, areaId, groupId, serverType); + await GVGTeamModel.enterCity(roleId, cityId, areaId, groupKey); teams = await GVGTeamModel.findByRole(roleId, '-_id'); // 更新内存队伍信息 - let teamObj = getGVGBattleData(groupId, serverType); + let teamObj = getGVGBattleData(groupKey); teamObj.enterCity(...teams); } - const recs = await GVGRecModel.findBattleRecByCity(configId, groupId, serverType, cityId); + const recs = await GVGRecModel.findBattleRecByCity(configId, groupKey, cityId); const teamResult = teams.map(team => new MyTeamInfo(team)); - const { ranks, myRank } = await getBattleRanksByCity(configId, groupId, serverType, cityId, myLeague); + const { ranks, myRank } = await getBattleRanksByCity(configId, groupKey, cityId, myLeague); await leaveGVGCityTeamChannel(roleId, sid); - await addRoleToGVGCityChannel(roleId, groupId, serverType, cityId, sid); + await addRoleToGVGCityChannel(roleId, groupKey, cityId, sid); return resResult(STATUS.SUCCESS, { cityId, @@ -235,8 +230,7 @@ export class GVGBattleHandler { const { cityId } = msg; let { configId, period } = getGVGPeriodData(); - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); // 检测是否已经在城池中 let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); @@ -249,16 +243,16 @@ export class GVGBattleHandler { return resResult(STATUS.GVG_USER_NOT_IN_CITY); } - const city = await GVGCityModel.decreasePlayer(configId, groupId, serverType, cityId, roleId); + const city = await GVGCityModel.decreasePlayer(configId, groupKey, cityId, roleId); if (!city) { return resResult(STATUS.GVG_CITY_NOT_FOUND); } // 更新玩家城池和队伍城池 gvgUserData = await GVGUserDataModel.changeCity(configId, myLeague.leagueCode, roleId, 0); - await GVGTeamModel.enterCity(roleId, 0, 0, groupId, serverType); + await GVGTeamModel.enterCity(roleId, 0, 0, groupKey); // 处理内存数据 - let teamObj = getGVGBattleData(groupId, serverType); + let teamObj = getGVGBattleData(groupKey); teamObj.leaveCity(roleId); await leaveGVGAreaChannel(roleId, sid); @@ -277,12 +271,10 @@ export class GVGBattleHandler { if(!checkAreaIsInCity(cityId, areaIds)) return resResult(STATUS.GVG_AREA_NOT_IN_CITY); - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); - + let groupKey = await getGroupKey(serverId); let serverNames = await getAllServerName(); - let teamObj = getGVGBattleData(groupId, serverType); + let teamObj = getGVGBattleData(groupKey); let result: GVGAreaInMap[] = []; for(let areaId of areaIds) { let teams = teamObj.findTeamsByArea(areaId); @@ -291,7 +283,7 @@ export class GVGBattleHandler { } // 加入频道 await leaveGVGAreaChannel(roleId, sid); - await addRoleToAreaChannel(roleId, groupId, serverType, areaIds, sid); + await addRoleToAreaChannel(roleId, groupKey, areaIds, sid); return resResult(STATUS.SUCCESS, { cityId, areas: result }); } @@ -303,14 +295,13 @@ export class GVGBattleHandler { const serverId = session.get('serverId'); const { cityId, teamCode } = msg; - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); let myTeam = await GVGTeamModel.findMyTeamByCode(roleId, teamCode); if(!myTeam) return resResult(STATUS.GVG_TEAM_NOT_FOUND); if(myTeam.cityId != cityId) return resResult(STATUS.GVG_BATTLE_IS_NOT_IN_CITY); - let teams = await GVGTeamModel.findByAreaId(groupId, serverType, cityId, myTeam.areaId); + let teams = await GVGTeamModel.findByAreaId(groupKey, cityId, myTeam.areaId); let points: GVGTeamInListOnPoint[] = [], players: GVGTeamInList[] = []; let pointIds = gameData.gvgPointByAreaId.get(myTeam.areaId)||[]; for(let pointId of pointIds) { @@ -326,7 +317,7 @@ export class GVGBattleHandler { } await leaveGVGAreaTeamChannel(roleId, sid); - await addRoleToAreaTeamChannel(roleId, groupId, serverType, myTeam.areaId, sid); + await addRoleToAreaTeamChannel(roleId, groupKey, myTeam.areaId, sid); return resResult(STATUS.SUCCESS, { cityId, areaId: myTeam.areaId, points, players @@ -341,8 +332,7 @@ export class GVGBattleHandler { const serverId = session.get('serverId'); const { areaId, cityId, teamCode } = msg; - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); let team = await GVGTeamModel.findMyTeamByCode(roleId, teamCode); let checkResult = checkMoveStatus(team, cityId, areaId); @@ -351,10 +341,10 @@ export class GVGBattleHandler { team = await GVGTeamModel.startMove(teamCode, areaId, team.areaId); // 更新内存数据 - let teamObj = getGVGBattleData(groupId, serverType); + let teamObj = getGVGBattleData(groupKey); teamObj.move(teamCode, areaId, team.fromAreaId, team.startMoveTime, team.stopMoveTime); - await addRoleToAreaTeamChannel(roleId, groupId, serverType, areaId, sid); + await addRoleToAreaTeamChannel(roleId, groupKey, areaId, sid); await pushTeamMoveMessage(team); return resResult(STATUS.SUCCESS, { areaId, cityId, stopMoveTime: team.stopMoveTime }); } @@ -367,8 +357,7 @@ export class GVGBattleHandler { const serverId = session.get('serverId'); const { areaId, cityId, teamCode } = msg; - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); let team = await GVGTeamModel.findMyTeamByCode(roleId, teamCode); if(!team) return resResult(STATUS.GVG_BATTLE_TEAM_NOT_FOUND); @@ -376,11 +365,11 @@ export class GVGBattleHandler { team = await GVGTeamModel.stopMove(teamCode, areaId); // 更新内存数据 - let teamObj = getGVGBattleData(groupId, serverType); + let teamObj = getGVGBattleData(groupKey); teamObj.move(teamCode, areaId, 0, team.startMoveTime, team.stopMoveTime); await leaveGVGAreaTeamChannel(roleId, sid); - await addRoleToAreaTeamChannel(roleId, groupId, serverType, areaId, sid); + await addRoleToAreaTeamChannel(roleId, groupKey, areaId, sid); return resResult(STATUS.SUCCESS, { areaId, cityId, curTeam: new MyTeamInfo(team) }); } @@ -393,8 +382,7 @@ export class GVGBattleHandler { let { configId, period } = getGVGPeriodData(); // if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD); // TODO 测试临时注 - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); let myTeam = await GVGTeamModel.findMyTeamByCode(roleId, teamCode); if(!myTeam) return resResult(STATUS.GVG_TEAM_NOT_FOUND); @@ -406,7 +394,7 @@ export class GVGBattleHandler { if(!point) return resResult(STATUS.GVG_POINT_HAS_SETTLED); const curTeam = await GVGTeamModel.settlePoint(teamCode, pointId); - let teamObj = getGVGBattleData(groupId, serverType); + let teamObj = getGVGBattleData(groupKey); teamObj.teamSettle(roleId, teamCode, pointId); addTeamSettleRec(curTeam); @@ -423,8 +411,7 @@ export class GVGBattleHandler { let { configId, period } = getGVGPeriodData(); // if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD); // TODO 测试临时注 - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); let myTeam = await GVGTeamModel.findMyTeamByCode(roleId, teamCode); if(!myTeam) return resResult(STATUS.GVG_TEAM_NOT_FOUND); @@ -432,8 +419,8 @@ export class GVGBattleHandler { if(dicAreaPoint.areaId != myTeam.areaId) return resResult(STATUS.GVG_POINT_NOT_AREA); const curTeam = await GVGTeamModel.settlePoint(teamCode, 0); - await GVGCityAreaPointModel.leavePoint(configId, groupId, serverType, pointId); - let teamObj = getGVGBattleData(groupId, serverType); + await GVGCityAreaPointModel.leavePoint(configId, groupKey, pointId); + let teamObj = getGVGBattleData(groupKey); teamObj.teamSettle(roleId, teamCode, pointId); return resResult(STATUS.SUCCESS, { curTeam: new MyTeamInfo(curTeam) }); @@ -450,20 +437,19 @@ export class GVGBattleHandler { let { configId, period } = getGVGPeriodData(); // if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD); // TODO 测试临时注 - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); let { attackTeam, defenseTeam } = await GVGTeamModel.findBattleTeams(teamCode, oppoTeamCode); let checkStatus = checkGVGBattleStart(roleId, attackTeam, defenseTeam); if(checkStatus.code != 0) return resResult(checkStatus); const warId = getGVGWarId(defenseTeam); - const battleRecord = await GVGBattleRecModel.createRec(configId, groupId, serverType, warId, attackTeam, defenseTeam); + const battleRecord = await GVGBattleRecModel.createRec(configId, groupKey, warId, attackTeam, defenseTeam); attackTeam = await GVGTeamModel.battleStartLockAttack(teamCode); defenseTeam = await GVGTeamModel.battleStartLockDefense(oppoTeamCode, teamCode); // 内存处理 - let teamObj = getGVGBattleData(groupId, serverType); + let teamObj = getGVGBattleData(groupKey); teamObj.setTime(attackTeam.teamCode, attackTeam); teamObj.setTime(defenseTeam.teamCode, defenseTeam); let heroes = getOppHeroes(warId, defenseTeam.isRobot, defenseTeam.lineup) @@ -483,9 +469,8 @@ export class GVGBattleHandler { let { attackTeam, defenseTeam } = await GVGTeamModel.findBattleTeams(record.attackTeam.teamCode, record.defenseTeam.teamCode); if(defenseTeam.lockTeamCode != attackTeam.teamCode) return resResult(STATUS.GVG_LOCK_TIME_OUT) - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); - let city = await GVGCityModel.findByCityId(configId, groupId, serverType, cityId); + let groupKey = await getGroupKey(serverId); + let city = await GVGCityModel.findByCityId(configId, groupKey, cityId); if (!city) return resResult(STATUS.GVG_CITY_NOT_FOUND); // 计算并更新两支队伍耐久 @@ -497,7 +482,7 @@ export class GVGBattleHandler { attackTeam = await GVGTeamModel.settlePoint(attackTeam.teamCode, defenseTeam.originPointId); await GVGCityAreaPointModel.settlePoint(cityId, attackTeam.areaId, defenseTeam.originPointId, attackTeam); } else { - await GVGCityAreaPointModel.leavePoint(configId, groupId, serverType, defenseTeam.originPointId); + await GVGCityAreaPointModel.leavePoint(configId, groupKey, defenseTeam.originPointId); } } if(defenseTeam.curTeamBreak) { @@ -507,11 +492,11 @@ export class GVGBattleHandler { } // 更新内存 - let teamObj = getGVGBattleData(groupId, serverType); + let teamObj = getGVGBattleData(groupKey); teamObj.battleEnd([attackTeam, defenseTeam]); // 更新rec let rec = await GVGBattleRecModel.battleEnd(battleCode, isSuccess); - await battleEndSendMessage(groupId, serverType, cityId, defenseTeam, attackTeam); + await battleEndSendMessage(groupKey, cityId, defenseTeam, attackTeam); addBattleEndRec(rec); return resResult(STATUS.SUCCESS, { curTeam: new MyTeamInfo(attackTeam) }); @@ -531,8 +516,7 @@ export class GVGBattleHandler { let { configId, period } = getGVGPeriodData(); // if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD); // TODO 测试临时注 - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); let { attackTeam, defenseTeam } = await GVGTeamModel.findBattleTeams(teamCode, oppoTeamCode); let checkStatus = checkGVGBattleStart(roleId, attackTeam, defenseTeam); @@ -544,7 +528,7 @@ export class GVGBattleHandler { let costResult = await handleGVGCost(roleId, myLeague.leagueCode, sid, [{ id: GVG_ITEM.KNIFE, count: 1 }], [], ITEM_CHANGE_REASON.GVG_USE_ITEM); if(!costResult) return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH); - let city = await GVGCityModel.findByCityId(configId, groupId, serverType, cityId); + let city = await GVGCityModel.findByCityId(configId, groupKey, cityId); if (!city) return resResult(STATUS.GVG_CITY_NOT_FOUND); defenseTeam = await GVGTeamModel.battleEndDefense(teamCode, await getTechKnifeHurt(configId, attackTeam.leagueCode), getBirthAreaOfCity(city, defenseTeam.leagueCode), await getTechReviveMinus(configId, defenseTeam.leagueCode)); @@ -553,7 +537,7 @@ export class GVGBattleHandler { attackTeam = await GVGTeamModel.settlePoint(attackTeam.teamCode, defenseTeam.originPointId); await GVGCityAreaPointModel.settlePoint(cityId, attackTeam.areaId, defenseTeam.originPointId, attackTeam); } else { - await GVGCityAreaPointModel.leavePoint(configId, groupId, serverType, defenseTeam.originPointId); + await GVGCityAreaPointModel.leavePoint(configId, groupKey, defenseTeam.originPointId); } } @@ -563,10 +547,10 @@ export class GVGBattleHandler { } // 更新内存 - let teamObj = getGVGBattleData(groupId, serverType); + let teamObj = getGVGBattleData(groupKey); teamObj.battleEnd([attackTeam, defenseTeam]); - await battleEndSendMessage(groupId, serverType, cityId, defenseTeam, attackTeam); + await battleEndSendMessage(groupKey, cityId, defenseTeam, attackTeam); return resResult(STATUS.SUCCESS, { curTeam: new MyTeamInfo(attackTeam) }); } @@ -580,8 +564,7 @@ export class GVGBattleHandler { const { teamCode } = msg; let { configId, period } = getGVGPeriodData(); - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); @@ -607,7 +590,7 @@ export class GVGBattleHandler { team = await GVGTeamModel.reviveTeam(teamCode); // 更新内存 - let teamObj = getGVGBattleData(groupId, serverType); + let teamObj = getGVGBattleData(groupKey); teamObj.battleEnd([team]); // 更新成功返回队伍信息 @@ -623,15 +606,14 @@ export class GVGBattleHandler { const { type, cityId } = msg; // 根据 type 获取战报 let { configId, period } = getGVGPeriodData(); - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); let recs: GVGRecType[] = []; if(type == GVG_REC_TYPE.BATTLE_BY_CITY) { - recs = await GVGRecModel.findBattleRecByCity(configId, groupId, serverType, cityId); + recs = await GVGRecModel.findBattleRecByCity(configId, groupKey, cityId); } else if (type == GVG_REC_TYPE.BATTLE_BY_LEAGUE) { recs = await GVGRecModel.findBattleRecByLeague(configId, myLeague.leagueCode); } else if (type == GVG_REC_TYPE.BATTLE_BY_ROLE) { @@ -645,11 +627,10 @@ export class GVGBattleHandler { const serverId = session.get('serverId'); let { configId } = getGVGPeriodData(); - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); - const cities = await GVGCityModel.findByConfig(configId, groupId, serverType); - const points = await GVGCityAreaPointModel.findByConfig(configId, groupId, serverType); + const cities = await GVGCityModel.findByConfig(configId, groupKey); + const points = await GVGCityAreaPointModel.findByConfig(configId, groupKey); let result: { cityId: number, guardLeagueName: string, areas: { areaId: number, points: { pointId: number, guardLeagueName: string }[] }[] }[] = []; for(let [ cityId, { areaIds }] of gameData.gvgCity) { @@ -677,18 +658,16 @@ export class GVGBattleHandler { const serverId = session.get('serverId'); let { configId } = getGVGPeriodData(); - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); + let cities = await getGVGCitiesInfo(configId, groupKey); - let cities = await getGVGCitiesInfo(configId, groupId, serverType); - - let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupId, serverType }); + let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupKey }); let leagueRanksRaw = await r.getRankByRange(); let leagueRanks = leagueRanksRaw.map(obj => { if(obj instanceof LeagueRankInfo) return { rank: obj.rank, name: obj.name, score: obj.num } }); - let r2 = new Rank(REDIS_KEY.GVG_BATTLE_RANK, { configId, groupId, serverType }); + let r2 = new Rank(REDIS_KEY.GVG_BATTLE_RANK, { configId, groupKey }); let memberRanksRaw = await r2.getRankByRange(); let memberRanks = memberRanksRaw.map(obj => { if(obj instanceof RoleRankInfo) return { rank: obj.rank, name: obj.roleName, score: obj.num } diff --git a/game-server/app/servers/guild/handler/gvgFightHandler.ts b/game-server/app/servers/guild/handler/gvgFightHandler.ts index 696e0ee8d..5074c10a8 100644 --- a/game-server/app/servers/guild/handler/gvgFightHandler.ts +++ b/game-server/app/servers/guild/handler/gvgFightHandler.ts @@ -22,7 +22,7 @@ import { calBreakGoods, checkHeroIsUsedInOtherVestige, checkVestige, checkVestig import { addGVGReward, combinePushItem, handleGVGCost } from "../../../services/gvg/gvgItemService"; import { addGVGActive } from "../../../services/gvg/gvgPrepareService"; import { addVestigeBattleEndRec } from "../../../services/gvg/gvgRecService"; -import { getGroupIdOfServer, getGVGPeriodData, getGVGServerType } from "../../../services/gvg/gvgService"; +import { getGroupKey, getGVGPeriodData } from "../../../services/gvg/gvgService"; import { checkBattleHeroesByHid } from "../../../services/normalBattleService"; import { Rank } from "../../../services/rankService"; import { getAllServerName } from "../../../services/redisService"; @@ -56,19 +56,18 @@ export class GVGProduceHandler { const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); let dicRankMap = gameData.gvgVestige.get(vestigeId); if(!dicRankMap) return resResult(STATUS.DIC_DATA_NOT_FOUND); - let myVestigeRank = await getMyVestigeRank(configId, groupId, serverType, vestigeId, roleId, myLeague); + let myVestigeRank = await getMyVestigeRank(configId, groupKey, vestigeId, roleId, myLeague); if(!myVestigeRank) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); let { rank, lineup, oppRanks, refreshCnt } = myVestigeRank; let lineupCe = lineup.reduce((pre, cur) => pre + cur.ce, 0); - let oppPlayers = await getOppPlayerByRanks(serverId, groupId, serverType, vestigeId, oppRanks); + let oppPlayers = await getOppPlayerByRanks(serverId, groupKey, vestigeId, oppRanks); let usedHeroes = await getVestigeUsedHeroes(roleId, vestigeId); return resResult(STATUS.SUCCESS, { @@ -94,10 +93,9 @@ export class GVGProduceHandler { } let { configId, period } = getGVGPeriodData(); if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD); - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); - let myVestigeRank = await getMyVestigeRank(configId, groupId, serverType, vestigeId, roleId); + let myVestigeRank = await getMyVestigeRank(configId, groupKey, vestigeId, roleId); if(!myVestigeRank) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); for(let { actorId } of heroes) { @@ -172,17 +170,16 @@ export class GVGProduceHandler { } let { configId, period } = getGVGPeriodData(); if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD); - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); - let myVestigeRank = await getMyVestigeRank(configId, groupId, serverType, vestigeId, roleId); + let myVestigeRank = await getMyVestigeRank(configId, groupKey, vestigeId, roleId); let refreshCnt = myVestigeRank.refreshCnt||0; if(refreshCnt >= GVG.GVG_REFRESH_TIME) return resResult(STATUS.GVG_VESTIGE_REFESH_CNT_MAX); let oppRanks = refreshVestigeOppRanks(myVestigeRank.rank); myVestigeRank = await GVGVestigeRankModel.refreshOpp(roleId, vestigeId, oppRanks ); - let oppPlayers = await getOppPlayerByRanks(serverId, groupId, serverType, vestigeId, myVestigeRank.oppRanks); + let oppPlayers = await getOppPlayerByRanks(serverId, groupKey, vestigeId, myVestigeRank.oppRanks); // 返回 return resResult(STATUS.SUCCESS, { vestigeId, refreshCnt: myVestigeRank.refreshCnt, oppPlayers }); @@ -217,20 +214,19 @@ export class GVGProduceHandler { const hasItem = await GVGUserItemModel.checkItemCnt(configId, myLeague.leagueCode, roleId, GVG_ITEM.FIGHT_COIN, 1); if(!hasItem) return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH); - const groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + const groupKey = await getGroupKey(serverId); - let status = await checkVestigeOppStatus(configId, groupId, serverType, vestigeId, roleId, myRank, targetRoleId, rank); // 锁 + let status = await checkVestigeOppStatus(configId, groupKey, vestigeId, roleId, myRank, targetRoleId, rank); // 锁 if(status != VESTIGE_OPP_STATUS.BATTLE) { let oppRanks = refreshVestigeOppRanks(myRank); - let oppPlayers = await getOppPlayerByRanks(serverId, groupId, serverType, vestigeId, oppRanks); + let oppPlayers = await getOppPlayerByRanks(serverId, groupKey, vestigeId, oppRanks); return resResult(STATUS.SUCCESS, { status, oppPlayers }); } // 扣征战令 const costResult = await handleGVGCost(roleId, myLeague.leagueCode, sid, [{ id: GVG_ITEM.FIGHT_COIN, count: 1 }], [], ITEM_CHANGE_REASON.GVG_VESTIGE_START); if(!costResult) { - await GVGVestigeLockModel.releaseLock(groupId, serverType, vestigeId, rank); + await GVGVestigeLockModel.releaseLock(groupKey, vestigeId, rank); return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH); } // 获取征战令对应奖励 @@ -240,7 +236,7 @@ export class GVGProduceHandler { // 创建rec const attackInfo = await generateAttackInfo(roleId, myLeague, myRank); const defenseInfo = await generateDefenseInfo(targetRoleId, vestigeId, rank); - const rec = await GVGVestigeRecModel.createRec(configId, vestigeId, groupId, serverType, dicRank.warId, attackInfo, defenseInfo, leagueGoods); + const rec = await GVGVestigeRecModel.createRec(configId, vestigeId, groupKey, dicRank.warId, attackInfo, defenseInfo, leagueGoods); const oppDetail = await getOppDetailData(rec); checkGVGTask(serverId, roleId, sid, configId, myLeague.leagueCode, TASK_TYPE.GVG_VESTIGE, { count: 1 }); @@ -257,7 +253,7 @@ export class GVGProduceHandler { // 更新ladderMatchRec let rec = await GVGVestigeRecModel.giveup(roleId, battleCode); if(rec && rec.defenseInfo) { - await GVGVestigeLockModel.releaseLock(rec.groupId, rec.serverType, rec.vestigeId, rec.defenseInfo.oldRank); + await GVGVestigeLockModel.releaseLock(rec.groupKey, rec.vestigeId, rec.defenseInfo.oldRank); } return resResult(STATUS.SUCCESS, { @@ -302,9 +298,8 @@ export class GVGProduceHandler { if(await checkHeroIsUsedInOtherVestige(roleId, vestigeId, heroes)) return resResult(STATUS.GVG_VESTIGE_HERO_USED); // 更新锁 - const groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); - let lock = await GVGVestigeLockModel.checkBattleLock(groupId, serverType, vestigeId, rank, roleId); + const groupKey = await getGroupKey(serverId); + let lock = await GVGVestigeLockModel.checkBattleLock(groupKey, vestigeId, rank, roleId); if(!lock) return resResult(STATUS.GVG_VESTIGE_CHECK_BATTLE_STATUS_ERR); // 向vestigerec保存阵容 @@ -348,7 +343,7 @@ export class GVGProduceHandler { // 更新vestigeRec rec = await GVGVestigeRecModel.battleEnd(battleCode, isSuccess, endTime, atkData?.rank, defData?.rank||rec.attackInfo.oldRank); // 更新锁 - await GVGVestigeLockModel.releaseLock(rec.groupId, rec.serverType, rec.vestigeId, rec.defenseInfo.oldRank); + await GVGVestigeLockModel.releaseLock(rec.groupKey, rec.vestigeId, rec.defenseInfo.oldRank); // 更新battleRecord await BattleRecordModel.updateBattleRecordByCode(battleCode, { $set: { status: isSuccess? 1: 2 } }); @@ -367,7 +362,7 @@ export class GVGProduceHandler { score: gameData.gvgVestige.get(rec.vestigeId)?.get(atkData.rank)?.score??0, historyRank: atkData.historyRank, ...getVestigeRecStatus(rec), - oppPlayers: await getOppPlayerByRanks(serverId, rec.groupId, rec.serverType, rec.vestigeId, atkData.oppRanks), + oppPlayers: await getOppPlayerByRanks(serverId, rec.groupKey, rec.vestigeId, atkData.oppRanks), // breakGoods, lineup: atkData.lineup, lineupCe: atkData.lineup.reduce((pre, cur) => pre + cur.ce, 0), @@ -402,12 +397,11 @@ export class GVGProduceHandler { const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); let serverNames = await getAllServerName(); - const { ranks: leagueRank, myRank: myLeagueRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_LEAGUE, true, { groupId, serverType, day: getDayKeyInfo() }, { leagueCode: myLeague.leagueCode }); - const { ranks: memberRank, myRank: myMemberRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, true, { groupId, serverType, day: getDayKeyInfo() }, { roleId }, serverNames); + const { ranks: leagueRank, myRank: myLeagueRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_LEAGUE, true, { groupKey, day: getDayKeyInfo() }, { leagueCode: myLeague.leagueCode }); + const { ranks: memberRank, myRank: myMemberRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, true, { groupKey, day: getDayKeyInfo() }, { roleId }, serverNames); return resResult(STATUS.SUCCESS, { leagueRank, myLeagueRank, memberRank, myMemberRank @@ -423,13 +417,12 @@ export class GVGProduceHandler { const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); let serverNames = await getAllServerName(); let { configId } = getGVGPeriodData(); - const { ranks, myRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_LEAGUE, false, { groupId, serverType, day: getDayKeyInfo() }, { leagueCode: myLeague.leagueCode }, serverNames); - const { ranks: memberRank, myRank: myMemberRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, false, { groupId, serverType, day: getDayKeyInfo() }, { roleId }, serverNames); + const { ranks, myRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_LEAGUE, false, { groupKey, day: getDayKeyInfo() }, { leagueCode: myLeague.leagueCode }, serverNames); + const { ranks: memberRank, myRank: myMemberRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, false, { groupKey, day: getDayKeyInfo() }, { roleId }, serverNames); let yesterdayRank = await GVGVestigeLeagueRankModel.getYesterdayRank(myLeague.leagueCode); let canReceiveLeagueRanks = await GVGVestigeLeagueRankModel.getCanReceiveRanks(configId, myLeague.leagueCode); @@ -450,13 +443,12 @@ export class GVGProduceHandler { let serverId = session.get('serverId'); let { vestigeId } = msg; - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); let dicRankMap = gameData.gvgVestige.get(vestigeId); let serverNames = await getAllServerName(); - let vestigeRanks = await GVGVestigeRankModel.findRankByVestige(groupId, serverType, vestigeId); - let r = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER, { groupId, serverType, vestigeId }); + let vestigeRanks = await GVGVestigeRankModel.findRankByVestige(groupKey, vestigeId); + let r = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER, { groupKey, vestigeId }); let ranks: VestigeRank[] = [], myRank: VestigeRank; for(let { roleId: targetRoleId, rank, lineup } of vestigeRanks) { let param = await r.getParam(rank, targetRoleId, [rank]); @@ -531,26 +523,25 @@ export class GVGProduceHandler { let serverId = session.get('serverId'); let guildCode = session.get('guildCode'); - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); + let groupKey = await getGroupKey(serverId); let { configId } = getGVGPeriodData(); const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); - let myData = await getMyVestigeRank(configId, groupId, serverType, vestigeId, roleId, myLeague) + let myData = await getMyVestigeRank(configId, groupKey, vestigeId, roleId, myLeague) let myRank = myData?.rank||0; - let targetData = await GVGVestigeRankModel.findByRank(configId, groupId, serverType, vestigeId, rank); + let targetData = await GVGVestigeRankModel.findByRank(configId, groupKey, vestigeId, rank); if(targetData) { myData = await GVGVestigeRankModel.updateByRoleId(vestigeId, roleId, { rank, oldRank: myRank, historyRank: rank }); targetData = await GVGVestigeRankModel.updateByRoleId(vestigeId, targetData.roleId, { rank: myRank, oldRank: rank }); } else { myData = await GVGVestigeRankModel.updateByRoleId(vestigeId, roleId, { rank, oldRank: myRank, historyRank: rank }); } - await savePlayerRank(configId, groupId, serverType, vestigeId, { isRobot: false, newRank: rank, oldRank: myRank, roleId, leagueCode: myLeague.leagueCode }); + await savePlayerRank(configId, groupKey, vestigeId, { isRobot: false, newRank: rank, oldRank: myRank, roleId, leagueCode: myLeague.leagueCode }); if(targetData) { - await savePlayerRank(configId, groupId, serverType, vestigeId, { isRobot: false, newRank: targetData.rank, oldRank: rank, roleId: targetData.roleId, leagueCode: targetData.leagueCode }); + await savePlayerRank(configId, groupKey, vestigeId, { isRobot: false, newRank: targetData.rank, oldRank: rank, roleId: targetData.roleId, leagueCode: targetData.leagueCode }); } return resResult(STATUS.SUCCESS); diff --git a/game-server/app/servers/guild/handler/gvgHandler.ts b/game-server/app/servers/guild/handler/gvgHandler.ts index 8bef3a6c4..f7ba48cbe 100644 --- a/game-server/app/servers/guild/handler/gvgHandler.ts +++ b/game-server/app/servers/guild/handler/gvgHandler.ts @@ -4,7 +4,7 @@ import { GVGLeagueModel } from "../../../db/GVGLeague"; import { GVGLeaguePrepareModel } from "../../../db/GVGLeaguePrepare"; import { GVGMainData, LeagueContributeInfo, LeagueMemberContributeInfo, LeagueMemberListInfo } from "../../../domain/gvgField/returnData"; import { getRandEelm, resResult } from "../../../pubUtils/util"; -import { calLeagueCe, getGroupIdOfServer, getGVGConfig, getGVGPeriodData, getGVGServerType, getServerTypeByTime } from "../../../services/gvg/gvgService"; +import { calLeagueCe, getGroupIdOfServer, getGroupKey, getGVGConfig, getGVGPeriodData, getGVGServerType, getServerTypeByTime } from "../../../services/gvg/gvgService"; import { autoCreateLeague, checkCanChooseJob, checkCanPrepare, checkLeagueAuth, getMyAuth } from "../../../services/gvg/gvgTeamService"; import { getAllServerName } from "../../../services/redisService"; import { Contribute, GVGUserDataModel } from "../../../db/GVGUserData"; @@ -91,11 +91,8 @@ export class GVGHandler { let { configId, period, countdownTime } = getGVGPeriodData(); let { startFightTime, endFightTime } = getFightTimeByPeriod(period); - - let groupId = await getGroupIdOfServer(serverId); - let serverType = await getGVGServerType(serverId); - - let cities = await getGVGCitiesInfo(configId, groupId, serverType, myLeague); + let groupKey = await getGroupKey(serverId); + let cities = await getGVGCitiesInfo(configId, groupKey, myLeague); let vestiges = await getMyVestiges(serverId, roleId); return resResult(STATUS.SUCCESS, { diff --git a/game-server/app/servers/guild/remote/guildRemote.ts b/game-server/app/servers/guild/remote/guildRemote.ts index 232e848f8..0cab8358c 100644 --- a/game-server/app/servers/guild/remote/guildRemote.ts +++ b/game-server/app/servers/guild/remote/guildRemote.ts @@ -129,9 +129,9 @@ export class GuildRemote { } } - public async initCatapult(cityId: number, groupId: number, serverType: number, leagueCode: string, leagueName: string) { + public async initCatapult(cityId: number, groupKey: string, leagueCode: string, leagueName: string) { try { - return await initCatapult(cityId, groupId, serverType, leagueCode, leagueName); + return await initCatapult(cityId, groupKey, leagueCode, leagueName); } catch(e) { errlogger.error(`remote ${__filename} \n ${e.stack}`); } diff --git a/game-server/app/services/chatChannelService.ts b/game-server/app/services/chatChannelService.ts index eb5fff9fc..c82a82b4d 100644 --- a/game-server/app/services/chatChannelService.ts +++ b/game-server/app/services/chatChannelService.ts @@ -61,24 +61,24 @@ export async function addRoleToGroupShopChannel(roleId: string, sid: string) { await addRoleToChannel(roomId, roleId, sid); } -export async function addRoleToAreaChannel(roleId: string, groupId: number, serverType: number, areaIds: number[], sid: string) { +export async function addRoleToAreaChannel(roleId: string, groupKey: string, areaIds: number[], sid: string) { for(let areaId of areaIds) { - const roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREAS, `${groupId}_${serverType}_${areaId}`); + const roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREAS, `${groupKey}_${areaId}`); await addRoleToChannel(roomId, roleId, sid); } - await addGVGHistoryAreas(roleId, groupId, serverType, areaIds); + await addGVGHistoryAreas(roleId, groupKey, areaIds); } -export async function addRoleToAreaTeamChannel(roleId: string, groupId: number, serverType: number, areaId: number, sid: string) { - const roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREA_BY_TEAM, `${groupId}_${serverType}_${areaId}`); +export async function addRoleToAreaTeamChannel(roleId: string, groupKey: string, areaId: number, sid: string) { + const roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREA_BY_TEAM, `${groupKey}_${areaId}`); await addRoleToChannel(roomId, roleId, sid); - await addGVGHistoryAreaTeam(roleId, groupId, serverType, areaId); + await addGVGHistoryAreaTeam(roleId, groupKey, areaId); } -export async function addRoleToGVGCityChannel(roleId: string, groupId: number, serverType: number, cityId: number, sid: string) { - const roomId = groupRoomId(CHANNEL_PREFIX.GVG_CITY, `${groupId}_${serverType}_${cityId}`); +export async function addRoleToGVGCityChannel(roleId: string, groupKey: string, cityId: number, sid: string) { + const roomId = groupRoomId(CHANNEL_PREFIX.GVG_CITY, `${groupKey}_${cityId}`); await addRoleToChannel(roomId, roleId, sid); - await addGVGHistoryCityTeam(roleId, groupId, serverType, cityId); + await addGVGHistoryCityTeam(roleId, groupKey, cityId); } async function leaveChannel(roomId: string, roleId: string, sid: string) { const channelSid = await channelServer(roomId); @@ -184,20 +184,20 @@ export async function getGroupShopSid() { return channelSid; } -export async function getGVGAreaChannelSid(groupId: number, serverType: number, areaId: number) { - const roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREAS, `${groupId}_${serverType}_${areaId}`); +export async function getGVGAreaChannelSid(groupKey: string, areaId: number) { + const roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREAS, `${groupKey}_${areaId}`); const channelSid = await channelServer(roomId); return channelSid; } -export async function getGVGAreaTeamChannelSid(groupId: number, serverType: number, areaId: number) { - const roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREA_BY_TEAM, `${groupId}_${serverType}_${areaId}`); +export async function getGVGAreaTeamChannelSid(groupKey: string, areaId: number) { + const roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREA_BY_TEAM, `${groupKey}_${areaId}`); const channelSid = await channelServer(roomId); return channelSid; } -export async function getGVGCityTeamChannelSid(groupId: number, serverType: number, cityId: number) { - const roomId = groupRoomId(CHANNEL_PREFIX.GVG_CITY, `${groupId}_${serverType}_${cityId}`); +export async function getGVGCityTeamChannelSid(groupKey: string, cityId: number) { + const roomId = groupRoomId(CHANNEL_PREFIX.GVG_CITY, `${groupKey}_${cityId}`); const channelSid = await channelServer(roomId); return channelSid; } diff --git a/game-server/app/services/gvg/gvgBattleMemory.ts b/game-server/app/services/gvg/gvgBattleMemory.ts index 1c556e13c..5e1d2896f 100644 --- a/game-server/app/services/gvg/gvgBattleMemory.ts +++ b/game-server/app/services/gvg/gvgBattleMemory.ts @@ -11,17 +11,15 @@ import { getGVGPeriodData } from "./gvgService"; const gvgBattleMap: Map = new Map(); class GVGBattleData { - public groupId: number; // 战区 - public serverType: number; // 单服还是跨服 + public groupKey: string; // 战区 private teams: Map = new Map(); // 队伍, teamCode => team private rolePoints: Map> = new Map(); // roleId => pointId[],用于更新玩家的积分 private roleToTeam: Map = new Map(); // roleId => teamCode public areaToTeams: Map> = new Map(); // areaId => teamCode set,用于定时下发地图玩家数据 - constructor(groupId: number, serverType: number) { - this.groupId = groupId; - this.serverType = serverType; + constructor(groupKey: string) { + this.groupKey = groupKey; } public findTeamsByArea(areaId: number) { @@ -158,12 +156,11 @@ class GVGBattleData { } } -export function getGVGBattleData(groupId: number, serverType: number) { - let key = `${groupId}_${serverType}`; - if(!gvgBattleMap.has(key)) { - gvgBattleMap.set(key, new GVGBattleData(groupId, serverType)); +export function getGVGBattleData(groupKey: string) { + if(!gvgBattleMap.has(groupKey)) { + gvgBattleMap.set(groupKey, new GVGBattleData(groupKey)); } - return gvgBattleMap.get(key); + return gvgBattleMap.get(groupKey); } export function getGVGBattleMap() { @@ -178,7 +175,7 @@ export async function initTeamToMem() { let teams = await GVGTeamModel.findByConfigId(configId); for(let team of teams) { if(dispatch(team.cityId.toString(), servers)?.id == sid) { - let teamObj = getGVGBattleData(team.groupId, team.serverType); + let teamObj = getGVGBattleData(team.groupKey); teamObj.enterCity(team); } } diff --git a/game-server/app/services/gvg/gvgBattleService.ts b/game-server/app/services/gvg/gvgBattleService.ts index fa740077d..94b2bc3d4 100644 --- a/game-server/app/services/gvg/gvgBattleService.ts +++ b/game-server/app/services/gvg/gvgBattleService.ts @@ -47,15 +47,15 @@ export async function getGVGCities(league: GVGLeagueType) { * 获取当前城池状态 * @returns [{cityId: number, guardLeagueCode: string, guardLeagueName: string, teamCnt: number }] */ -export async function getGVGCitiesInfo(configId: number, groupId: number, serverType: number, league?: GVGLeagueType) { - let cities = await GVGCityModel.findGuardCity(configId, groupId, serverType); +export async function getGVGCitiesInfo(configId: number, groupKey: string, league?: GVGLeagueType) { + let cities = await GVGCityModel.findGuardCity(configId, groupKey); let result: GVGCityMapInfo[] = []; for(let city of cities) { let obj = new GVGCityMapInfo(city); if(league) { let players = (city.players||[]).filter(cur => cur.leagueCode == league.leagueCode); obj.setTeamCnt(players.length); - let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupId, serverType }); + let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupKey }); let score = await r.getMyScore({ leagueCode: league.leagueCode }); obj.setScore(score||0); } @@ -93,8 +93,8 @@ export function checkMoveStatus(team: GVGTeamType, cityId: number, areaId: numbe return STATUS.SUCCESS; } -export async function initRobots(configId: number, groupId: number, serverType: number, cityId: number) { - let robotTeams = await GVGTeamModel.findRobotTeams(groupId, serverType, cityId); +export async function initRobots(configId: number, groupKey: string, cityId: number) { + let robotTeams = await GVGTeamModel.findRobotTeams(groupKey, cityId); let updateDicPoints: DicGVGAreaPoint[] = []; let { areaIds = []} = gameData.gvgCity.get(cityId); for(let [_, point] of gameData.gvgAreaPoint) { @@ -105,9 +105,9 @@ export async function initRobots(configId: number, groupId: number, serverType: } } if(updateDicPoints.length > 0) { - robotTeams = await GVGTeamModel.initRobots(configId, groupId, serverType, cityId, updateDicPoints); + robotTeams = await GVGTeamModel.initRobots(configId, groupKey, cityId, updateDicPoints); // 存入内存 - let teamObj = getGVGBattleData(groupId, serverType); + let teamObj = getGVGBattleData(groupKey); teamObj.enterCity(...robotTeams); } return robotTeams; @@ -213,14 +213,14 @@ export async function gvgBattleStart() { let { configId } = getGVGConfig(); let guardCities = await GVGCityModel.findAllGuardCities(configId); - for(let { cityId, groupId, serverType, guardLeague, guardLeagueName } of guardCities) { + for(let { cityId, groupKey, guardLeague, guardLeagueName } of guardCities) { let sid = dispatch(cityId.toString(), servers)?.id; - await pinus.app.rpc.guild.guildRemote.initCatapult.toServer(sid, cityId, groupId, serverType, guardLeague, guardLeagueName); + await pinus.app.rpc.guild.guildRemote.initCatapult.toServer(sid, cityId, groupKey, guardLeague, guardLeagueName); } } // 每次活动开始初始化投石车 -export async function initCatapult(cityId: number, groupId: number, serverType: number, leagueCode: string, leagueName: string) { +export async function initCatapult(cityId: number, groupKey: string, leagueCode: string, leagueName: string) { let { configId } = getGVGConfig(); let leaguePrepare = await GVGLeaguePrepareModel.findByLeague(configId, leagueCode); @@ -238,9 +238,9 @@ export async function initCatapult(cityId: number, groupId: number, serverType: let dicArea = gameData.gvgArea.get(areaId); return dicArea && dicArea.areaType == GVG_AREA_TYPE.CATAPULT; }); - let teams = await GVGTeamModel.initCatapult(configId, groupId, serverType, cityId, leagueCode, leagueName, areaIds, atk, durability); + let teams = await GVGTeamModel.initCatapult(configId, groupKey, cityId, leagueCode, leagueName, areaIds, atk, durability); // 处理内存 - let teamObj = getGVGBattleData(groupId, serverType); + let teamObj = getGVGBattleData(groupKey); teamObj.enterCity(...teams); } } @@ -258,13 +258,13 @@ export async function catapultHurt() { let dicGVGCity = gameData.gvgCity.get(catapult.cityId); let teams = await GVGTeamModel.attackByCatapult(teamCodes, catapult.captapultAtk, dicGVGCity.attackBirth); teamObj.battleEnd(teams); - await sendMessageToGVGAreaByTeamWithSuc(teamObj.groupId, teamObj.serverType, catapult.areaId, PUSH_ROUTE.GVG_TEAM_ATTACKED, { + await sendMessageToGVGAreaByTeamWithSuc(teamObj.groupKey, catapult.areaId, PUSH_ROUTE.GVG_TEAM_ATTACKED, { cityId: catapult.cityId, areaId: catapult.areaId, attackType: 1, teams: teams.map(team => new GVGTeamInList(team)) }); for(let team of teams) { await pushTeamBeHurtMessage(team); if(team.curTeamBreak && team.originPointId > 0) { - await GVGCityAreaPointModel.leavePoint(configId, teamObj.groupId, teamObj.serverType, team.originPointId); + await GVGCityAreaPointModel.leavePoint(configId, teamObj.groupKey, team.originPointId); } } } @@ -273,27 +273,27 @@ export async function catapultHurt() { // 战斗积分更新 export async function redisAddBattleScore(gvgTeam: GVGTeamType, incScore: number) { - let { configId, groupId, serverType, cityId, roleId, isRobot } = gvgTeam; + let { configId, groupKey, cityId, roleId, isRobot } = gvgTeam; if(isRobot) return; - let r = new Rank(REDIS_KEY.GVG_BATTLE_RANK, { configId, groupId, serverType, cityId }); + let r = new Rank(REDIS_KEY.GVG_BATTLE_RANK, { configId, groupKey, cityId }); r.setRankWithRoleInfo(roleId, incScore, Date.now(), null, true); } export async function redisAddSettleScore(gvgTeam: GVGTeamType, incScore: number) { - let { configId, groupId, serverType, cityId, leagueCode, isRobot } = gvgTeam; + let { configId, groupKey, cityId, leagueCode, isRobot } = gvgTeam; if(isRobot) return; - let r1 = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupId, serverType }); + let r1 = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupKey }); r1.setRankWithLeagueInfo(leagueCode, incScore, Date.now(), null, true); - let r2 = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupId, serverType, cityId }); + let r2 = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupKey, cityId }); r2.setRankWithLeagueInfo(leagueCode, incScore, Date.now(), null, true); } // 获取排行榜 -export async function getBattleRanksByCity(configId: number, groupId: number, serverType: number, cityId: number, myLeague: GVGLeagueType) { - let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupId, serverType, cityId }); +export async function getBattleRanksByCity(configId: number, groupKey: string, cityId: number, myLeague: GVGLeagueType) { + let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupKey, cityId }); r.setGenerFieldsFun((obj => { if(obj instanceof LeagueRankInfo) { return { rank: obj.rank, leagueCode: obj.code, leagueName: obj.name, score: obj.num } @@ -312,7 +312,7 @@ export async function getBattleRanksByCity(configId: number, groupId: number, se export async function gvgBattleSeconds() { const { configId } = getGVGConfig(); const serverNames = await getAllServerName(); - let keys: { groupId: number, serverType: number, cityId: number }[] = [] + let keys: { groupKey: string, cityId: number }[] = [] for(let [_key, teamObj] of getGVGBattleMap()) { // 每5秒给据点上的人加积分 let teams = teamObj.findSettledPoint(); @@ -327,16 +327,16 @@ export async function gvgBattleSeconds() { let dicArea = gameData.gvgArea.get(areaId); let teams = teamObj.findTeamsByArea(areaId); let result = teams.map(team => new GVGTeamSpineInMap(team, serverNames)); - await sendMessageToGVGAreaWithSuc(teamObj.groupId, teamObj.serverType, areaId, PUSH_ROUTE.GVG_AREA_SPINE_CHANGE, { cityId: dicArea.cityId, areaId, spines: result }); + await sendMessageToGVGAreaWithSuc(teamObj.groupKey, areaId, PUSH_ROUTE.GVG_AREA_SPINE_CHANGE, { cityId: dicArea.cityId, areaId, spines: result }); - let index = keys.findIndex(cur => cur.cityId == dicArea.cityId && cur.groupId == teamObj.groupId && cur.serverType == teamObj.serverType); - if(index == -1) keys.push({ groupId: teamObj.groupId, serverType: teamObj.serverType, cityId: dicArea.cityId }); + let index = keys.findIndex(cur => cur.cityId == dicArea.cityId && cur.groupKey == teamObj.groupKey); + if(index == -1) keys.push({ groupKey: teamObj.groupKey, cityId: dicArea.cityId }); } } - for(let { groupId, serverType, cityId } of keys) { - let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupId, serverType, cityId }); + for(let { groupKey, cityId } of keys) { + let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupKey, cityId }); let rawRanks = await r.getRankByRange(); let ranks = rawRanks.map(obj => { if(obj instanceof LeagueRankInfo) { @@ -344,7 +344,7 @@ export async function gvgBattleSeconds() { } return obj }) - await sendMessageToGVGCityWithSuc(groupId, serverType, cityId, PUSH_ROUTE.GVG_CITY_RANK_UPDATE, { cityId, ranks }); + await sendMessageToGVGCityWithSuc(groupKey, cityId, PUSH_ROUTE.GVG_CITY_RANK_UPDATE, { cityId, ranks }); } @@ -357,22 +357,22 @@ export async function gvgBattleEnd() { // 城池占领情况 let keys = await findKeys(`${REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY}:${configId}:`); let rankKeys = keys.map(key => { - let [,, _groupId, _serverType, _cityId] = key.split(':'); - return { groupId: parseInt(_groupId), serverType: parseInt(_serverType), cityId: parseInt(_cityId) }; + let [,, groupKey, _cityId] = key.split(':'); + return { groupKey, cityId: parseInt(_cityId) }; }).sort((a, b) => b.cityId - a.cityId); - for(let { groupId, serverType, cityId } of rankKeys) { + for(let { groupKey, cityId } of rankKeys) { let dicCity = gameData.gvgCity.get(cityId); if(!dicCity) continue; - let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupId, serverType, cityId }); + let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupKey, cityId }); let ranks = await r.getRankByRange(); // 排名最高占领城池 for(let obj of ranks) { let rankInfo = obj; let cnt = guardLeagueCnt.get(rankInfo.code)||0; if(cnt < GVG.GVG_CITY_OCCUPIED_NUMBER) { - await GVGCityModel.guardCity(configId, groupId, serverType, cityId, rankInfo); + await GVGCityModel.guardCity(configId, groupKey, cityId, rankInfo); let dicCityAdd = gameData.gvgCityAdd.get(dicCity.cityType); await sendMailToLeagueByContent(MAIL_TYPE.GVG_GUARD_CITY_REWARD, rankInfo.code, { params: [dicCity.cityName], goods: dicCityAdd.occupyReward }); guardLeagueCnt.set(rankInfo.code, cnt + 1); @@ -384,11 +384,8 @@ export async function gvgBattleEnd() { // 联军排行榜发放奖励 let leagueKeys = await findKeys(`${REDIS_KEY.GVG_BATTLE_LEAGUE_RANK}:${configId}:`); for(let key of leagueKeys) { - let [,, _groupId, _serverType] = key.split(':'); - let groupId = parseInt(_groupId); - let serverType = parseInt(_serverType); - - let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupId, serverType }); + let [,, groupKey] = key.split(':'); + let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupKey }); let ranks = await r.getRankByRange(); // 联军排行榜发放奖励 for(let _obj of ranks) { @@ -401,10 +398,8 @@ export async function gvgBattleEnd() { // 个人排行榜发放奖励 let playerKeys = await findKeys(`${REDIS_KEY.GVG_BATTLE_RANK}:${configId}:`); for(let key of playerKeys) { - let [,, _groupId, _serverType] = key.split(':'); - let groupId = parseInt(_groupId); - let serverType = parseInt(_serverType); - let r = new Rank(REDIS_KEY.GVG_BATTLE_RANK, { configId, groupId, serverType }); + let [,, groupKey] = key.split(':'); + let r = new Rank(REDIS_KEY.GVG_BATTLE_RANK, { configId, groupKey }); let ranks = await r.getRankByRange(); for(let _obj of ranks) { @@ -420,10 +415,10 @@ export async function gvgBattleEnd() { // —————————— 推送相关 —————————— // // 推送 -export async function battleEndSendMessage(groupId: number, serverType: number, cityId: number, defenseTeam: GVGTeamType, attackTeam: GVGTeamType) { +export async function battleEndSendMessage(groupKey: string, cityId: number, defenseTeam: GVGTeamType, attackTeam: GVGTeamType) { let areaId = defenseTeam.curTeamBreak? defenseTeam.fromAreaId: defenseTeam.areaId; // 推送伤害 - await sendMessageToGVGAreaByTeamWithSuc(groupId, serverType, areaId, PUSH_ROUTE.GVG_TEAM_ATTACKED, { + await sendMessageToGVGAreaByTeamWithSuc(groupKey, areaId, PUSH_ROUTE.GVG_TEAM_ATTACKED, { cityId, areaId, attackType: 3, teams: [new GVGTeamInList(defenseTeam), new GVGTeamInList(attackTeam)] }); await pushTeamBeHurtMessage(defenseTeam, attackTeam); @@ -434,14 +429,14 @@ export async function battleEndSendMessage(groupId: number, serverType: number, export async function pushTeamBeHurtMessage(team: GVGTeamType, replaceTeam?: GVGTeamType) { if(team.curTeamBreak && team.originPointId > 0) { - await sendMessageToGVGAreaByTeamWithSuc(team.groupId, team.serverType, team.fromAreaId, PUSH_ROUTE.GVG_AREA_POINT_CHANGE, { + await sendMessageToGVGAreaByTeamWithSuc(team.groupKey, team.fromAreaId, PUSH_ROUTE.GVG_AREA_POINT_CHANGE, { cityId: team.cityId, areaId: team.fromAreaId, point: new GVGTeamInListOnPoint(team.originPointId, replaceTeam && !replaceTeam.curTeamBreak, replaceTeam) }); } await pushTeamMoveMessage(team); if(team.isRobot && team.isBroken) { - await sendMessageToGVGAreaByTeamWithSuc(team.groupId, team.serverType, team.fromAreaId, PUSH_ROUTE.GVG_PLAYER_LEAVE_AREA, { + await sendMessageToGVGAreaByTeamWithSuc(team.groupKey, team.fromAreaId, PUSH_ROUTE.GVG_PLAYER_LEAVE_AREA, { cityId: team.cityId, areaId: team.fromAreaId, teamCode: team.teamCode }); } @@ -450,12 +445,12 @@ export async function pushTeamBeHurtMessage(team: GVGTeamType, replaceTeam?: GVG export async function pushTeamMoveMessage(team: GVGTeamType) { if(team.fromAreaId != team.areaId) { if(team.fromAreaId > 0) { - await sendMessageToGVGAreaByTeamWithSuc(team.groupId, team.serverType, team.fromAreaId, PUSH_ROUTE.GVG_PLAYER_LEAVE_AREA, { + await sendMessageToGVGAreaByTeamWithSuc(team.groupKey, team.fromAreaId, PUSH_ROUTE.GVG_PLAYER_LEAVE_AREA, { cityId: team.cityId, areaId: team.fromAreaId, teamCode: team.teamCode }); } if(team.areaId > 0) { - await sendMessageToGVGAreaByTeamWithSuc(team.groupId, team.serverType, team.areaId, PUSH_ROUTE.GVG_PLAYER_AREA_ADD, { + await sendMessageToGVGAreaByTeamWithSuc(team.groupKey, team.areaId, PUSH_ROUTE.GVG_PLAYER_AREA_ADD, { cityId: team.cityId, areaId: team.fromAreaId, player: new GVGTeamInList(team) }); } diff --git a/game-server/app/services/gvg/gvgFightService.ts b/game-server/app/services/gvg/gvgFightService.ts index 7a61c2148..1ca84433f 100644 --- a/game-server/app/services/gvg/gvgFightService.ts +++ b/game-server/app/services/gvg/gvgFightService.ts @@ -28,7 +28,7 @@ import { Rank } from "../rankService"; import { findKeys, getAllServerName, redisClient } from "../redisService"; import { combinePushItem } from "./gvgItemService"; import { addVestigeLeagueRankRec } from "./gvgRecService"; -import { getGroupIdOfServer, getGVGServerType } from "./gvgService"; +import { getGroupIdOfServer, getGroupKey, getGVGServerType } from "./gvgService"; // 备战期的遗迹和激战期的开始结束战斗时间 export function getFightTimeByPeriod(period: GVG_PERIOD, time?: number) { @@ -49,14 +49,14 @@ export function checkFightTime() { // 征战中原每天随机的遗迹点 export async function getVestiges(serverId: number) { - let groupId = await getGroupIdOfServer(serverId); + let groupKey = await getGroupKey(serverId); let serverType = await getGVGServerType(serverId); - let vestige = await GVGVestigeModel.getVestige(groupId); + let vestige = await GVGVestigeModel.getVestige(groupKey); if(!vestige) { let dicGVGVestige = gameData.gvgVestigeByServerType.get(serverType)||[]; let cnt = gameData.gvgVestigeCntByServerType.get(serverType)||0; let randResult = getRandEelm(dicGVGVestige, cnt); - vestige = await GVGVestigeModel.initTodayVestige(groupId, serverType, randResult); + vestige = await GVGVestigeModel.initTodayVestige(groupKey, randResult); } return vestige.vestiges||[]; } @@ -98,9 +98,9 @@ function randomRank(min: number, max: number, len: number) { } // 根据ranks获取oppPlayer显示数据 -export async function getOppPlayerByRanks(serverId: number, groupId: number, serverType: number, vestigeId: number, ranks: number[]) { +export async function getOppPlayerByRanks(serverId: number, groupKey: string, vestigeId: number, ranks: number[]) { let serverNames = await getAllServerName(); - let opps = await GVGVestigeRankModel.findByRanks(groupId, serverType, vestigeId, ranks); + let opps = await GVGVestigeRankModel.findByRanks(groupKey, vestigeId, ranks); let roleIds = opps.map(cur => cur.roleId); let roles = await RoleModel.findByRoleIds(roleIds, 'roleId roleName head frame spine heads frames spines title lv guildName serverId updatedAt') let dicRankMap = gameData.gvgVestige.get(vestigeId); @@ -171,19 +171,19 @@ export function isRobot(roleId: string) { return roleId.startsWith('robot'); } -export async function checkVestigeOppStatus(configId: number, groupId: number, serverType: number, vestigeId: number, roleId: string, myRank: number, targetRoleId: string, rank: number) { +export async function checkVestigeOppStatus(configId: number, groupKey: string, vestigeId: number, roleId: string, myRank: number, targetRoleId: string, rank: number) { - let myData = await getMyVestigeRank(configId, groupId, serverType, vestigeId, roleId); + let myData = await getMyVestigeRank(configId, groupKey, vestigeId, roleId); if(!myData || myData.rank != myRank) return VESTIGE_OPP_STATUS.MY_RANK_CHANGE; if(isRobot(targetRoleId)) { - let targetData = await GVGVestigeRankModel.findByRank(configId, groupId, serverType, vestigeId, rank); + let targetData = await GVGVestigeRankModel.findByRank(configId, groupKey, vestigeId, rank); if(targetData) return VESTIGE_OPP_STATUS.OPP_RANK_CHANGE; } else { let targetData = await GVGVestigeRankModel.findByRole(vestigeId, targetRoleId); if(targetData?.rank != rank) return VESTIGE_OPP_STATUS.OPP_RANK_CHANGE; } - let lockResult = await GVGVestigeLockModel.chooseOppLock(groupId, serverType, vestigeId, rank, configId, roleId, targetRoleId); + let lockResult = await GVGVestigeLockModel.chooseOppLock(groupKey, vestigeId, rank, configId, roleId, targetRoleId); if(!lockResult) return VESTIGE_OPP_STATUS.OPP_IS_LOCKED; return VESTIGE_OPP_STATUS.BATTLE; @@ -314,7 +314,7 @@ export function calBreakGoods(vestige: number, historyRank: number, rank: number } // 玩家当天的驻扎记录,没有的话就创建一个 -export async function getMyVestigeRank(configId: number, groupId: number, serverType: number, vestigeId: number, roleId: string, myLeague?: GVGLeagueType) { +export async function getMyVestigeRank(configId: number, groupKey: string, vestigeId: number, roleId: string, myLeague?: GVGLeagueType) { let myVestigeRank = await GVGVestigeRankModel.findByRole(vestigeId, roleId); // 我在这个遗迹的排名 if(!myVestigeRank) { @@ -324,31 +324,31 @@ export async function getMyVestigeRank(configId: number, groupId: number, server myLeague = await GVGLeagueModel.findLeagueByGuild(role.guildCode); if(!myLeague) return null } - myVestigeRank = await GVGVestigeRankModel.initRank(configId, vestigeId, groupId, serverType, role, myLeague.leagueCode, oppRanks ); + myVestigeRank = await GVGVestigeRankModel.initRank(configId, vestigeId, groupKey, role, myLeague.leagueCode, oppRanks ); } return myVestigeRank; } // 保存排行榜 export async function saveScoreToRank(rec: GVGVestigeRecType) { - await savePlayerRank(rec.configId, rec.groupId, rec.serverType, rec.vestigeId, rec.attackInfo); - await savePlayerRank(rec.configId, rec.groupId, rec.serverType, rec.vestigeId, rec.defenseInfo); + await savePlayerRank(rec.configId, rec.groupKey, rec.vestigeId, rec.attackInfo); + await savePlayerRank(rec.configId, rec.groupKey, rec.vestigeId, rec.defenseInfo); } export function getDayKeyInfo() { return moment().format('YYMMDD'); } -export async function savePlayerRank(configId: number, groupId: number, serverType: number, vestigeId: number, playerInfo: Partial) { +export async function savePlayerRank(configId: number, groupKey: string, vestigeId: number, playerInfo: Partial) { if(playerInfo.isRobot) return let dicRankMap = gameData.gvgVestige.get(vestigeId); let newRank = dicRankMap?.get(playerInfo.newRank)?.score||0; let oldRank = dicRankMap?.get(playerInfo.oldRank)?.score||0; - let myScore = await GVGVestigeSumRankModel.incScore(playerInfo.roleId, playerInfo.leagueCode, configId, groupId, serverType, newRank - oldRank); - let r1 = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, { serverType, groupId, day: getDayKeyInfo() }); + let myScore = await GVGVestigeSumRankModel.incScore(playerInfo.roleId, playerInfo.leagueCode, configId, groupKey, newRank - oldRank); + let r1 = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, { groupKey, day: getDayKeyInfo() }); await r1.setRankWithRoleInfo(playerInfo.roleId, myScore.score, myScore.updatedAt.getTime()); - let leagueScore = await GVGVestigeLeagueRankModel.incScore(configId, playerInfo.leagueCode, groupId, serverType, newRank - oldRank); - let r2 = new Rank(REDIS_KEY.GVG_VESTIGE_LEAGUE, { serverType, groupId, day: getDayKeyInfo() }); + let leagueScore = await GVGVestigeLeagueRankModel.incScore(configId, playerInfo.leagueCode, groupKey, newRank - oldRank); + let r2 = new Rank(REDIS_KEY.GVG_VESTIGE_LEAGUE, { groupKey, day: getDayKeyInfo() }); await r2.setRankWithLeagueInfo(playerInfo.leagueCode, leagueScore.score, leagueScore.updatedAt.getTime()); } @@ -389,23 +389,19 @@ export async function saveVestigeRankSchedule() { let day = getDayKeyInfo(); let keys = await findKeys(`${REDIS_KEY.GVG_VESTIGE_LEAGUE}:${day}:`); for(let key of keys) { - let [,, _groupId, _serverType] = key.split(':'); - let groupId = parseInt(_groupId); - let serverType = parseInt(_serverType); - let r = new Rank(REDIS_KEY.GVG_VESTIGE_LEAGUE, { groupId, serverType, day}); + let [,, groupKey] = key.split(':'); + let r = new Rank(REDIS_KEY.GVG_VESTIGE_LEAGUE, { groupKey, day}); let ranks = await r.getRankByRangeRaw(); - await GVGVestigeLeagueRankModel.saveRank(groupId, serverType, ranks); + await GVGVestigeLeagueRankModel.saveRank(groupKey, ranks); await addVestigeLeagueRankRec(config.configId, ranks); } let memberKeys = await findKeys(`${REDIS_KEY.GVG_VESTIGE_MEMBER_ALL}:${day}:`); for(let key of memberKeys) { - let [,, _groupId, _serverType] = key.split(':'); - let groupId = parseInt(_groupId); - let serverType = parseInt(_serverType); - let r = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, { groupId, serverType, day}); + let [,, groupKey] = key.split(':'); + let r = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, { groupKey, day}); let ranks = await r.getRankByRangeRaw(); - await GVGVestigeSumRankModel.saveRank(groupId, serverType, ranks); + await GVGVestigeSumRankModel.saveRank(groupKey, ranks); } let playerSumRanks = await GVGVestigeSumRankModel.findAllScores(); await GVGUserDataModel.addVestigeScores(config.configId, playerSumRanks); diff --git a/game-server/app/services/gvg/gvgService.ts b/game-server/app/services/gvg/gvgService.ts index 7ddf4fdd0..521181ad8 100644 --- a/game-server/app/services/gvg/gvgService.ts +++ b/game-server/app/services/gvg/gvgService.ts @@ -292,4 +292,14 @@ export async function getLeagueRankBox(configId: number, leagueCode: string, rol let canReceivePlayerRanks = await GVGVestigeSumRankModel.getCanReceiveRanks(configId, roleId); let { canReceiveBox } = calVestigeLeagueBoxRewards(canReceiveLeagueRanks, canReceivePlayerRanks); return { canReceiveBox } +} + +export async function getGroupKey(serverId: number) { + let serverType = await getGVGServerType(serverId); + if(serverType == GVG_SERVER_TYPE.SINGLE) { + return `s${serverId}`; + } else { + let groupId = await getGroupIdOfServer(serverId); + return `g${groupId}`; + } } \ No newline at end of file diff --git a/game-server/app/services/pushService.ts b/game-server/app/services/pushService.ts index 5d9b32ff2..c26474fec 100644 --- a/game-server/app/services/pushService.ts +++ b/game-server/app/services/pushService.ts @@ -61,21 +61,21 @@ export async function sendMessageToGuild(guildCode: string, route: string, data: await pinus.app.rpc.chat.chatRemote.pushMessage.toServer(channelSid, roomId, route, data); } -export async function sendMessageToGVGAreaWithSuc(groupId: number, serverType: number, areaId: number, route: string, data: any) { - let channelSid = await getGVGAreaChannelSid(groupId, serverType, areaId); - let roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREAS, `${groupId}_${serverType}_${areaId}`); +export async function sendMessageToGVGAreaWithSuc(groupKey: string, areaId: number, route: string, data: any) { + let channelSid = await getGVGAreaChannelSid(groupKey, areaId); + let roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREAS, `${groupKey}_${areaId}`); await pinus.app.rpc.chat.chatRemote.pushMessage.toServer(channelSid, roomId, route, resResult(STATUS.SUCCESS, data)); } -export async function sendMessageToGVGAreaByTeamWithSuc(groupId: number, serverType: number, areaId: number, route: string, data: any) { - let channelSid = await getGVGAreaTeamChannelSid(groupId, serverType, areaId); - let roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREA_BY_TEAM, `${groupId}_${serverType}_${areaId}`); +export async function sendMessageToGVGAreaByTeamWithSuc(groupKey: string, areaId: number, route: string, data: any) { + let channelSid = await getGVGAreaTeamChannelSid(groupKey, areaId); + let roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREA_BY_TEAM, `${groupKey}_${areaId}`); await pinus.app.rpc.chat.chatRemote.pushMessage.toServer(channelSid, roomId, route, resResult(STATUS.SUCCESS, data)); } -export async function sendMessageToGVGCityWithSuc(groupId: number, serverType: number, cityId: number, route: string, data: any) { - let channelSid = await getGVGCityTeamChannelSid(groupId, serverType, cityId); - let roomId = groupRoomId(CHANNEL_PREFIX.GVG_CITY, `${groupId}_${serverType}_${cityId}`); +export async function sendMessageToGVGCityWithSuc(groupKey: string, cityId: number, route: string, data: any) { + let channelSid = await getGVGCityTeamChannelSid(groupKey, cityId); + let roomId = groupRoomId(CHANNEL_PREFIX.GVG_CITY, `${groupKey}_${cityId}`); await pinus.app.rpc.chat.chatRemote.pushMessage.toServer(channelSid, roomId, route, resResult(STATUS.SUCCESS, data)); } diff --git a/game-server/app/services/rankService.ts b/game-server/app/services/rankService.ts index e32079b07..9701127d2 100644 --- a/game-server/app/services/rankService.ts +++ b/game-server/app/services/rankService.ts @@ -1183,9 +1183,9 @@ export async function setRankRedisFromDb(type: string, args?: { serverId?: numbe } } else if (type == REDIS_KEY.GVG_VESTIGE_MEMBER_ALL) { let ranks = await GVGVestigeSumRankModel.findRankByGroupId(); - for(let { _id: { groupId, serverType }, arr, roleIds } of ranks) { + for(let { _id: groupKey, arr, roleIds } of ranks) { let roles = await RoleModel.findByRoleIds(roleIds, ROLE_SELECT.RANK); - let r = new Rank(type, { groupId, serverType, day: getDayKeyInfo() }); + let r = new Rank(type, { groupKey, day: getDayKeyInfo() }); r.setIsInit(true); for(let { roleId, score, updatedAt } of arr) { let role = roles.find(cur => cur.roleId == roleId); @@ -1196,9 +1196,9 @@ export async function setRankRedisFromDb(type: string, args?: { serverId?: numbe } } else if (type == REDIS_KEY.GVG_VESTIGE_LEAGUE) { let ranks = await GVGVestigeLeagueRankModel.findRank(); - for(let { _id: { groupId, serverType }, arr, leagueCodes } of ranks) { + for(let { _id: groupKey, arr, leagueCodes } of ranks) { let leagues = await GVGLeagueModel.findByCodes(leagueCodes); - let r = new Rank(type, { groupId, serverType, day: getDayKeyInfo() }); + let r = new Rank(type, { groupKey, day: getDayKeyInfo() }); r.setIsInit(true); for(let { leagueCode, score, updatedAt } of arr) { let league = leagues.find(cur => cur.leagueCode == leagueCode); diff --git a/game-server/app/services/redisService.ts b/game-server/app/services/redisService.ts index d6d023aa0..5be3fb55e 100644 --- a/game-server/app/services/redisService.ts +++ b/game-server/app/services/redisService.ts @@ -706,8 +706,8 @@ export async function getGVGHistoryAreas(roleId: string) { return areaIds.split('&'); } -export async function addGVGHistoryAreas(roleId: string, groupId: number, serverType: number, areaIds: number[]) { - let key = areaIds.map(areaId => `${groupId}_${serverType}_${areaId}`).join('&'); +export async function addGVGHistoryAreas(roleId: string, groupKey: string, areaIds: number[]) { + let key = areaIds.map(areaId => `${groupKey}_${areaId}`).join('&'); const result = await redisClient().hsetAsync(REDIS_KEY.GVG_HISTORY_AREA, roleId, key); return result; } @@ -728,8 +728,8 @@ export async function getGVGHistoryAreaTeam(roleId: string) { return channelName } -export async function addGVGHistoryAreaTeam(roleId: string, groupId: number, serverType: number, areaId: number) { - const result = await redisClient().hsetAsync(REDIS_KEY.GVG_HISTORY_AREA_TEAM, roleId, `${groupId}_${serverType}_${areaId}`); +export async function addGVGHistoryAreaTeam(roleId: string, groupKey: string, areaId: number) { + const result = await redisClient().hsetAsync(REDIS_KEY.GVG_HISTORY_AREA_TEAM, roleId, `${groupKey}_${areaId}`); return result; } @@ -749,8 +749,8 @@ export async function getGVGHistoryCityTeam(roleId: string) { return channelName } -export async function addGVGHistoryCityTeam(roleId: string, groupId: number, serverType: number, cityId: number) { - const result = await redisClient().hsetAsync(REDIS_KEY.GVG_HISTORY_CITY, roleId, `${groupId}_${serverType}_${cityId}`); +export async function addGVGHistoryCityTeam(roleId: string, groupKey: string, cityId: number) { + const result = await redisClient().hsetAsync(REDIS_KEY.GVG_HISTORY_CITY, roleId, `${groupKey}_${cityId}`); return result; } diff --git a/game-server/config/servers.ts b/game-server/config/servers.ts index 6aab05235..b3fd08043 100644 --- a/game-server/config/servers.ts +++ b/game-server/config/servers.ts @@ -41,7 +41,6 @@ module.exports = { ], 'guild': [ { 'id': 'guild-server-1', 'host': '127.0.0.1', 'port': 6057, "args": " --inspect=9239" }, - { 'id': 'guild-server-2', 'host': '127.0.0.1', 'port': 6058, "args": " --inspect=9240" } ], 'activity': [ { 'id': 'activity-server-1', 'host': '127.0.0.1', 'port': 6059, "args": " --inspect=9241" }, diff --git a/shared/db/GVGBattleRec.ts b/shared/db/GVGBattleRec.ts index 041f75e5b..4506b279d 100644 --- a/shared/db/GVGBattleRec.ts +++ b/shared/db/GVGBattleRec.ts @@ -71,10 +71,7 @@ export default class GVGBattleRec extends BaseModel { configId: number; // 赛季 @prop({ required: true }) - groupId: number; // 战区 - - @prop({ required: true }) - serverType: number; // 1-单服 2-跨服 + groupKey: string; // 1-单服 2-跨服 @prop({ required: true }) warId: number; // 关卡id @@ -91,9 +88,9 @@ export default class GVGBattleRec extends BaseModel { @prop({ required: true }) battleEndTime: number; - public static async createRec(configId: number, groupId: number, serverType: number, warId: number, attackTeam: GVGTeamType, defenseTeam: GVGTeamType) { + public static async createRec(configId: number, groupKey: string, warId: number, attackTeam: GVGTeamType, defenseTeam: GVGTeamType) { const battleCode = genCode(8); - const result: GVGBattleRecType = await GVGBattleRecModel.findOneAndUpdate({ battleCode }, { $set: { configId, groupId, serverType, warId, attackTeam, defenseTeam, isSuccess: false } }, { new: true, upsert: true }).lean(); + const result: GVGBattleRecType = await GVGBattleRecModel.findOneAndUpdate({ battleCode }, { $set: { configId, groupKey, warId, attackTeam, defenseTeam, isSuccess: false } }, { new: true, upsert: true }).lean(); return result; } diff --git a/shared/db/GVGCity.ts b/shared/db/GVGCity.ts index 693ba71a7..13e5c3806 100644 --- a/shared/db/GVGCity.ts +++ b/shared/db/GVGCity.ts @@ -11,17 +11,14 @@ class Player { teamCnt: number; } -@index({ configId: 1, cityId: 1, groupId: 1, serverType: 1 }) +@index({ configId: 1, cityId: 1, groupKey: 1 }) // GVGCity 类,继承自 BaseModel export default class GVGCity extends BaseModel { @prop({ required: true, default: 1 }) configId: number; // config唯一id - @prop({ required: true, default: 1 }) - groupId: number; // 战区 - - @prop({ required: true, default: 1 }) - serverType: number; // 1-单服 2-跨服 + @prop({ required: true }) + groupKey: string; // 战区 @prop({ required: true }) cityId: number; // 城池id @@ -45,20 +42,20 @@ export default class GVGCity extends BaseModel { userCnt: number; // 城池人数 // 通过 cityId 获取城市 - public static async findByCityId(configId: number, groupId: number, serverType: number, cityId: number) { - const city: GVGCityType = await GVGCityModel.findOne({ configId, groupId, serverType, cityId }).lean(); + public static async findByCityId(configId: number, groupKey: string, cityId: number) { + const city: GVGCityType = await GVGCityModel.findOne({ configId, groupKey, cityId }).lean(); return city; } // 添加人数 - public static async increasePlayer(configId: number, groupId: number, serverType: number, cityId: number, roleId: string, leagueCode: string, teamCnt: number) { - const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId, groupId, serverType, cityId, userCnt: { $lt: 200 } }, { $inc: { userCnt: 1 }, $push: { players: { roleId, leagueCode, teamCnt } }}, { new: true, upsert: true }).lean(); + public static async increasePlayer(configId: number, groupKey: string, cityId: number, roleId: string, leagueCode: string, teamCnt: number) { + const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId, groupKey, cityId, userCnt: { $lt: 200 } }, { $inc: { userCnt: 1 }, $push: { players: { roleId, leagueCode, teamCnt } }}, { new: true, upsert: true }).lean(); return city; } // 减少人数 - public static async decreasePlayer(configId: number, groupId: number, serverType: number, cityId: number, roleId: string) { - const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId, groupId, serverType, cityId, 'players.roleId': roleId }, { $inc: { userCnt: -1 }, $pull: { players: { roleId } }}, { new: true, upsert: true }).lean(); + public static async decreasePlayer(configId: number, groupKey: string, cityId: number, roleId: string) { + const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId, groupKey, cityId, 'players.roleId': roleId }, { $inc: { userCnt: -1 }, $pull: { players: { roleId } }}, { new: true, upsert: true }).lean(); return city; } @@ -74,9 +71,9 @@ export default class GVGCity extends BaseModel { } // 查询联军驻守情况 - public static async findGuardCity(configId: number, groupId: number, serverType: number, select = '') { - let cities: GVGCityType[] = await GVGCityModel.find({ configId: configId + 1, groupId, serverType, hasGuard: true }).select(select).lean(); - if(cities.length == 0) cities = await GVGCityModel.find({ configId, groupId, serverType, hasGuard: true }).select(select).lean(); + public static async findGuardCity(configId: number, groupKey: string, select = '') { + let cities: GVGCityType[] = await GVGCityModel.find({ configId: configId + 1, groupKey, hasGuard: true }).select(select).lean(); + if(cities.length == 0) cities = await GVGCityModel.find({ configId, groupKey, hasGuard: true }).select(select).lean(); return cities } @@ -87,15 +84,15 @@ export default class GVGCity extends BaseModel { } // 占领城池 - public static async guardCity(configId: number, groupId: number, serverType: number, cityId: number, league: LeagueRankInfo) { - const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId: configId + 1, cityId, groupId, serverType }, { $set: { + public static async guardCity(configId: number, groupKey: string, cityId: number, league: LeagueRankInfo) { + const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId: configId + 1, cityId, groupKey }, { $set: { hasGuard: true, guardLeague: league.code, guardLeagueName: league.name, guardLeagueIcon: league.icon } }, { upsert: true, new: true }).lean(); return city; } - public static async findByConfig(configId: number, groupId: number, serverType: number) { - const cities: GVGCityType[] = await GVGCityModel.find({ configId, groupId, serverType, hasGuard: true }).lean(); + public static async findByConfig(configId: number, groupKey: string) { + const cities: GVGCityType[] = await GVGCityModel.find({ configId, groupKey, hasGuard: true }).lean(); return cities } } diff --git a/shared/db/GVGCityAreaPoint.ts b/shared/db/GVGCityAreaPoint.ts index dad71bd74..5796d2add 100644 --- a/shared/db/GVGCityAreaPoint.ts +++ b/shared/db/GVGCityAreaPoint.ts @@ -2,17 +2,14 @@ import BaseModel from "./BaseModel"; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; import { GVGTeamType } from "./GVGTeam"; -@index({ configId: 1, pontId: 1, groupId: 1, serverType: 1 }) +@index({ configId: 1, pontId: 1, groupKey: 1 }) // GVGCityAreaPoint 类,继承自 BaseModel export default class GVGCityAreaPoint extends BaseModel { @prop({ required: true, default: 1 }) configId: number; // config唯一id @prop({ required: true, default: 1 }) - groupId: number; // 战区 - - @prop({ required: true, default: 1 }) - serverType: number; // 1-单服 2-跨服 + groupKey: string; // 战区 @prop({ required: true }) cityId: number; // 城池id @@ -39,22 +36,22 @@ export default class GVGCityAreaPoint extends BaseModel { teamCode: string; // 玩家的编队 public static async settlePoint(cityId: number, areaId: number, pointId: number, team: GVGTeamType) { - let { configId, groupId, serverType, leagueCode, leagueName, roleId, roleName, teamCode } = team; - await GVGCityAreaPointModel.findOneAndUpdate({ configId, groupId, serverType, pointId }, { $setOnInsert: { teamCode: '' }}, { upsert: true }); + let { configId, groupKey, leagueCode, leagueName, roleId, roleName, teamCode } = team; + await GVGCityAreaPointModel.findOneAndUpdate({ configId, groupKey, pointId }, { $setOnInsert: { teamCode: '' }}, { upsert: true }); let result: GVGCityAreaPointType = await GVGCityAreaPointModel.findOneAndUpdate( - { configId, groupId, serverType, pointId }, + { configId, groupKey, pointId }, { $set: { cityId, areaId, leagueCode, leagueName, roleId, roleName, teamCode } }, { new: true }).lean(); return result; } - public static async leavePoint(configId: number, groupId: number, serverType: number, pointId: number) { - let result: GVGCityAreaPointType = await GVGCityAreaPointModel.findOneAndUpdate({ configId, groupId, serverType, pointId }, { $set: { teamCode: '' }}, { new: true }).lean(); + public static async leavePoint(configId: number, groupKey: string, pointId: number) { + let result: GVGCityAreaPointType = await GVGCityAreaPointModel.findOneAndUpdate({ configId, groupKey, pointId }, { $set: { teamCode: '' }}, { new: true }).lean(); return result; } - public static async findByConfig(configId: number, groupId: number, serverType: number) { - let result: GVGCityAreaPointType[] = await GVGCityAreaPointModel.find({ configId, groupId, serverType }).lean(); + public static async findByConfig(configId: number, groupKey: string) { + let result: GVGCityAreaPointType[] = await GVGCityAreaPointModel.find({ configId, groupKey }).lean(); return result } } diff --git a/shared/db/GVGRec.ts b/shared/db/GVGRec.ts index 75866c5b6..a59511a02 100644 --- a/shared/db/GVGRec.ts +++ b/shared/db/GVGRec.ts @@ -10,6 +10,9 @@ export default class GVGRec extends BaseModel { @prop({ required: true, default: '' }) leagueCode: string; // 联军id + @prop({ required: false, default: '' }) + groupKey: string; // 战区 + @prop({ required: false, default: '' }) roleId: string; // 玩家id @@ -45,8 +48,8 @@ export default class GVGRec extends BaseModel { } // 查询城池战报 - public static async findBattleRecByCity(configId: number, groupId: number, serverType: number, cityId: number) { - const result: GVGRecType[] = await GVGRecModel.find({ cityId, configId, groupId, serverType, type: GVG_REC_TYPE.BATTLE_BY_CITY }, { _id: 0, recId: 1, params: 1, createTime: 1 }).sort({ createTime: -1 }).limit(50).lean(); + public static async findBattleRecByCity(configId: number, groupKey: string, cityId: number) { + const result: GVGRecType[] = await GVGRecModel.find({ cityId, configId, groupKey, type: GVG_REC_TYPE.BATTLE_BY_CITY }, { _id: 0, recId: 1, params: 1, createTime: 1 }).sort({ createTime: -1 }).limit(50).lean(); return result; } diff --git a/shared/db/GVGTeam.ts b/shared/db/GVGTeam.ts index a62e62f5e..264c851ad 100644 --- a/shared/db/GVGTeam.ts +++ b/shared/db/GVGTeam.ts @@ -105,10 +105,7 @@ export default class GVGTeam extends BaseModel { lineupCe: number; @prop({ required: true }) - groupId: number; // 战区 - - @prop({ required: true }) - serverType: number; // 单服还是跨服 + groupKey: string; // 战区 @prop({ required: true, default: false }) isRobot: boolean; // 是否是机器人 @@ -136,8 +133,8 @@ export default class GVGTeam extends BaseModel { } // 玩家切换城池更新队伍信息 - public static async enterCity(roleId: string, cityId: number, areaId: number, groupId: number, serverType: number) { - const res = await GVGTeamModel.updateMany({ roleId }, { cityId, areaId, fromAreaId: areaId, pointId: 0, groupId, serverType }).lean(); + public static async enterCity(roleId: string, cityId: number, areaId: number, groupKey: string) { + const res = await GVGTeamModel.updateMany({ roleId }, { cityId, areaId, fromAreaId: areaId, pointId: 0, groupKey }).lean(); return !!res['ok']; } @@ -200,17 +197,17 @@ export default class GVGTeam extends BaseModel { return await GVGTeamModel.findByRole(roleId, '-_id'); } - public static async findRobotTeams(groupId: number, serverType: number, cityId: number) { - const team: GVGTeamType[] = await GVGTeamModel.find({ groupId, serverType, cityId, isRobot: true }).lean(); + public static async findRobotTeams(groupKey: string, cityId: number) { + const team: GVGTeamType[] = await GVGTeamModel.find({ groupKey, cityId, isRobot: true }).lean(); return team; } // 每赛季初刷新机器人 - public static async initRobots(configId: number, groupId: number, serverType: number, cityId: number, dicPoints: DicGVGAreaPoint[]) { + public static async initRobots(configId: number, groupKey: string, cityId: number, dicPoints: DicGVGAreaPoint[]) { await GVGTeamModel.bulkWrite(dicPoints.map(({ pointId, areaId, name, head, spine, ce, durability }) => { return { updateOne: { - filter: { groupId, serverType, cityId, areaId, pointId }, + filter: { groupKey, cityId, areaId, pointId }, update: { $setOnInsert: { teamCode: genCode(8), maxDurability: durability, roleName: name, head, spine, frame: EXTERIOR.EXTERIOR_FACECASE, lineupCe: ce, isRobot: true, isBroken: false, startMoveTime: 0, stopMoveTime: 0, guildCode: '', leagueCode: '', leagueName: '', fromAreaId: areaId, @@ -219,20 +216,20 @@ export default class GVGTeam extends BaseModel { } } })); - return await this.findRobotTeams(groupId, serverType, cityId); + return await this.findRobotTeams(groupKey, cityId); } - public static async findCatapultTeams(groupId: number, serverType: number, cityId: number) { - const team: GVGTeamType[] = await GVGTeamModel.find({ groupId, serverType, cityId, isRobot: true, isCatapult: true }).lean(); + public static async findCatapultTeams(groupKey: string, cityId: number) { + const team: GVGTeamType[] = await GVGTeamModel.find({ groupKey, cityId, isRobot: true, isCatapult: true }).lean(); return team; } // 生成投石车 - public static async initCatapult(configId: number, groupId: number, serverType: number, cityId: number, leagueCode: string, leagueName: string, areaIds: number[], atk: number, durability: number) { + public static async initCatapult(configId: number, groupKey: string, cityId: number, leagueCode: string, leagueName: string, areaIds: number[], atk: number, durability: number) { await GVGTeamModel.bulkWrite(areaIds.map(areaId => { return { updateOne: { - filter: { groupId, serverType, cityId, areaId }, + filter: { groupKey, cityId, areaId }, update: { $setOnInsert: { teamCode: genCode(8), maxDurability: durability, captapultAtk: atk, leagueCode, leagueName, roleName: GVG.GVG_CATAPULT_NAME, head: GVG.GVG_CATAPULT_HEAD, spine: GVG.GVG_CATAPULT_SPINE, frame: EXTERIOR.EXTERIOR_FACECASE, lineupCe: GVG.GVG_CATAPULT_CE, @@ -243,7 +240,7 @@ export default class GVGTeam extends BaseModel { } } })); - return await this.findCatapultTeams(groupId, serverType, cityId); + return await this.findCatapultTeams(groupKey, cityId); } // 攻击方攻击cd @@ -299,8 +296,8 @@ export default class GVGTeam extends BaseModel { } } - public static async findByAreaId(groupId: number, serverType: number, cityId: number, areaId: number) { - const team: GVGTeamType[] = await GVGTeamModel.find({ groupId, serverType, cityId, areaId, stopMoveTime: { $lte: nowSeconds() }, isBroken: false }).lean(); + public static async findByAreaId(groupKey: string, cityId: number, areaId: number) { + const team: GVGTeamType[] = await GVGTeamModel.find({ groupKey, cityId, areaId, stopMoveTime: { $lte: nowSeconds() }, isBroken: false }).lean(); return team; } @@ -310,8 +307,8 @@ export default class GVGTeam extends BaseModel { } // 这个编队上是否已经有队伍了 - public static async checkPoint(configId: number, groupId: number, serverType: number, pointId: number) { - return await GVGTeamModel.exists({ configId, groupId, serverType, pointId, isBroken: false }); + public static async checkPoint(configId: number, groupKey: string, pointId: number) { + return await GVGTeamModel.exists({ configId, groupKey, pointId, isBroken: false }); } // 投石车伤害 diff --git a/shared/db/GVGVestige.ts b/shared/db/GVGVestige.ts index e3d912729..f7c5899f1 100644 --- a/shared/db/GVGVestige.ts +++ b/shared/db/GVGVestige.ts @@ -14,10 +14,7 @@ class Vestige { export default class GVGVestige extends BaseModel { @prop({ required: true }) - groupId: number; // 战区id - - @prop({ required: true }) - type: number; // 1-单服 2-跨服 + groupKey: string; // 战区 @prop({ required: true, type: Vestige, _id: false }) vestiges: Vestige[]; // 今天的遗迹点 @@ -25,15 +22,15 @@ export default class GVGVestige extends BaseModel { @prop({ required: true }) day: number; // 每天5点 - public static async getVestige(groupId: number) { + public static async getVestige(groupKey: string) { let day = getZeroPoint(); - let result: GVGVestigeType = await GVGVestigeModel.findOne({ groupId, day }).lean(); + let result: GVGVestigeType = await GVGVestigeModel.findOne({ groupKey, day }).lean(); return result; } - public static async initTodayVestige(groupId: number, type: number, vestiges: Vestige[]) { + public static async initTodayVestige(groupKey: string, vestiges: Vestige[]) { let day = getZeroPoint(); - let result: GVGVestigeType = await GVGVestigeModel.findOneAndUpdate({ groupId, day }, { $setOnInsert: { type, vestiges } }, { new: true, upsert: true }).lean(); + let result: GVGVestigeType = await GVGVestigeModel.findOneAndUpdate({ groupKey, day }, { $setOnInsert: { vestiges } }, { new: true, upsert: true }).lean(); return result; } } diff --git a/shared/db/GVGVestigeLeagueRank.ts b/shared/db/GVGVestigeLeagueRank.ts index ef3c73e4c..54c2d76af 100644 --- a/shared/db/GVGVestigeLeagueRank.ts +++ b/shared/db/GVGVestigeLeagueRank.ts @@ -2,7 +2,7 @@ import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; import { DAY_TO_SECOND, getZeroPoint } from '../pubUtils/timeUtil'; -@index({ day: 1, groupId: 1, serverType: 1, score: 1 }) +@index({ day: 1, groupKey: 1, score: 1 }) @index({ leagueCode: 1 }) export default class GVGVestigeLeagueRank extends BaseModel { @@ -16,10 +16,7 @@ export default class GVGVestigeLeagueRank extends BaseModel { leagueCode: string; // 玩家id @prop({ required: true }) - groupId: number; // 战区id - - @prop({ required: true }) - serverType: number; // 1-单服 2-跨服 + groupKey: string; // 1-单服 2-跨服 @prop({ required: true }) score: number; // 得分 @@ -30,31 +27,31 @@ export default class GVGVestigeLeagueRank extends BaseModel { @prop({ required: true }) isReceived: boolean; // 是否领取过 - public static async incScore(configId: number, leagueCode: string, groupId: number, serverType: number, inc: number) { + public static async incScore(configId: number, leagueCode: string, groupKey: string, inc: number) { let today = getZeroPoint(); let result: GVGVestigeLeagueRankType = await GVGVestigeLeagueRankModel.findOneAndUpdate({ - day: today, groupId, serverType, leagueCode + day: today, groupKey, leagueCode }, { $inc: { score: inc }, $set: { configId }, $setOnInsert: { rank: 0, isReceived: false } }, { new: true, upsert: true }).lean(); return result; } // 排行榜 - public static async findRank(): Promise<{ _id: { groupId: number, serverType: number }, arr: { leagueCode: string, score: number, updatedAt: Date }[], leagueCodes: string[] }[]> { + public static async findRank(): Promise<{ _id: string, arr: { leagueCode: string, score: number, updatedAt: Date }[], leagueCodes: string[] }[]> { let today = getZeroPoint(); let ranks = await GVGVestigeLeagueRankModel.aggregate([ { $match: { day: today } }, { $group: { - _id: { groupId: "$groupId", serverType: "$serverType" }, + _id: "$groupKey", arr: { $push: { leagueCode: "$leagueCode", score: "$score", updatedAt: "$updatedAt" } }, leagueCodes: { $addToSet: "$leagueCode" } }}, ]); return ranks; } - public static async saveRank(groupId: number, serverType: number, ranks: { rank: number, field: string }[]) { + public static async saveRank(groupKey: string, ranks: { rank: number, field: string }[]) { let today = getZeroPoint(); await GVGVestigeLeagueRankModel.bulkWrite(ranks.map(({ field, rank }) => { - return { updateOne: { filter: { day: today, groupId, serverType, leagueCode: field }, update: { $set: { rank } }} } + return { updateOne: { filter: { day: today, groupKey, leagueCode: field }, update: { $set: { rank } }} } })); } diff --git a/shared/db/GVGVestigeLock.ts b/shared/db/GVGVestigeLock.ts index 2f700de5f..f0b8c6742 100644 --- a/shared/db/GVGVestigeLock.ts +++ b/shared/db/GVGVestigeLock.ts @@ -14,10 +14,7 @@ export default class GVGVestigeLock extends BaseModel { day: number; // 每天5点 @prop({ required: true }) - groupId: number; // 战区id - - @prop({ required: true }) - serverType: number; // 1-单服 2-跨服 + groupKey: string; // 1-单服 2-跨服 @prop({ required: true }) vestigeId: number; // 遗迹id @@ -34,26 +31,26 @@ export default class GVGVestigeLock extends BaseModel { @prop({ required: true }) defenseRoleId: string; // 防守玩家 - public static async chooseOppLock(groupId: number, serverType: number, vestigeId: number, rank: number, configId: number, attackRoleId: string, defenseRoleId: string ) { + public static async chooseOppLock(groupKey: string, vestigeId: number, rank: number, configId: number, attackRoleId: string, defenseRoleId: string ) { let day = getZeroPoint(); - await GVGVestigeLockModel.findOneAndUpdate({ day, groupId, serverType, vestigeId, rank }, { $setOnInsert: { configId, unlockTime: 0 } }, { upsert: true }); + await GVGVestigeLockModel.findOneAndUpdate({ day, groupKey, vestigeId, rank }, { $setOnInsert: { configId, unlockTime: 0 } }, { upsert: true }); let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({ - day, groupId, vestigeId, rank, unlockTime: { $lt: Date.now() } + day, groupKey, vestigeId, rank, unlockTime: { $lt: Date.now() } }, { $set: { unlockTime: Date.now() + GVG.GVG_VESTIGE_PREPARE_COUNTDOWN * 1000, attackRoleId, defenseRoleId } }, { new: true }).lean(); return result; } - public static async checkBattleLock(groupId: number, serverType: number, vestigeId: number, rank: number, attackRoleId: string) { + public static async checkBattleLock(groupKey: string, vestigeId: number, rank: number, attackRoleId: string) { let day = getZeroPoint(); let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({ - day, groupId, serverType, vestigeId, rank, attackRoleId, unlockTime: { $gt: Date.now() } + day, groupKey, vestigeId, rank, attackRoleId, unlockTime: { $gt: Date.now() } }, { $set: { unlockTime: Date.now() + GVG.GVG_VESTIGE_BATTLE_COUNTDOWN * 1000 } }, { new: true }).lean(); return result; } - public static async releaseLock(groupId: number, serverType: number, vestigeId: number, rank: number) { + public static async releaseLock(groupKey: string, vestigeId: number, rank: number) { let day = getZeroPoint(); - let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({ day, groupId, serverType, vestigeId, rank }, { $set: { unlockTime: 0 } }, { new: true }).lean(); + let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({ day, groupKey, vestigeId, rank }, { $set: { unlockTime: 0 } }, { new: true }).lean(); return result; } } diff --git a/shared/db/GVGVestigeRank.ts b/shared/db/GVGVestigeRank.ts index 4e9b4bf8c..d7e30d681 100644 --- a/shared/db/GVGVestigeRank.ts +++ b/shared/db/GVGVestigeRank.ts @@ -14,7 +14,7 @@ export class Lineup { ce: number; // 战力 } -@index({ day: 1, groupId: 1, serverType: 1, vestigeId: 1, rank: 1 }) +@index({ day: 1, groupKey: 1, vestigeId: 1, rank: 1 }) @index({ roleId: 1 }) export default class GVGVestigeRank extends BaseModel { @@ -25,14 +25,11 @@ export default class GVGVestigeRank extends BaseModel { day: number; // 每天5点 @prop({ required: true }) - groupId: number; // 战区id + groupKey: string; // 战区 @prop({ required: true }) vestigeId: number; // 遗迹id - @prop({ required: true }) - serverType: number; // 1-单服 2-跨服 - @prop({ required: true }) roleId: string; // 玩家 @@ -72,16 +69,16 @@ export default class GVGVestigeRank extends BaseModel { return result; } - public static async findByRank(configId: number, groupId: number, serverType: number, vestigeId: number, rank: number) { + public static async findByRank(configId: number, groupKey: string, vestigeId: number, rank: number) { let today = getZeroPoint(); - let result: GVGVestigeRankType = await GVGVestigeRankModel.findOne({ configId, groupId, serverType, day: today, vestigeId, rank }).lean(); + let result: GVGVestigeRankType = await GVGVestigeRankModel.findOne({ configId, groupKey, day: today, vestigeId, rank }).lean(); return result; } - public static async initRank(configId: number, vestigeId: number, groupId: number, serverType: number, role: RoleType, leagueCode: string, oppRanks: number[]) { + public static async initRank(configId: number, vestigeId: number, groupKey: string, role: RoleType, leagueCode: string, oppRanks: number[]) { let today = getZeroPoint(); let doc = new GVGVestigeRankModel(); - let update = Object.assign(doc.toJSON(), { role: role._id, configId, groupId, serverType, oppRanks, leagueCode }); + let update = Object.assign(doc.toJSON(), { role: role._id, configId, groupKey, oppRanks, leagueCode }); let result: GVGVestigeRankType = await GVGVestigeRankModel.findOneAndUpdate({ day: today, vestigeId, roleId: role.roleId }, { $setOnInsert: update }, { new: true, upsert: true }).lean(); return result; } @@ -92,9 +89,9 @@ export default class GVGVestigeRank extends BaseModel { return result; } - public static async findByRanks(groupId: number, serverType: number, vestigeId: number, ranks: number[]) { + public static async findByRanks(groupKey: string, vestigeId: number, ranks: number[]) { let today = getZeroPoint(); - let result: GVGVestigeRankType[] = await GVGVestigeRankModel.find({ day: today, vestigeId, groupId, serverType, rank: { $in: ranks } }) + let result: GVGVestigeRankType[] = await GVGVestigeRankModel.find({ day: today, vestigeId, groupKey, rank: { $in: ranks } }) .lean(); return result; } @@ -146,21 +143,21 @@ export default class GVGVestigeRank extends BaseModel { return result; } - public static async findRank(): Promise<{ _id: { groupId: number, vestigeId: number, serverType: number }, arr: { roleId: string, rank: number }[], roleIds: string[] }[]> { + public static async findRank(): Promise<{ _id: { groupKey: string, vestigeId: number }, arr: { roleId: string, rank: number }[], roleIds: string[] }[]> { let today = getZeroPoint(); let ranks = await GVGVestigeRankModel.aggregate([ { $match: { day: today } }, { $group: { - _id: { groupId: "$groupId", vestigeId: "$vestigeId", serverType: "$serverType" }, + _id: { groupKey: "$groupKey", vestigeId: "$vestigeId" }, arr: { $push: { roleId: "$roleId", rank: "$rank" } }, roleIds: { $addToSet: "$roleId" } }}, ]); return ranks; } - public static async findRankByVestige(groupId: number, serverType: number, vestigeId: number) { + public static async findRankByVestige(groupKey: string, vestigeId: number) { let today = getZeroPoint(); - let result: GVGVestigeRankType[] = await GVGVestigeRankModel.find({ day: today, vestigeId, groupId, serverType, rank: { $gt: 0 } }).sort({ rank: 1 }).select('roleId rank lineup').lean(); + let result: GVGVestigeRankType[] = await GVGVestigeRankModel.find({ day: today, vestigeId, groupKey, rank: { $gt: 0 } }).sort({ rank: 1 }).select('roleId rank lineup').lean(); return result; } } diff --git a/shared/db/GVGVestigeRec.ts b/shared/db/GVGVestigeRec.ts index 9825694fa..c8cae217c 100644 --- a/shared/db/GVGVestigeRec.ts +++ b/shared/db/GVGVestigeRec.ts @@ -17,7 +17,7 @@ class LeagueGood { } @index({ battleCode: 1 }) -@index({ groupId: 1, vestigeId: 1, rank: 1 }) +@index({ groupKey: 1, vestigeId: 1, rank: 1 }) export default class GVGVestigeRec extends BaseModel { @prop({ required: true }) @@ -36,10 +36,7 @@ export default class GVGVestigeRec extends BaseModel { configId: number; // 赛期 @prop({ required: true }) - groupId: number; // 战区id - - @prop({ required: true }) - serverType: number; // 战区id + groupKey: string; // 战区id @prop({ required: true }) vestigeId: number; // 遗迹id @@ -68,10 +65,10 @@ export default class GVGVestigeRec extends BaseModel { @prop({ required: true, default: false }) hasRpl: boolean; // 是否存在对应录像 - public static async createRec(configId: number, vestigeId: number, groupId: number, serverType: number, warId: number, attackInfo: OppPlayerInfo, defenseInfo: OppPlayerInfo, leagueGoods: LeagueGood[]) { + public static async createRec(configId: number, vestigeId: number, groupKey: string, warId: number, attackInfo: OppPlayerInfo, defenseInfo: OppPlayerInfo, leagueGoods: LeagueGood[]) { const battleCode = genCode(10); const result: GVGVestigeRecType = await GVGVestigeRecModel.findOneAndUpdate({ battleCode }, { - $set: { configId, vestigeId, groupId, serverType, attackRoleId: attackInfo.roleId, defenseRoleId: defenseInfo.roleId, warId, checkTime: Date.now(), attackInfo, defenseInfo, leagueGoods } + $set: { configId, vestigeId, groupKey, attackRoleId: attackInfo.roleId, defenseRoleId: defenseInfo.roleId, warId, checkTime: Date.now(), attackInfo, defenseInfo, leagueGoods } }, { new: true, upsert: true }).lean(); return result; } diff --git a/shared/db/GVGVestigeSumRank.ts b/shared/db/GVGVestigeSumRank.ts index ea4e0b23e..c2184870e 100644 --- a/shared/db/GVGVestigeSumRank.ts +++ b/shared/db/GVGVestigeSumRank.ts @@ -2,7 +2,7 @@ import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; import { getZeroPoint } from '../pubUtils/timeUtil'; -@index({ day: 1, groupId: 1, serverType: 1, score: 1 }) +@index({ day: 1, groupKey: 1, score: 1 }) @index({ roleId: 1 }) export default class GVGVestigeSumRank extends BaseModel { @@ -19,10 +19,7 @@ export default class GVGVestigeSumRank extends BaseModel { leagueCode: string; // 联军id @prop({ required: true }) - groupId: number; // 战区id - - @prop({ required: true }) - serverType: number; // 1-单服 2-跨服 + groupKey: string; // 战区id @prop({ required: true }) score: number; // 得分 @@ -33,21 +30,21 @@ export default class GVGVestigeSumRank extends BaseModel { @prop({ required: true }) isReceived: boolean; // 是否领取过 - public static async incScore(roleId: string, leagueCode: string, configId: number, groupId: number, serverType: number, inc: number) { + public static async incScore(roleId: string, leagueCode: string, configId: number, groupKey: string, inc: number) { let today = getZeroPoint(); let result: GVGVestigeSumRankType = await GVGVestigeSumRankModel.findOneAndUpdate({ - configId, day: today, groupId, serverType, roleId, leagueCode + configId, day: today, groupKey, roleId, leagueCode }, { $inc: { score: inc } , $setOnInsert: { rank: 0, isReceived: false } }, { new: true, upsert: true }).lean(); return result; } // 排行榜 - public static async findRankByGroupId(): Promise<{ _id: { groupId: number, serverType: number }, arr: { roleId: string, score: number, updatedAt: Date }[], roleIds: string[] }[]> { + public static async findRankByGroupId(): Promise<{ _id: string, arr: { roleId: string, score: number, updatedAt: Date }[], roleIds: string[] }[]> { let today = getZeroPoint(); let ranks = await GVGVestigeSumRankModel.aggregate([ { $match: { day: today } }, { $group: { - _id: { groupId: "$groupId", serverType: "$serverType" }, + _id: "$groupKey", arr: { $push: { roleId: "$roleId", score: "$score", updatedAt: "$updatedAt", leagueCode: "$leagueCode" } }, roleIds: { $addToSet: "$roleId" } }}, ]); @@ -64,10 +61,10 @@ export default class GVGVestigeSumRank extends BaseModel { return ranks; } - public static async saveRank(groupId: number, serverType: number, ranks: { rank: number, field: string }[]) { + public static async saveRank(groupKey: string, ranks: { rank: number, field: string }[]) { let today = getZeroPoint(); await GVGVestigeSumRankModel.bulkWrite(ranks.map(({ field, rank }) => { - return { updateOne: { filter: { day: today, groupId, serverType, roleId: field }, update: { $set: { rank } }} } + return { updateOne: { filter: { day: today, groupKey, roleId: field }, update: { $set: { rank } }} } })); } diff --git a/shared/domain/gvgField/gvgDb.ts b/shared/domain/gvgField/gvgDb.ts index 1acb0c61b..88721532e 100644 --- a/shared/domain/gvgField/gvgDb.ts +++ b/shared/domain/gvgField/gvgDb.ts @@ -264,8 +264,7 @@ export interface SaveTeamUpdateParam { frame: number; spine: number; configId: number; - groupId: number; - serverType: number; + groupKey: string; lineup?: GVGHeroInfo[]; lineupCe?: number; } diff --git a/shared/domain/rank.ts b/shared/domain/rank.ts index bc05b9682..9850f6f30 100644 --- a/shared/domain/rank.ts +++ b/shared/domain/rank.ts @@ -363,8 +363,7 @@ export class KeyName { activityId?: number; index?: number; // 军团活动第几期 vestigeId?: number; - groupId?: number; - serverType?: number; + groupKey?: string; day?: string; configId?: number; @@ -378,8 +377,7 @@ export class KeyName { if(param.activityId) this.activityId = param.activityId; if(param.index) this.index = param.index; if(param.vestigeId) this.vestigeId = param.vestigeId; - if(param.groupId) this.groupId = param.groupId; - if(param.serverType) this.serverType = param.serverType; + if(param.groupKey) this.groupKey = param.groupKey; if(param.day) this.day = param.day; if(param.configId) this.configId = param.configId; } @@ -415,17 +413,17 @@ export class KeyName { case REDIS_KEY.TOP_LINE_SNAPSHOT: return `${this.key}:${this.serverId}:${this.activityId}`; case REDIS_KEY.GVG_VESTIGE_MEMBER: - return `${this.key}:${this.day}:${this.groupId}:${this.serverType}:${this.vestigeId}`; + return `${this.key}:${this.day}:${this.groupKey}:${this.vestigeId}`; case REDIS_KEY.GVG_VESTIGE_MEMBER_ALL: - return `${this.key}:${this.day}:${this.groupId}:${this.serverType}`; + return `${this.key}:${this.day}:${this.groupKey}`; case REDIS_KEY.GVG_VESTIGE_LEAGUE: - return `${this.key}:${this.day}:${this.groupId}:${this.serverType}`; + return `${this.key}:${this.day}:${this.groupKey}`; case REDIS_KEY.GVG_BATTLE_RANK: - return `${this.key}:${this.configId}:${this.groupId}:${this.serverType}`; + return `${this.key}:${this.configId}:${this.groupKey}`; case REDIS_KEY.GVG_BATTLE_LEAGUE_RANK: - return `${this.key}:${this.configId}:${this.groupId}:${this.serverType}`; + return `${this.key}:${this.configId}:${this.groupKey}`; case REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY: - return `${this.key}:${this.configId}:${this.groupId}:${this.serverType}:${this.cityId}`; + return `${this.key}:${this.configId}:${this.groupKey}:${this.cityId}`; default: return this.key; } diff --git a/shared/resource/jsons/dic_zyz_GVGPeriod.json b/shared/resource/jsons/dic_zyz_GVGPeriod.json index 6b5972d49..e9d9e5054 100644 --- a/shared/resource/jsons/dic_zyz_GVGPeriod.json +++ b/shared/resource/jsons/dic_zyz_GVGPeriod.json @@ -14,7 +14,7 @@ { "periodType": 3, "day": "6&", - "startTime": "20:40:00", - "endTime": "21:40:00" + "startTime": "17:30:00", + "endTime": "20:00:00" } ] \ No newline at end of file