🐞 fix(gvg): 修复战区问题,不跨服服务器应单列

This commit is contained in:
luying
2023-02-20 20:45:10 +08:00
parent 015b4293fb
commit 5b3747a78e
27 changed files with 324 additions and 390 deletions

View File

@@ -6,7 +6,7 @@ import { GVGCityModel } from '../../../db/GVGCity';
import { Application, BackendSession, ChannelService, HandlerService, pinus } from "pinus"; import { Application, BackendSession, ChannelService, HandlerService, pinus } from "pinus";
import { resResult, genCode } from "../../../pubUtils/util"; import { resResult, genCode } from "../../../pubUtils/util";
import { GVGLeagueModel } from '../../../db/GVGLeague'; 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 { 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 { getGVGBattleData } from '../../../services/gvg/gvgBattleMemory';
import { GVGBattleRecModel } from '../../../db/GVGBattleRec'; import { GVGBattleRecModel } from '../../../db/GVGBattleRec';
@@ -66,15 +66,13 @@ export class GVGBattleHandler {
let { configId, period } = getGVGPeriodData(); let { configId, period } = getGVGPeriodData();
// if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD); // TODO 测试临时注 // 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); let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
let { leagueCode, name: leagueName } = myLeague; let { leagueCode, name: leagueName } = myLeague;
let durability = gameData.gvgTeamDurability.get(index)||0; 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) { if(lineup) {
let attrByHid = await getHeroesAttributes(roleId); let attrByHid = await getHeroesAttributes(roleId);
let { isOK, heroes } = await checkBattleHeroesByHid(roleId, lineup.map(cur => cur.actorId)); let { isOK, heroes } = await checkBattleHeroesByHid(roleId, lineup.map(cur => cur.actorId));
@@ -117,13 +115,11 @@ export class GVGBattleHandler {
let { configId, period } = getGVGPeriodData(); let { configId, period } = getGVGPeriodData();
let { startFightTime, endFightTime } = getFightTimeByPeriod(period); let { startFightTime, endFightTime } = getFightTimeByPeriod(period);
let groupId = await getGroupIdOfServer(serverId);
let serverType = await getGVGServerType(serverId);
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); 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||{}; const { guardLeague: leagueCode = '', guardLeagueName: name = '', guardLeagueIcon: icon = 0, players = [] } = city||{};
let ourTeamCnt = 0, oppTeamCnt = 0; let ourTeamCnt = 0, oppTeamCnt = 0;
@@ -171,14 +167,13 @@ export class GVGBattleHandler {
let { configId, period } = getGVGPeriodData(); let { configId, period } = getGVGPeriodData();
// if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD); // TODO 测试临时注 // if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD); // TODO 测试临时注
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); 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'); let teams = await GVGTeamModel.findByRole(roleId, '-_id');
// 每赛季初自己的几支队伍恢复耐久、城市、顺便更新一下自己的玩家名、联军 // 每赛季初自己的几支队伍恢复耐久、城市、顺便更新一下自己的玩家名、联军
@@ -186,7 +181,7 @@ export class GVGBattleHandler {
for(let team of teams) { for(let team of teams) {
if(team.configId != configId) { if(team.configId != configId) {
let { teamCode, maxDurability } = team; 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; if(team.cityId) originCityId = team.cityId;
} }
@@ -196,26 +191,26 @@ export class GVGBattleHandler {
if (originCityId != cityId) { if (originCityId != cityId) {
let gvgUserData = await GVGUserDataModel.findByRole(configId, myLeague.leagueCode, roleId); let gvgUserData = await GVGUserDataModel.findByRole(configId, myLeague.leagueCode, roleId);
if(gvgUserData?.cityId > 0) { // 如果leaveCity没有退出成功玩家还遗留在上一座城中做一下处理 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); 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); if(!city) return resResult(STATUS.GVG_BATTLE_CITY_FULL);
gvgUserData = await GVGUserDataModel.changeCity(configId, myLeague.leagueCode, roleId, cityId); gvgUserData = await GVGUserDataModel.changeCity(configId, myLeague.leagueCode, roleId, cityId);
let areaId = getBirthAreaOfCity(city, myLeague.leagueCode); 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'); teams = await GVGTeamModel.findByRole(roleId, '-_id');
// 更新内存队伍信息 // 更新内存队伍信息
let teamObj = getGVGBattleData(groupId, serverType); let teamObj = getGVGBattleData(groupKey);
teamObj.enterCity(...teams); 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 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 leaveGVGCityTeamChannel(roleId, sid);
await addRoleToGVGCityChannel(roleId, groupId, serverType, cityId, sid); await addRoleToGVGCityChannel(roleId, groupKey, cityId, sid);
return resResult(STATUS.SUCCESS, { return resResult(STATUS.SUCCESS, {
cityId, cityId,
@@ -235,8 +230,7 @@ export class GVGBattleHandler {
const { cityId } = msg; const { cityId } = msg;
let { configId, period } = getGVGPeriodData(); let { configId, period } = getGVGPeriodData();
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
// 检测是否已经在城池中 // 检测是否已经在城池中
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
@@ -249,16 +243,16 @@ export class GVGBattleHandler {
return resResult(STATUS.GVG_USER_NOT_IN_CITY); 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) { if (!city) {
return resResult(STATUS.GVG_CITY_NOT_FOUND); return resResult(STATUS.GVG_CITY_NOT_FOUND);
} }
// 更新玩家城池和队伍城池 // 更新玩家城池和队伍城池
gvgUserData = await GVGUserDataModel.changeCity(configId, myLeague.leagueCode, roleId, 0); 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); teamObj.leaveCity(roleId);
await leaveGVGAreaChannel(roleId, sid); await leaveGVGAreaChannel(roleId, sid);
@@ -277,12 +271,10 @@ export class GVGBattleHandler {
if(!checkAreaIsInCity(cityId, areaIds)) return resResult(STATUS.GVG_AREA_NOT_IN_CITY); if(!checkAreaIsInCity(cityId, areaIds)) return resResult(STATUS.GVG_AREA_NOT_IN_CITY);
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
let serverNames = await getAllServerName(); let serverNames = await getAllServerName();
let teamObj = getGVGBattleData(groupId, serverType); let teamObj = getGVGBattleData(groupKey);
let result: GVGAreaInMap[] = []; let result: GVGAreaInMap[] = [];
for(let areaId of areaIds) { for(let areaId of areaIds) {
let teams = teamObj.findTeamsByArea(areaId); let teams = teamObj.findTeamsByArea(areaId);
@@ -291,7 +283,7 @@ export class GVGBattleHandler {
} }
// 加入频道 // 加入频道
await leaveGVGAreaChannel(roleId, sid); await leaveGVGAreaChannel(roleId, sid);
await addRoleToAreaChannel(roleId, groupId, serverType, areaIds, sid); await addRoleToAreaChannel(roleId, groupKey, areaIds, sid);
return resResult(STATUS.SUCCESS, { cityId, areas: result }); return resResult(STATUS.SUCCESS, { cityId, areas: result });
} }
@@ -303,14 +295,13 @@ export class GVGBattleHandler {
const serverId = session.get('serverId'); const serverId = session.get('serverId');
const { cityId, teamCode } = msg; const { cityId, teamCode } = msg;
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
let myTeam = await GVGTeamModel.findMyTeamByCode(roleId, teamCode); let myTeam = await GVGTeamModel.findMyTeamByCode(roleId, teamCode);
if(!myTeam) return resResult(STATUS.GVG_TEAM_NOT_FOUND); if(!myTeam) return resResult(STATUS.GVG_TEAM_NOT_FOUND);
if(myTeam.cityId != cityId) return resResult(STATUS.GVG_BATTLE_IS_NOT_IN_CITY); 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 points: GVGTeamInListOnPoint[] = [], players: GVGTeamInList[] = [];
let pointIds = gameData.gvgPointByAreaId.get(myTeam.areaId)||[]; let pointIds = gameData.gvgPointByAreaId.get(myTeam.areaId)||[];
for(let pointId of pointIds) { for(let pointId of pointIds) {
@@ -326,7 +317,7 @@ export class GVGBattleHandler {
} }
await leaveGVGAreaTeamChannel(roleId, sid); await leaveGVGAreaTeamChannel(roleId, sid);
await addRoleToAreaTeamChannel(roleId, groupId, serverType, myTeam.areaId, sid); await addRoleToAreaTeamChannel(roleId, groupKey, myTeam.areaId, sid);
return resResult(STATUS.SUCCESS, { return resResult(STATUS.SUCCESS, {
cityId, areaId: myTeam.areaId, points, players cityId, areaId: myTeam.areaId, points, players
@@ -341,8 +332,7 @@ export class GVGBattleHandler {
const serverId = session.get('serverId'); const serverId = session.get('serverId');
const { areaId, cityId, teamCode } = msg; const { areaId, cityId, teamCode } = msg;
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
let team = await GVGTeamModel.findMyTeamByCode(roleId, teamCode); let team = await GVGTeamModel.findMyTeamByCode(roleId, teamCode);
let checkResult = checkMoveStatus(team, cityId, areaId); let checkResult = checkMoveStatus(team, cityId, areaId);
@@ -351,10 +341,10 @@ export class GVGBattleHandler {
team = await GVGTeamModel.startMove(teamCode, areaId, team.areaId); 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); 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); await pushTeamMoveMessage(team);
return resResult(STATUS.SUCCESS, { areaId, cityId, stopMoveTime: team.stopMoveTime }); return resResult(STATUS.SUCCESS, { areaId, cityId, stopMoveTime: team.stopMoveTime });
} }
@@ -367,8 +357,7 @@ export class GVGBattleHandler {
const serverId = session.get('serverId'); const serverId = session.get('serverId');
const { areaId, cityId, teamCode } = msg; const { areaId, cityId, teamCode } = msg;
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
let team = await GVGTeamModel.findMyTeamByCode(roleId, teamCode); let team = await GVGTeamModel.findMyTeamByCode(roleId, teamCode);
if(!team) return resResult(STATUS.GVG_BATTLE_TEAM_NOT_FOUND); if(!team) return resResult(STATUS.GVG_BATTLE_TEAM_NOT_FOUND);
@@ -376,11 +365,11 @@ export class GVGBattleHandler {
team = await GVGTeamModel.stopMove(teamCode, areaId); team = await GVGTeamModel.stopMove(teamCode, areaId);
// 更新内存数据 // 更新内存数据
let teamObj = getGVGBattleData(groupId, serverType); let teamObj = getGVGBattleData(groupKey);
teamObj.move(teamCode, areaId, 0, team.startMoveTime, team.stopMoveTime); teamObj.move(teamCode, areaId, 0, team.startMoveTime, team.stopMoveTime);
await leaveGVGAreaTeamChannel(roleId, sid); 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) }); return resResult(STATUS.SUCCESS, { areaId, cityId, curTeam: new MyTeamInfo(team) });
} }
@@ -393,8 +382,7 @@ export class GVGBattleHandler {
let { configId, period } = getGVGPeriodData(); let { configId, period } = getGVGPeriodData();
// if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD); // TODO 测试临时注 // if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD); // TODO 测试临时注
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
let myTeam = await GVGTeamModel.findMyTeamByCode(roleId, teamCode); let myTeam = await GVGTeamModel.findMyTeamByCode(roleId, teamCode);
if(!myTeam) return resResult(STATUS.GVG_TEAM_NOT_FOUND); 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); if(!point) return resResult(STATUS.GVG_POINT_HAS_SETTLED);
const curTeam = await GVGTeamModel.settlePoint(teamCode, pointId); const curTeam = await GVGTeamModel.settlePoint(teamCode, pointId);
let teamObj = getGVGBattleData(groupId, serverType); let teamObj = getGVGBattleData(groupKey);
teamObj.teamSettle(roleId, teamCode, pointId); teamObj.teamSettle(roleId, teamCode, pointId);
addTeamSettleRec(curTeam); addTeamSettleRec(curTeam);
@@ -423,8 +411,7 @@ export class GVGBattleHandler {
let { configId, period } = getGVGPeriodData(); let { configId, period } = getGVGPeriodData();
// if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD); // TODO 测试临时注 // if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD); // TODO 测试临时注
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
let myTeam = await GVGTeamModel.findMyTeamByCode(roleId, teamCode); let myTeam = await GVGTeamModel.findMyTeamByCode(roleId, teamCode);
if(!myTeam) return resResult(STATUS.GVG_TEAM_NOT_FOUND); 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); if(dicAreaPoint.areaId != myTeam.areaId) return resResult(STATUS.GVG_POINT_NOT_AREA);
const curTeam = await GVGTeamModel.settlePoint(teamCode, 0); const curTeam = await GVGTeamModel.settlePoint(teamCode, 0);
await GVGCityAreaPointModel.leavePoint(configId, groupId, serverType, pointId); await GVGCityAreaPointModel.leavePoint(configId, groupKey, pointId);
let teamObj = getGVGBattleData(groupId, serverType); let teamObj = getGVGBattleData(groupKey);
teamObj.teamSettle(roleId, teamCode, pointId); teamObj.teamSettle(roleId, teamCode, pointId);
return resResult(STATUS.SUCCESS, { curTeam: new MyTeamInfo(curTeam) }); return resResult(STATUS.SUCCESS, { curTeam: new MyTeamInfo(curTeam) });
@@ -450,20 +437,19 @@ export class GVGBattleHandler {
let { configId, period } = getGVGPeriodData(); let { configId, period } = getGVGPeriodData();
// if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD); // TODO 测试临时注 // if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD); // TODO 测试临时注
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
let { attackTeam, defenseTeam } = await GVGTeamModel.findBattleTeams(teamCode, oppoTeamCode); let { attackTeam, defenseTeam } = await GVGTeamModel.findBattleTeams(teamCode, oppoTeamCode);
let checkStatus = checkGVGBattleStart(roleId, attackTeam, defenseTeam); let checkStatus = checkGVGBattleStart(roleId, attackTeam, defenseTeam);
if(checkStatus.code != 0) return resResult(checkStatus); if(checkStatus.code != 0) return resResult(checkStatus);
const warId = getGVGWarId(defenseTeam); 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); attackTeam = await GVGTeamModel.battleStartLockAttack(teamCode);
defenseTeam = await GVGTeamModel.battleStartLockDefense(oppoTeamCode, teamCode); defenseTeam = await GVGTeamModel.battleStartLockDefense(oppoTeamCode, teamCode);
// 内存处理 // 内存处理
let teamObj = getGVGBattleData(groupId, serverType); let teamObj = getGVGBattleData(groupKey);
teamObj.setTime(attackTeam.teamCode, attackTeam); teamObj.setTime(attackTeam.teamCode, attackTeam);
teamObj.setTime(defenseTeam.teamCode, defenseTeam); teamObj.setTime(defenseTeam.teamCode, defenseTeam);
let heroes = getOppHeroes(warId, defenseTeam.isRobot, defenseTeam.lineup) 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); let { attackTeam, defenseTeam } = await GVGTeamModel.findBattleTeams(record.attackTeam.teamCode, record.defenseTeam.teamCode);
if(defenseTeam.lockTeamCode != attackTeam.teamCode) return resResult(STATUS.GVG_LOCK_TIME_OUT) if(defenseTeam.lockTeamCode != attackTeam.teamCode) return resResult(STATUS.GVG_LOCK_TIME_OUT)
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId); let city = await GVGCityModel.findByCityId(configId, groupKey, cityId);
let city = await GVGCityModel.findByCityId(configId, groupId, serverType, cityId);
if (!city) return resResult(STATUS.GVG_CITY_NOT_FOUND); if (!city) return resResult(STATUS.GVG_CITY_NOT_FOUND);
// 计算并更新两支队伍耐久 // 计算并更新两支队伍耐久
@@ -497,7 +482,7 @@ export class GVGBattleHandler {
attackTeam = await GVGTeamModel.settlePoint(attackTeam.teamCode, defenseTeam.originPointId); attackTeam = await GVGTeamModel.settlePoint(attackTeam.teamCode, defenseTeam.originPointId);
await GVGCityAreaPointModel.settlePoint(cityId, attackTeam.areaId, defenseTeam.originPointId, attackTeam); await GVGCityAreaPointModel.settlePoint(cityId, attackTeam.areaId, defenseTeam.originPointId, attackTeam);
} else { } else {
await GVGCityAreaPointModel.leavePoint(configId, groupId, serverType, defenseTeam.originPointId); await GVGCityAreaPointModel.leavePoint(configId, groupKey, defenseTeam.originPointId);
} }
} }
if(defenseTeam.curTeamBreak) { if(defenseTeam.curTeamBreak) {
@@ -507,11 +492,11 @@ export class GVGBattleHandler {
} }
// 更新内存 // 更新内存
let teamObj = getGVGBattleData(groupId, serverType); let teamObj = getGVGBattleData(groupKey);
teamObj.battleEnd([attackTeam, defenseTeam]); teamObj.battleEnd([attackTeam, defenseTeam]);
// 更新rec // 更新rec
let rec = await GVGBattleRecModel.battleEnd(battleCode, isSuccess); let rec = await GVGBattleRecModel.battleEnd(battleCode, isSuccess);
await battleEndSendMessage(groupId, serverType, cityId, defenseTeam, attackTeam); await battleEndSendMessage(groupKey, cityId, defenseTeam, attackTeam);
addBattleEndRec(rec); addBattleEndRec(rec);
return resResult(STATUS.SUCCESS, { curTeam: new MyTeamInfo(attackTeam) }); return resResult(STATUS.SUCCESS, { curTeam: new MyTeamInfo(attackTeam) });
@@ -531,8 +516,7 @@ export class GVGBattleHandler {
let { configId, period } = getGVGPeriodData(); let { configId, period } = getGVGPeriodData();
// if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD); // TODO 测试临时注 // if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD); // TODO 测试临时注
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
let { attackTeam, defenseTeam } = await GVGTeamModel.findBattleTeams(teamCode, oppoTeamCode); let { attackTeam, defenseTeam } = await GVGTeamModel.findBattleTeams(teamCode, oppoTeamCode);
let checkStatus = checkGVGBattleStart(roleId, attackTeam, defenseTeam); 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); 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); 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); 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)); 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); attackTeam = await GVGTeamModel.settlePoint(attackTeam.teamCode, defenseTeam.originPointId);
await GVGCityAreaPointModel.settlePoint(cityId, attackTeam.areaId, defenseTeam.originPointId, attackTeam); await GVGCityAreaPointModel.settlePoint(cityId, attackTeam.areaId, defenseTeam.originPointId, attackTeam);
} else { } 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]); 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) }); return resResult(STATUS.SUCCESS, { curTeam: new MyTeamInfo(attackTeam) });
} }
@@ -580,8 +564,7 @@ export class GVGBattleHandler {
const { teamCode } = msg; const { teamCode } = msg;
let { configId, period } = getGVGPeriodData(); let { configId, period } = getGVGPeriodData();
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
@@ -607,7 +590,7 @@ export class GVGBattleHandler {
team = await GVGTeamModel.reviveTeam(teamCode); team = await GVGTeamModel.reviveTeam(teamCode);
// 更新内存 // 更新内存
let teamObj = getGVGBattleData(groupId, serverType); let teamObj = getGVGBattleData(groupKey);
teamObj.battleEnd([team]); teamObj.battleEnd([team]);
// 更新成功返回队伍信息 // 更新成功返回队伍信息
@@ -623,15 +606,14 @@ export class GVGBattleHandler {
const { type, cityId } = msg; const { type, cityId } = msg;
// 根据 type 获取战报 // 根据 type 获取战报
let { configId, period } = getGVGPeriodData(); let { configId, period } = getGVGPeriodData();
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
let recs: GVGRecType[] = []; let recs: GVGRecType[] = [];
if(type == GVG_REC_TYPE.BATTLE_BY_CITY) { 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) { } else if (type == GVG_REC_TYPE.BATTLE_BY_LEAGUE) {
recs = await GVGRecModel.findBattleRecByLeague(configId, myLeague.leagueCode); recs = await GVGRecModel.findBattleRecByLeague(configId, myLeague.leagueCode);
} else if (type == GVG_REC_TYPE.BATTLE_BY_ROLE) { } else if (type == GVG_REC_TYPE.BATTLE_BY_ROLE) {
@@ -645,11 +627,10 @@ export class GVGBattleHandler {
const serverId = session.get('serverId'); const serverId = session.get('serverId');
let { configId } = getGVGPeriodData(); let { configId } = getGVGPeriodData();
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
const cities = await GVGCityModel.findByConfig(configId, groupId, serverType); const cities = await GVGCityModel.findByConfig(configId, groupKey);
const points = await GVGCityAreaPointModel.findByConfig(configId, groupId, serverType); const points = await GVGCityAreaPointModel.findByConfig(configId, groupKey);
let result: { cityId: number, guardLeagueName: string, areas: { areaId: number, points: { pointId: number, guardLeagueName: string }[] }[] }[] = []; let result: { cityId: number, guardLeagueName: string, areas: { areaId: number, points: { pointId: number, guardLeagueName: string }[] }[] }[] = [];
for(let [ cityId, { areaIds }] of gameData.gvgCity) { for(let [ cityId, { areaIds }] of gameData.gvgCity) {
@@ -677,18 +658,16 @@ export class GVGBattleHandler {
const serverId = session.get('serverId'); const serverId = session.get('serverId');
let { configId } = getGVGPeriodData(); let { configId } = getGVGPeriodData();
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(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, groupKey });
let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupId, serverType });
let leagueRanksRaw = await r.getRankByRange(); let leagueRanksRaw = await r.getRankByRange();
let leagueRanks = leagueRanksRaw.map(obj => { let leagueRanks = leagueRanksRaw.map(obj => {
if(obj instanceof LeagueRankInfo) return { rank: obj.rank, name: obj.name, score: obj.num } 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 memberRanksRaw = await r2.getRankByRange();
let memberRanks = memberRanksRaw.map(obj => { let memberRanks = memberRanksRaw.map(obj => {
if(obj instanceof RoleRankInfo) return { rank: obj.rank, name: obj.roleName, score: obj.num } if(obj instanceof RoleRankInfo) return { rank: obj.rank, name: obj.roleName, score: obj.num }

View File

@@ -22,7 +22,7 @@ import { calBreakGoods, checkHeroIsUsedInOtherVestige, checkVestige, checkVestig
import { addGVGReward, combinePushItem, handleGVGCost } from "../../../services/gvg/gvgItemService"; import { addGVGReward, combinePushItem, handleGVGCost } from "../../../services/gvg/gvgItemService";
import { addGVGActive } from "../../../services/gvg/gvgPrepareService"; import { addGVGActive } from "../../../services/gvg/gvgPrepareService";
import { addVestigeBattleEndRec } from "../../../services/gvg/gvgRecService"; 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 { checkBattleHeroesByHid } from "../../../services/normalBattleService";
import { Rank } from "../../../services/rankService"; import { Rank } from "../../../services/rankService";
import { getAllServerName } from "../../../services/redisService"; import { getAllServerName } from "../../../services/redisService";
@@ -56,19 +56,18 @@ export class GVGProduceHandler {
const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
let dicRankMap = gameData.gvgVestige.get(vestigeId); let dicRankMap = gameData.gvgVestige.get(vestigeId);
if(!dicRankMap) return resResult(STATUS.DIC_DATA_NOT_FOUND); 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); if(!myVestigeRank) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
let { rank, lineup, oppRanks, refreshCnt } = myVestigeRank; let { rank, lineup, oppRanks, refreshCnt } = myVestigeRank;
let lineupCe = lineup.reduce((pre, cur) => pre + cur.ce, 0); 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); let usedHeroes = await getVestigeUsedHeroes(roleId, vestigeId);
return resResult(STATUS.SUCCESS, { return resResult(STATUS.SUCCESS, {
@@ -94,10 +93,9 @@ export class GVGProduceHandler {
} }
let { configId, period } = getGVGPeriodData(); let { configId, period } = getGVGPeriodData();
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD); if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(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); if(!myVestigeRank) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
for(let { actorId } of heroes) { for(let { actorId } of heroes) {
@@ -172,17 +170,16 @@ export class GVGProduceHandler {
} }
let { configId, period } = getGVGPeriodData(); let { configId, period } = getGVGPeriodData();
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD); if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
let myVestigeRank = await getMyVestigeRank(configId, groupId, serverType, vestigeId, roleId); let myVestigeRank = await getMyVestigeRank(configId, groupKey, vestigeId, roleId);
let refreshCnt = myVestigeRank.refreshCnt||0; let refreshCnt = myVestigeRank.refreshCnt||0;
if(refreshCnt >= GVG.GVG_REFRESH_TIME) return resResult(STATUS.GVG_VESTIGE_REFESH_CNT_MAX); if(refreshCnt >= GVG.GVG_REFRESH_TIME) return resResult(STATUS.GVG_VESTIGE_REFESH_CNT_MAX);
let oppRanks = refreshVestigeOppRanks(myVestigeRank.rank); let oppRanks = refreshVestigeOppRanks(myVestigeRank.rank);
myVestigeRank = await GVGVestigeRankModel.refreshOpp(roleId, vestigeId, oppRanks ); 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 }); 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); const hasItem = await GVGUserItemModel.checkItemCnt(configId, myLeague.leagueCode, roleId, GVG_ITEM.FIGHT_COIN, 1);
if(!hasItem) return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH); if(!hasItem) return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH);
const groupId = await getGroupIdOfServer(serverId); const groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(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) { if(status != VESTIGE_OPP_STATUS.BATTLE) {
let oppRanks = refreshVestigeOppRanks(myRank); 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 }); 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); const costResult = await handleGVGCost(roleId, myLeague.leagueCode, sid, [{ id: GVG_ITEM.FIGHT_COIN, count: 1 }], [], ITEM_CHANGE_REASON.GVG_VESTIGE_START);
if(!costResult) { if(!costResult) {
await GVGVestigeLockModel.releaseLock(groupId, serverType, vestigeId, rank); await GVGVestigeLockModel.releaseLock(groupKey, vestigeId, rank);
return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH); return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH);
} }
// 获取征战令对应奖励 // 获取征战令对应奖励
@@ -240,7 +236,7 @@ export class GVGProduceHandler {
// 创建rec // 创建rec
const attackInfo = await generateAttackInfo(roleId, myLeague, myRank); const attackInfo = await generateAttackInfo(roleId, myLeague, myRank);
const defenseInfo = await generateDefenseInfo(targetRoleId, vestigeId, rank); 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); const oppDetail = await getOppDetailData(rec);
checkGVGTask(serverId, roleId, sid, configId, myLeague.leagueCode, TASK_TYPE.GVG_VESTIGE, { count: 1 }); checkGVGTask(serverId, roleId, sid, configId, myLeague.leagueCode, TASK_TYPE.GVG_VESTIGE, { count: 1 });
@@ -257,7 +253,7 @@ export class GVGProduceHandler {
// 更新ladderMatchRec // 更新ladderMatchRec
let rec = await GVGVestigeRecModel.giveup(roleId, battleCode); let rec = await GVGVestigeRecModel.giveup(roleId, battleCode);
if(rec && rec.defenseInfo) { 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, { return resResult(STATUS.SUCCESS, {
@@ -302,9 +298,8 @@ export class GVGProduceHandler {
if(await checkHeroIsUsedInOtherVestige(roleId, vestigeId, heroes)) return resResult(STATUS.GVG_VESTIGE_HERO_USED); if(await checkHeroIsUsedInOtherVestige(roleId, vestigeId, heroes)) return resResult(STATUS.GVG_VESTIGE_HERO_USED);
// 更新锁 // 更新锁
const groupId = await getGroupIdOfServer(serverId); const groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId); let lock = await GVGVestigeLockModel.checkBattleLock(groupKey, vestigeId, rank, roleId);
let lock = await GVGVestigeLockModel.checkBattleLock(groupId, serverType, vestigeId, rank, roleId);
if(!lock) return resResult(STATUS.GVG_VESTIGE_CHECK_BATTLE_STATUS_ERR); if(!lock) return resResult(STATUS.GVG_VESTIGE_CHECK_BATTLE_STATUS_ERR);
// 向vestigerec保存阵容 // 向vestigerec保存阵容
@@ -348,7 +343,7 @@ export class GVGProduceHandler {
// 更新vestigeRec // 更新vestigeRec
rec = await GVGVestigeRecModel.battleEnd(battleCode, isSuccess, endTime, atkData?.rank, defData?.rank||rec.attackInfo.oldRank); 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 // 更新battleRecord
await BattleRecordModel.updateBattleRecordByCode(battleCode, { $set: { status: isSuccess? 1: 2 } }); 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, score: gameData.gvgVestige.get(rec.vestigeId)?.get(atkData.rank)?.score??0,
historyRank: atkData.historyRank, historyRank: atkData.historyRank,
...getVestigeRecStatus(rec), ...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, // breakGoods,
lineup: atkData.lineup, lineup: atkData.lineup,
lineupCe: atkData.lineup.reduce((pre, cur) => pre + cur.ce, 0), lineupCe: atkData.lineup.reduce((pre, cur) => pre + cur.ce, 0),
@@ -402,12 +397,11 @@ export class GVGProduceHandler {
const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
let serverNames = await getAllServerName(); 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: 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, { groupId, serverType, day: getDayKeyInfo() }, { roleId }, serverNames); const { ranks: memberRank, myRank: myMemberRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, true, { groupKey, day: getDayKeyInfo() }, { roleId }, serverNames);
return resResult(STATUS.SUCCESS, { return resResult(STATUS.SUCCESS, {
leagueRank, myLeagueRank, memberRank, myMemberRank leagueRank, myLeagueRank, memberRank, myMemberRank
@@ -423,13 +417,12 @@ export class GVGProduceHandler {
const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
let serverNames = await getAllServerName(); let serverNames = await getAllServerName();
let { configId } = getGVGPeriodData(); let { configId } = getGVGPeriodData();
const { ranks, myRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_LEAGUE, false, { groupId, serverType, day: getDayKeyInfo() }, { leagueCode: myLeague.leagueCode }, 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, { groupId, serverType, day: getDayKeyInfo() }, { roleId }, 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 yesterdayRank = await GVGVestigeLeagueRankModel.getYesterdayRank(myLeague.leagueCode);
let canReceiveLeagueRanks = await GVGVestigeLeagueRankModel.getCanReceiveRanks(configId, myLeague.leagueCode); let canReceiveLeagueRanks = await GVGVestigeLeagueRankModel.getCanReceiveRanks(configId, myLeague.leagueCode);
@@ -450,13 +443,12 @@ export class GVGProduceHandler {
let serverId = session.get('serverId'); let serverId = session.get('serverId');
let { vestigeId } = msg; let { vestigeId } = msg;
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
let dicRankMap = gameData.gvgVestige.get(vestigeId); let dicRankMap = gameData.gvgVestige.get(vestigeId);
let serverNames = await getAllServerName(); let serverNames = await getAllServerName();
let vestigeRanks = await GVGVestigeRankModel.findRankByVestige(groupId, serverType, vestigeId); let vestigeRanks = await GVGVestigeRankModel.findRankByVestige(groupKey, vestigeId);
let r = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER, { groupId, serverType, vestigeId }); let r = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER, { groupKey, vestigeId });
let ranks: VestigeRank[] = [], myRank: VestigeRank; let ranks: VestigeRank[] = [], myRank: VestigeRank;
for(let { roleId: targetRoleId, rank, lineup } of vestigeRanks) { for(let { roleId: targetRoleId, rank, lineup } of vestigeRanks) {
let param = <RoleRankInfo>await r.getParam(rank, targetRoleId, [rank]); let param = <RoleRankInfo>await r.getParam(rank, targetRoleId, [rank]);
@@ -531,26 +523,25 @@ export class GVGProduceHandler {
let serverId = session.get('serverId'); let serverId = session.get('serverId');
let guildCode = session.get('guildCode'); let guildCode = session.get('guildCode');
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
let { configId } = getGVGPeriodData(); let { configId } = getGVGPeriodData();
const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); 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 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) { if(targetData) {
myData = await GVGVestigeRankModel.updateByRoleId(vestigeId, roleId, { rank, oldRank: myRank, historyRank: rank }); myData = await GVGVestigeRankModel.updateByRoleId(vestigeId, roleId, { rank, oldRank: myRank, historyRank: rank });
targetData = await GVGVestigeRankModel.updateByRoleId(vestigeId, targetData.roleId, { rank: myRank, oldRank: rank }); targetData = await GVGVestigeRankModel.updateByRoleId(vestigeId, targetData.roleId, { rank: myRank, oldRank: rank });
} else { } else {
myData = await GVGVestigeRankModel.updateByRoleId(vestigeId, roleId, { rank, oldRank: myRank, historyRank: rank }); 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) { 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); return resResult(STATUS.SUCCESS);

View File

@@ -4,7 +4,7 @@ import { GVGLeagueModel } from "../../../db/GVGLeague";
import { GVGLeaguePrepareModel } from "../../../db/GVGLeaguePrepare"; import { GVGLeaguePrepareModel } from "../../../db/GVGLeaguePrepare";
import { GVGMainData, LeagueContributeInfo, LeagueMemberContributeInfo, LeagueMemberListInfo } from "../../../domain/gvgField/returnData"; import { GVGMainData, LeagueContributeInfo, LeagueMemberContributeInfo, LeagueMemberListInfo } from "../../../domain/gvgField/returnData";
import { getRandEelm, resResult } from "../../../pubUtils/util"; 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 { autoCreateLeague, checkCanChooseJob, checkCanPrepare, checkLeagueAuth, getMyAuth } from "../../../services/gvg/gvgTeamService";
import { getAllServerName } from "../../../services/redisService"; import { getAllServerName } from "../../../services/redisService";
import { Contribute, GVGUserDataModel } from "../../../db/GVGUserData"; import { Contribute, GVGUserDataModel } from "../../../db/GVGUserData";
@@ -91,11 +91,8 @@ export class GVGHandler {
let { configId, period, countdownTime } = getGVGPeriodData(); let { configId, period, countdownTime } = getGVGPeriodData();
let { startFightTime, endFightTime } = getFightTimeByPeriod(period); let { startFightTime, endFightTime } = getFightTimeByPeriod(period);
let groupKey = await getGroupKey(serverId);
let groupId = await getGroupIdOfServer(serverId); let cities = await getGVGCitiesInfo(configId, groupKey, myLeague);
let serverType = await getGVGServerType(serverId);
let cities = await getGVGCitiesInfo(configId, groupId, serverType, myLeague);
let vestiges = await getMyVestiges(serverId, roleId); let vestiges = await getMyVestiges(serverId, roleId);
return resResult(STATUS.SUCCESS, { return resResult(STATUS.SUCCESS, {

View File

@@ -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 { try {
return await initCatapult(cityId, groupId, serverType, leagueCode, leagueName); return await initCatapult(cityId, groupKey, leagueCode, leagueName);
} catch(e) { } catch(e) {
errlogger.error(`remote ${__filename} \n ${e.stack}`); errlogger.error(`remote ${__filename} \n ${e.stack}`);
} }

View File

@@ -61,24 +61,24 @@ export async function addRoleToGroupShopChannel(roleId: string, sid: string) {
await addRoleToChannel(roomId, roleId, sid); 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) { 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 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) { export async function addRoleToAreaTeamChannel(roleId: string, groupKey: string, areaId: number, sid: string) {
const roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREA_BY_TEAM, `${groupId}_${serverType}_${areaId}`); const roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREA_BY_TEAM, `${groupKey}_${areaId}`);
await addRoleToChannel(roomId, roleId, sid); 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) { export async function addRoleToGVGCityChannel(roleId: string, groupKey: string, cityId: number, sid: string) {
const roomId = groupRoomId(CHANNEL_PREFIX.GVG_CITY, `${groupId}_${serverType}_${cityId}`); const roomId = groupRoomId(CHANNEL_PREFIX.GVG_CITY, `${groupKey}_${cityId}`);
await addRoleToChannel(roomId, roleId, sid); 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) { async function leaveChannel(roomId: string, roleId: string, sid: string) {
const channelSid = await channelServer(roomId); const channelSid = await channelServer(roomId);
@@ -184,20 +184,20 @@ export async function getGroupShopSid() {
return channelSid; return channelSid;
} }
export async function getGVGAreaChannelSid(groupId: number, serverType: number, areaId: number) { export async function getGVGAreaChannelSid(groupKey: string, areaId: number) {
const roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREAS, `${groupId}_${serverType}_${areaId}`); const roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREAS, `${groupKey}_${areaId}`);
const channelSid = await channelServer(roomId); const channelSid = await channelServer(roomId);
return channelSid; return channelSid;
} }
export async function getGVGAreaTeamChannelSid(groupId: number, serverType: number, areaId: number) { export async function getGVGAreaTeamChannelSid(groupKey: string, areaId: number) {
const roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREA_BY_TEAM, `${groupId}_${serverType}_${areaId}`); const roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREA_BY_TEAM, `${groupKey}_${areaId}`);
const channelSid = await channelServer(roomId); const channelSid = await channelServer(roomId);
return channelSid; return channelSid;
} }
export async function getGVGCityTeamChannelSid(groupId: number, serverType: number, cityId: number) { export async function getGVGCityTeamChannelSid(groupKey: string, cityId: number) {
const roomId = groupRoomId(CHANNEL_PREFIX.GVG_CITY, `${groupId}_${serverType}_${cityId}`); const roomId = groupRoomId(CHANNEL_PREFIX.GVG_CITY, `${groupKey}_${cityId}`);
const channelSid = await channelServer(roomId); const channelSid = await channelServer(roomId);
return channelSid; return channelSid;
} }

View File

@@ -11,17 +11,15 @@ import { getGVGPeriodData } from "./gvgService";
const gvgBattleMap: Map<string, GVGBattleData> = new Map(); const gvgBattleMap: Map<string, GVGBattleData> = new Map();
class GVGBattleData { class GVGBattleData {
public groupId: number; // 战区 public groupKey: string; // 战区
public serverType: number; // 单服还是跨服
private teams: Map<string, GVGTeamMem> = new Map(); // 队伍, teamCode => team private teams: Map<string, GVGTeamMem> = new Map(); // 队伍, teamCode => team
private rolePoints: Map<string, Map<number, string>> = new Map(); // roleId => pointId[],用于更新玩家的积分 private rolePoints: Map<string, Map<number, string>> = new Map(); // roleId => pointId[],用于更新玩家的积分
private roleToTeam: Map<string, string[]> = new Map(); // roleId => teamCode private roleToTeam: Map<string, string[]> = new Map(); // roleId => teamCode
public areaToTeams: Map<number, Set<string>> = new Map(); // areaId => teamCode set用于定时下发地图玩家数据 public areaToTeams: Map<number, Set<string>> = new Map(); // areaId => teamCode set用于定时下发地图玩家数据
constructor(groupId: number, serverType: number) { constructor(groupKey: string) {
this.groupId = groupId; this.groupKey = groupKey;
this.serverType = serverType;
} }
public findTeamsByArea(areaId: number) { public findTeamsByArea(areaId: number) {
@@ -158,12 +156,11 @@ class GVGBattleData {
} }
} }
export function getGVGBattleData(groupId: number, serverType: number) { export function getGVGBattleData(groupKey: string) {
let key = `${groupId}_${serverType}`; if(!gvgBattleMap.has(groupKey)) {
if(!gvgBattleMap.has(key)) { gvgBattleMap.set(groupKey, new GVGBattleData(groupKey));
gvgBattleMap.set(key, new GVGBattleData(groupId, serverType));
} }
return gvgBattleMap.get(key); return gvgBattleMap.get(groupKey);
} }
export function getGVGBattleMap() { export function getGVGBattleMap() {
@@ -178,7 +175,7 @@ export async function initTeamToMem() {
let teams = await GVGTeamModel.findByConfigId(configId); let teams = await GVGTeamModel.findByConfigId(configId);
for(let team of teams) { for(let team of teams) {
if(dispatch(team.cityId.toString(), servers)?.id == sid) { if(dispatch(team.cityId.toString(), servers)?.id == sid) {
let teamObj = getGVGBattleData(team.groupId, team.serverType); let teamObj = getGVGBattleData(team.groupKey);
teamObj.enterCity(team); teamObj.enterCity(team);
} }
} }

View File

@@ -47,15 +47,15 @@ export async function getGVGCities(league: GVGLeagueType) {
* 获取当前城池状态 * 获取当前城池状态
* @returns [{cityId: number, guardLeagueCode: string, guardLeagueName: string, teamCnt: number }] * @returns [{cityId: number, guardLeagueCode: string, guardLeagueName: string, teamCnt: number }]
*/ */
export async function getGVGCitiesInfo(configId: number, groupId: number, serverType: number, league?: GVGLeagueType) { export async function getGVGCitiesInfo(configId: number, groupKey: string, league?: GVGLeagueType) {
let cities = await GVGCityModel.findGuardCity(configId, groupId, serverType); let cities = await GVGCityModel.findGuardCity(configId, groupKey);
let result: GVGCityMapInfo[] = []; let result: GVGCityMapInfo[] = [];
for(let city of cities) { for(let city of cities) {
let obj = new GVGCityMapInfo(city); let obj = new GVGCityMapInfo(city);
if(league) { if(league) {
let players = (city.players||[]).filter(cur => cur.leagueCode == league.leagueCode); let players = (city.players||[]).filter(cur => cur.leagueCode == league.leagueCode);
obj.setTeamCnt(players.length); 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 }); let score = await r.getMyScore({ leagueCode: league.leagueCode });
obj.setScore(score||0); obj.setScore(score||0);
} }
@@ -93,8 +93,8 @@ export function checkMoveStatus(team: GVGTeamType, cityId: number, areaId: numbe
return STATUS.SUCCESS; return STATUS.SUCCESS;
} }
export async function initRobots(configId: number, groupId: number, serverType: number, cityId: number) { export async function initRobots(configId: number, groupKey: string, cityId: number) {
let robotTeams = await GVGTeamModel.findRobotTeams(groupId, serverType, cityId); let robotTeams = await GVGTeamModel.findRobotTeams(groupKey, cityId);
let updateDicPoints: DicGVGAreaPoint[] = []; let updateDicPoints: DicGVGAreaPoint[] = [];
let { areaIds = []} = gameData.gvgCity.get(cityId); let { areaIds = []} = gameData.gvgCity.get(cityId);
for(let [_, point] of gameData.gvgAreaPoint) { for(let [_, point] of gameData.gvgAreaPoint) {
@@ -105,9 +105,9 @@ export async function initRobots(configId: number, groupId: number, serverType:
} }
} }
if(updateDicPoints.length > 0) { 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); teamObj.enterCity(...robotTeams);
} }
return robotTeams; return robotTeams;
@@ -213,14 +213,14 @@ export async function gvgBattleStart() {
let { configId } = getGVGConfig(); let { configId } = getGVGConfig();
let guardCities = await GVGCityModel.findAllGuardCities(configId); 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; 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 { configId } = getGVGConfig();
let leaguePrepare = await GVGLeaguePrepareModel.findByLeague(configId, leagueCode); 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); let dicArea = gameData.gvgArea.get(areaId);
return dicArea && dicArea.areaType == GVG_AREA_TYPE.CATAPULT; 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); teamObj.enterCity(...teams);
} }
} }
@@ -258,13 +258,13 @@ export async function catapultHurt() {
let dicGVGCity = gameData.gvgCity.get(catapult.cityId); let dicGVGCity = gameData.gvgCity.get(catapult.cityId);
let teams = await GVGTeamModel.attackByCatapult(teamCodes, catapult.captapultAtk, dicGVGCity.attackBirth); let teams = await GVGTeamModel.attackByCatapult(teamCodes, catapult.captapultAtk, dicGVGCity.attackBirth);
teamObj.battleEnd(teams); 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)) cityId: catapult.cityId, areaId: catapult.areaId, attackType: 1, teams: teams.map(team => new GVGTeamInList(team))
}); });
for(let team of teams) { for(let team of teams) {
await pushTeamBeHurtMessage(team); await pushTeamBeHurtMessage(team);
if(team.curTeamBreak && team.originPointId > 0) { 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) { 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; 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); r.setRankWithRoleInfo(roleId, incScore, Date.now(), null, true);
} }
export async function redisAddSettleScore(gvgTeam: GVGTeamType, incScore: number) { 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; 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); 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); r2.setRankWithLeagueInfo(leagueCode, incScore, Date.now(), null, true);
} }
// 获取排行榜 // 获取排行榜
export async function getBattleRanksByCity(configId: number, groupId: number, serverType: number, cityId: number, myLeague: GVGLeagueType) { 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, groupId, serverType, cityId }); let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupKey, cityId });
r.setGenerFieldsFun((obj => { r.setGenerFieldsFun((obj => {
if(obj instanceof LeagueRankInfo) { if(obj instanceof LeagueRankInfo) {
return { rank: obj.rank, leagueCode: obj.code, leagueName: obj.name, score: obj.num } 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() { export async function gvgBattleSeconds() {
const { configId } = getGVGConfig(); const { configId } = getGVGConfig();
const serverNames = await getAllServerName(); const serverNames = await getAllServerName();
let keys: { groupId: number, serverType: number, cityId: number }[] = [] let keys: { groupKey: string, cityId: number }[] = []
for(let [_key, teamObj] of getGVGBattleMap()) { for(let [_key, teamObj] of getGVGBattleMap()) {
// 每5秒给据点上的人加积分 // 每5秒给据点上的人加积分
let teams = teamObj.findSettledPoint(); let teams = teamObj.findSettledPoint();
@@ -327,16 +327,16 @@ export async function gvgBattleSeconds() {
let dicArea = gameData.gvgArea.get(areaId); let dicArea = gameData.gvgArea.get(areaId);
let teams = teamObj.findTeamsByArea(areaId); let teams = teamObj.findTeamsByArea(areaId);
let result = teams.map(team => new GVGTeamSpineInMap(team, serverNames)); 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); let index = keys.findIndex(cur => cur.cityId == dicArea.cityId && cur.groupKey == teamObj.groupKey);
if(index == -1) keys.push({ groupId: teamObj.groupId, serverType: teamObj.serverType, cityId: dicArea.cityId }); if(index == -1) keys.push({ groupKey: teamObj.groupKey, cityId: dicArea.cityId });
} }
} }
for(let { groupId, serverType, cityId } of keys) { for(let { groupKey, cityId } of keys) {
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 rawRanks = await r.getRankByRange(); let rawRanks = await r.getRankByRange();
let ranks = rawRanks.map(obj => { let ranks = rawRanks.map(obj => {
if(obj instanceof LeagueRankInfo) { if(obj instanceof LeagueRankInfo) {
@@ -344,7 +344,7 @@ export async function gvgBattleSeconds() {
} }
return obj 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 keys = await findKeys(`${REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY}:${configId}:`);
let rankKeys = keys.map(key => { let rankKeys = keys.map(key => {
let [,, _groupId, _serverType, _cityId] = key.split(':'); let [,, groupKey, _cityId] = key.split(':');
return { groupId: parseInt(_groupId), serverType: parseInt(_serverType), cityId: parseInt(_cityId) }; return { groupKey, cityId: parseInt(_cityId) };
}).sort((a, b) => b.cityId - a.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); let dicCity = gameData.gvgCity.get(cityId);
if(!dicCity) continue; 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(); let ranks = await r.getRankByRange();
// 排名最高占领城池 // 排名最高占领城池
for(let obj of ranks) { for(let obj of ranks) {
let rankInfo = <LeagueRankInfo>obj; let rankInfo = <LeagueRankInfo>obj;
let cnt = guardLeagueCnt.get(rankInfo.code)||0; let cnt = guardLeagueCnt.get(rankInfo.code)||0;
if(cnt < GVG.GVG_CITY_OCCUPIED_NUMBER) { 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); let dicCityAdd = gameData.gvgCityAdd.get(dicCity.cityType);
await sendMailToLeagueByContent(MAIL_TYPE.GVG_GUARD_CITY_REWARD, rankInfo.code, { params: [dicCity.cityName], goods: dicCityAdd.occupyReward }); await sendMailToLeagueByContent(MAIL_TYPE.GVG_GUARD_CITY_REWARD, rankInfo.code, { params: [dicCity.cityName], goods: dicCityAdd.occupyReward });
guardLeagueCnt.set(rankInfo.code, cnt + 1); 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}:`); let leagueKeys = await findKeys(`${REDIS_KEY.GVG_BATTLE_LEAGUE_RANK}:${configId}:`);
for(let key of leagueKeys) { for(let key of leagueKeys) {
let [,, _groupId, _serverType] = key.split(':'); let [,, groupKey] = key.split(':');
let groupId = parseInt(_groupId); let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupKey });
let serverType = parseInt(_serverType);
let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupId, serverType });
let ranks = await r.getRankByRange(); let ranks = await r.getRankByRange();
// 联军排行榜发放奖励 // 联军排行榜发放奖励
for(let _obj of ranks) { for(let _obj of ranks) {
@@ -401,10 +398,8 @@ export async function gvgBattleEnd() {
// 个人排行榜发放奖励 // 个人排行榜发放奖励
let playerKeys = await findKeys(`${REDIS_KEY.GVG_BATTLE_RANK}:${configId}:`); let playerKeys = await findKeys(`${REDIS_KEY.GVG_BATTLE_RANK}:${configId}:`);
for(let key of playerKeys) { for(let key of playerKeys) {
let [,, _groupId, _serverType] = key.split(':'); let [,, groupKey] = key.split(':');
let groupId = parseInt(_groupId); let r = new Rank(REDIS_KEY.GVG_BATTLE_RANK, { configId, groupKey });
let serverType = parseInt(_serverType);
let r = new Rank(REDIS_KEY.GVG_BATTLE_RANK, { configId, groupId, serverType });
let ranks = await r.getRankByRange(); let ranks = await r.getRankByRange();
for(let _obj of ranks) { 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; 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)] cityId, areaId, attackType: 3, teams: [new GVGTeamInList(defenseTeam), new GVGTeamInList(attackTeam)]
}); });
await pushTeamBeHurtMessage(defenseTeam, 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) { export async function pushTeamBeHurtMessage(team: GVGTeamType, replaceTeam?: GVGTeamType) {
if(team.curTeamBreak && team.originPointId > 0) { 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) cityId: team.cityId, areaId: team.fromAreaId, point: new GVGTeamInListOnPoint(team.originPointId, replaceTeam && !replaceTeam.curTeamBreak, replaceTeam)
}); });
} }
await pushTeamMoveMessage(team); await pushTeamMoveMessage(team);
if(team.isRobot && team.isBroken) { 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 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) { export async function pushTeamMoveMessage(team: GVGTeamType) {
if(team.fromAreaId != team.areaId) { if(team.fromAreaId != team.areaId) {
if(team.fromAreaId > 0) { 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 cityId: team.cityId, areaId: team.fromAreaId, teamCode: team.teamCode
}); });
} }
if(team.areaId > 0) { 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) cityId: team.cityId, areaId: team.fromAreaId, player: new GVGTeamInList(team)
}); });
} }

View File

@@ -28,7 +28,7 @@ import { Rank } from "../rankService";
import { findKeys, getAllServerName, redisClient } from "../redisService"; import { findKeys, getAllServerName, redisClient } from "../redisService";
import { combinePushItem } from "./gvgItemService"; import { combinePushItem } from "./gvgItemService";
import { addVestigeLeagueRankRec } from "./gvgRecService"; import { addVestigeLeagueRankRec } from "./gvgRecService";
import { getGroupIdOfServer, getGVGServerType } from "./gvgService"; import { getGroupIdOfServer, getGroupKey, getGVGServerType } from "./gvgService";
// 备战期的遗迹和激战期的开始结束战斗时间 // 备战期的遗迹和激战期的开始结束战斗时间
export function getFightTimeByPeriod(period: GVG_PERIOD, time?: number) { export function getFightTimeByPeriod(period: GVG_PERIOD, time?: number) {
@@ -49,14 +49,14 @@ export function checkFightTime() {
// 征战中原每天随机的遗迹点 // 征战中原每天随机的遗迹点
export async function getVestiges(serverId: number) { export async function getVestiges(serverId: number) {
let groupId = await getGroupIdOfServer(serverId); let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId); let serverType = await getGVGServerType(serverId);
let vestige = await GVGVestigeModel.getVestige(groupId); let vestige = await GVGVestigeModel.getVestige(groupKey);
if(!vestige) { if(!vestige) {
let dicGVGVestige = gameData.gvgVestigeByServerType.get(serverType)||[]; let dicGVGVestige = gameData.gvgVestigeByServerType.get(serverType)||[];
let cnt = gameData.gvgVestigeCntByServerType.get(serverType)||0; let cnt = gameData.gvgVestigeCntByServerType.get(serverType)||0;
let randResult = getRandEelm(dicGVGVestige, cnt); let randResult = getRandEelm(dicGVGVestige, cnt);
vestige = await GVGVestigeModel.initTodayVestige(groupId, serverType, randResult); vestige = await GVGVestigeModel.initTodayVestige(groupKey, randResult);
} }
return vestige.vestiges||[]; return vestige.vestiges||[];
} }
@@ -98,9 +98,9 @@ function randomRank(min: number, max: number, len: number) {
} }
// 根据ranks获取oppPlayer显示数据 // 根据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 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 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 roles = await RoleModel.findByRoleIds(roleIds, 'roleId roleName head frame spine heads frames spines title lv guildName serverId updatedAt')
let dicRankMap = gameData.gvgVestige.get(vestigeId); let dicRankMap = gameData.gvgVestige.get(vestigeId);
@@ -171,19 +171,19 @@ export function isRobot(roleId: string) {
return roleId.startsWith('robot'); 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(!myData || myData.rank != myRank) return VESTIGE_OPP_STATUS.MY_RANK_CHANGE;
if(isRobot(targetRoleId)) { 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; if(targetData) return VESTIGE_OPP_STATUS.OPP_RANK_CHANGE;
} else { } else {
let targetData = await GVGVestigeRankModel.findByRole(vestigeId, targetRoleId); let targetData = await GVGVestigeRankModel.findByRole(vestigeId, targetRoleId);
if(targetData?.rank != rank) return VESTIGE_OPP_STATUS.OPP_RANK_CHANGE; 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; if(!lockResult) return VESTIGE_OPP_STATUS.OPP_IS_LOCKED;
return VESTIGE_OPP_STATUS.BATTLE; 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); // 我在这个遗迹的排名 let myVestigeRank = await GVGVestigeRankModel.findByRole(vestigeId, roleId); // 我在这个遗迹的排名
if(!myVestigeRank) { if(!myVestigeRank) {
@@ -324,31 +324,31 @@ export async function getMyVestigeRank(configId: number, groupId: number, server
myLeague = await GVGLeagueModel.findLeagueByGuild(role.guildCode); myLeague = await GVGLeagueModel.findLeagueByGuild(role.guildCode);
if(!myLeague) return null 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; return myVestigeRank;
} }
// 保存排行榜 // 保存排行榜
export async function saveScoreToRank(rec: GVGVestigeRecType) { export async function saveScoreToRank(rec: GVGVestigeRecType) {
await savePlayerRank(rec.configId, rec.groupId, rec.serverType, rec.vestigeId, rec.attackInfo); await savePlayerRank(rec.configId, rec.groupKey, 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.defenseInfo);
} }
export function getDayKeyInfo() { export function getDayKeyInfo() {
return moment().format('YYMMDD'); return moment().format('YYMMDD');
} }
export async function savePlayerRank(configId: number, groupId: number, serverType: number, vestigeId: number, playerInfo: Partial<OppPlayerInfo>) { export async function savePlayerRank(configId: number, groupKey: string, vestigeId: number, playerInfo: Partial<OppPlayerInfo>) {
if(playerInfo.isRobot) return if(playerInfo.isRobot) return
let dicRankMap = gameData.gvgVestige.get(vestigeId); let dicRankMap = gameData.gvgVestige.get(vestigeId);
let newRank = dicRankMap?.get(playerInfo.newRank)?.score||0; let newRank = dicRankMap?.get(playerInfo.newRank)?.score||0;
let oldRank = dicRankMap?.get(playerInfo.oldRank)?.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 myScore = await GVGVestigeSumRankModel.incScore(playerInfo.roleId, playerInfo.leagueCode, configId, groupKey, newRank - oldRank);
let r1 = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, { serverType, groupId, day: getDayKeyInfo() }); let r1 = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, { groupKey, day: getDayKeyInfo() });
await r1.setRankWithRoleInfo(playerInfo.roleId, myScore.score, myScore.updatedAt.getTime()); await r1.setRankWithRoleInfo(playerInfo.roleId, myScore.score, myScore.updatedAt.getTime());
let leagueScore = await GVGVestigeLeagueRankModel.incScore(configId, playerInfo.leagueCode, groupId, serverType, newRank - oldRank); let leagueScore = await GVGVestigeLeagueRankModel.incScore(configId, playerInfo.leagueCode, groupKey, newRank - oldRank);
let r2 = new Rank(REDIS_KEY.GVG_VESTIGE_LEAGUE, { serverType, groupId, day: getDayKeyInfo() }); let r2 = new Rank(REDIS_KEY.GVG_VESTIGE_LEAGUE, { groupKey, day: getDayKeyInfo() });
await r2.setRankWithLeagueInfo(playerInfo.leagueCode, leagueScore.score, leagueScore.updatedAt.getTime()); await r2.setRankWithLeagueInfo(playerInfo.leagueCode, leagueScore.score, leagueScore.updatedAt.getTime());
} }
@@ -389,23 +389,19 @@ export async function saveVestigeRankSchedule() {
let day = getDayKeyInfo(); let day = getDayKeyInfo();
let keys = await findKeys(`${REDIS_KEY.GVG_VESTIGE_LEAGUE}:${day}:`); let keys = await findKeys(`${REDIS_KEY.GVG_VESTIGE_LEAGUE}:${day}:`);
for(let key of keys) { for(let key of keys) {
let [,, _groupId, _serverType] = key.split(':'); let [,, groupKey] = key.split(':');
let groupId = parseInt(_groupId); let r = new Rank(REDIS_KEY.GVG_VESTIGE_LEAGUE, { groupKey, day});
let serverType = parseInt(_serverType);
let r = new Rank(REDIS_KEY.GVG_VESTIGE_LEAGUE, { groupId, serverType, day});
let ranks = await r.getRankByRangeRaw(); let ranks = await r.getRankByRangeRaw();
await GVGVestigeLeagueRankModel.saveRank(groupId, serverType, ranks); await GVGVestigeLeagueRankModel.saveRank(groupKey, ranks);
await addVestigeLeagueRankRec(config.configId, ranks); await addVestigeLeagueRankRec(config.configId, ranks);
} }
let memberKeys = await findKeys(`${REDIS_KEY.GVG_VESTIGE_MEMBER_ALL}:${day}:`); let memberKeys = await findKeys(`${REDIS_KEY.GVG_VESTIGE_MEMBER_ALL}:${day}:`);
for(let key of memberKeys) { for(let key of memberKeys) {
let [,, _groupId, _serverType] = key.split(':'); let [,, groupKey] = key.split(':');
let groupId = parseInt(_groupId); let r = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, { groupKey, day});
let serverType = parseInt(_serverType);
let r = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, { groupId, serverType, day});
let ranks = await r.getRankByRangeRaw(); let ranks = await r.getRankByRangeRaw();
await GVGVestigeSumRankModel.saveRank(groupId, serverType, ranks); await GVGVestigeSumRankModel.saveRank(groupKey, ranks);
} }
let playerSumRanks = await GVGVestigeSumRankModel.findAllScores(); let playerSumRanks = await GVGVestigeSumRankModel.findAllScores();
await GVGUserDataModel.addVestigeScores(config.configId, playerSumRanks); await GVGUserDataModel.addVestigeScores(config.configId, playerSumRanks);

View File

@@ -292,4 +292,14 @@ export async function getLeagueRankBox(configId: number, leagueCode: string, rol
let canReceivePlayerRanks = await GVGVestigeSumRankModel.getCanReceiveRanks(configId, roleId); let canReceivePlayerRanks = await GVGVestigeSumRankModel.getCanReceiveRanks(configId, roleId);
let { canReceiveBox } = calVestigeLeagueBoxRewards(canReceiveLeagueRanks, canReceivePlayerRanks); let { canReceiveBox } = calVestigeLeagueBoxRewards(canReceiveLeagueRanks, canReceivePlayerRanks);
return { canReceiveBox } 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}`;
}
} }

View File

@@ -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); 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) { export async function sendMessageToGVGAreaWithSuc(groupKey: string, areaId: number, route: string, data: any) {
let channelSid = await getGVGAreaChannelSid(groupId, serverType, areaId); let channelSid = await getGVGAreaChannelSid(groupKey, areaId);
let roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREAS, `${groupId}_${serverType}_${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)); 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) { export async function sendMessageToGVGAreaByTeamWithSuc(groupKey: string, areaId: number, route: string, data: any) {
let channelSid = await getGVGAreaTeamChannelSid(groupId, serverType, areaId); let channelSid = await getGVGAreaTeamChannelSid(groupKey, areaId);
let roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREA_BY_TEAM, `${groupId}_${serverType}_${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)); 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) { export async function sendMessageToGVGCityWithSuc(groupKey: string, cityId: number, route: string, data: any) {
let channelSid = await getGVGCityTeamChannelSid(groupId, serverType, cityId); let channelSid = await getGVGCityTeamChannelSid(groupKey, cityId);
let roomId = groupRoomId(CHANNEL_PREFIX.GVG_CITY, `${groupId}_${serverType}_${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)); await pinus.app.rpc.chat.chatRemote.pushMessage.toServer(channelSid, roomId, route, resResult(STATUS.SUCCESS, data));
} }

View File

@@ -1183,9 +1183,9 @@ export async function setRankRedisFromDb(type: string, args?: { serverId?: numbe
} }
} else if (type == REDIS_KEY.GVG_VESTIGE_MEMBER_ALL) { } else if (type == REDIS_KEY.GVG_VESTIGE_MEMBER_ALL) {
let ranks = await GVGVestigeSumRankModel.findRankByGroupId(); 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 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); r.setIsInit(true);
for(let { roleId, score, updatedAt } of arr) { for(let { roleId, score, updatedAt } of arr) {
let role = roles.find(cur => cur.roleId == roleId); 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) { } else if (type == REDIS_KEY.GVG_VESTIGE_LEAGUE) {
let ranks = await GVGVestigeLeagueRankModel.findRank(); 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 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); r.setIsInit(true);
for(let { leagueCode, score, updatedAt } of arr) { for(let { leagueCode, score, updatedAt } of arr) {
let league = leagues.find(cur => cur.leagueCode == leagueCode); let league = leagues.find(cur => cur.leagueCode == leagueCode);

View File

@@ -706,8 +706,8 @@ export async function getGVGHistoryAreas(roleId: string) {
return areaIds.split('&'); return areaIds.split('&');
} }
export async function addGVGHistoryAreas(roleId: string, groupId: number, serverType: number, areaIds: number[]) { export async function addGVGHistoryAreas(roleId: string, groupKey: string, areaIds: number[]) {
let key = areaIds.map(areaId => `${groupId}_${serverType}_${areaId}`).join('&'); let key = areaIds.map(areaId => `${groupKey}_${areaId}`).join('&');
const result = await redisClient().hsetAsync(REDIS_KEY.GVG_HISTORY_AREA, roleId, key); const result = await redisClient().hsetAsync(REDIS_KEY.GVG_HISTORY_AREA, roleId, key);
return result; return result;
} }
@@ -728,8 +728,8 @@ export async function getGVGHistoryAreaTeam(roleId: string) {
return channelName return channelName
} }
export async function addGVGHistoryAreaTeam(roleId: string, groupId: number, serverType: number, areaId: number) { export async function addGVGHistoryAreaTeam(roleId: string, groupKey: string, areaId: number) {
const result = await redisClient().hsetAsync(REDIS_KEY.GVG_HISTORY_AREA_TEAM, roleId, `${groupId}_${serverType}_${areaId}`); const result = await redisClient().hsetAsync(REDIS_KEY.GVG_HISTORY_AREA_TEAM, roleId, `${groupKey}_${areaId}`);
return result; return result;
} }
@@ -749,8 +749,8 @@ export async function getGVGHistoryCityTeam(roleId: string) {
return channelName return channelName
} }
export async function addGVGHistoryCityTeam(roleId: string, groupId: number, serverType: number, cityId: number) { export async function addGVGHistoryCityTeam(roleId: string, groupKey: string, cityId: number) {
const result = await redisClient().hsetAsync(REDIS_KEY.GVG_HISTORY_CITY, roleId, `${groupId}_${serverType}_${cityId}`); const result = await redisClient().hsetAsync(REDIS_KEY.GVG_HISTORY_CITY, roleId, `${groupKey}_${cityId}`);
return result; return result;
} }

View File

@@ -41,7 +41,6 @@ module.exports = {
], ],
'guild': [ 'guild': [
{ 'id': 'guild-server-1', 'host': '127.0.0.1', 'port': 6057, "args": " --inspect=9239" }, { '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': [ 'activity': [
{ 'id': 'activity-server-1', 'host': '127.0.0.1', 'port': 6059, "args": " --inspect=9241" }, { 'id': 'activity-server-1', 'host': '127.0.0.1', 'port': 6059, "args": " --inspect=9241" },

View File

@@ -71,10 +71,7 @@ export default class GVGBattleRec extends BaseModel {
configId: number; // 赛季 configId: number; // 赛季
@prop({ required: true }) @prop({ required: true })
groupId: number; // 战区 groupKey: string; // 1-单服 2-跨服
@prop({ required: true })
serverType: number; // 1-单服 2-跨服
@prop({ required: true }) @prop({ required: true })
warId: number; // 关卡id warId: number; // 关卡id
@@ -91,9 +88,9 @@ export default class GVGBattleRec extends BaseModel {
@prop({ required: true }) @prop({ required: true })
battleEndTime: number; 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 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; return result;
} }

View File

@@ -11,17 +11,14 @@ class Player {
teamCnt: number; teamCnt: number;
} }
@index({ configId: 1, cityId: 1, groupId: 1, serverType: 1 }) @index({ configId: 1, cityId: 1, groupKey: 1 })
// GVGCity 类,继承自 BaseModel // GVGCity 类,继承自 BaseModel
export default class GVGCity extends BaseModel { export default class GVGCity extends BaseModel {
@prop({ required: true, default: 1 }) @prop({ required: true, default: 1 })
configId: number; // config唯一id configId: number; // config唯一id
@prop({ required: true, default: 1 }) @prop({ required: true })
groupId: number; // 战区 groupKey: string; // 战区
@prop({ required: true, default: 1 })
serverType: number; // 1-单服 2-跨服
@prop({ required: true }) @prop({ required: true })
cityId: number; // 城池id cityId: number; // 城池id
@@ -45,20 +42,20 @@ export default class GVGCity extends BaseModel {
userCnt: number; // 城池人数 userCnt: number; // 城池人数
// 通过 cityId 获取城市 // 通过 cityId 获取城市
public static async findByCityId(configId: number, groupId: number, serverType: number, cityId: number) { public static async findByCityId(configId: number, groupKey: string, cityId: number) {
const city: GVGCityType = await GVGCityModel.findOne({ configId, groupId, serverType, cityId }).lean(); const city: GVGCityType = await GVGCityModel.findOne({ configId, groupKey, cityId }).lean();
return city; return city;
} }
// 添加人数 // 添加人数
public static async increasePlayer(configId: number, groupId: number, serverType: number, cityId: number, roleId: string, leagueCode: string, teamCnt: number) { public static async increasePlayer(configId: number, groupKey: string, 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(); 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; return city;
} }
// 减少人数 // 减少人数
public static async decreasePlayer(configId: number, groupId: number, serverType: number, cityId: number, roleId: string) { public static async decreasePlayer(configId: number, groupKey: string, 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(); 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; return city;
} }
@@ -74,9 +71,9 @@ export default class GVGCity extends BaseModel {
} }
// 查询联军驻守情况 // 查询联军驻守情况
public static async findGuardCity(configId: number, groupId: number, serverType: number, select = '') { public static async findGuardCity(configId: number, groupKey: string, select = '') {
let cities: GVGCityType[] = await GVGCityModel.find({ configId: configId + 1, groupId, serverType, hasGuard: true }).select(select).lean(); let cities: GVGCityType[] = await GVGCityModel.find({ configId: configId + 1, groupKey, hasGuard: true }).select(select).lean();
if(cities.length == 0) cities = await GVGCityModel.find({ configId, groupId, serverType, hasGuard: true }).select(select).lean(); if(cities.length == 0) cities = await GVGCityModel.find({ configId, groupKey, hasGuard: true }).select(select).lean();
return cities 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) { public static async guardCity(configId: number, groupKey: string, cityId: number, league: LeagueRankInfo) {
const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId: configId + 1, cityId, groupId, serverType }, { $set: { const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId: configId + 1, cityId, groupKey }, { $set: {
hasGuard: true, guardLeague: league.code, guardLeagueName: league.name, guardLeagueIcon: league.icon hasGuard: true, guardLeague: league.code, guardLeagueName: league.name, guardLeagueIcon: league.icon
} }, { upsert: true, new: true }).lean(); } }, { upsert: true, new: true }).lean();
return city; return city;
} }
public static async findByConfig(configId: number, groupId: number, serverType: number) { public static async findByConfig(configId: number, groupKey: string) {
const cities: GVGCityType[] = await GVGCityModel.find({ configId, groupId, serverType, hasGuard: true }).lean(); const cities: GVGCityType[] = await GVGCityModel.find({ configId, groupKey, hasGuard: true }).lean();
return cities return cities
} }
} }

View File

@@ -2,17 +2,14 @@ import BaseModel from "./BaseModel";
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { GVGTeamType } from "./GVGTeam"; import { GVGTeamType } from "./GVGTeam";
@index({ configId: 1, pontId: 1, groupId: 1, serverType: 1 }) @index({ configId: 1, pontId: 1, groupKey: 1 })
// GVGCityAreaPoint 类,继承自 BaseModel // GVGCityAreaPoint 类,继承自 BaseModel
export default class GVGCityAreaPoint extends BaseModel { export default class GVGCityAreaPoint extends BaseModel {
@prop({ required: true, default: 1 }) @prop({ required: true, default: 1 })
configId: number; // config唯一id configId: number; // config唯一id
@prop({ required: true, default: 1 }) @prop({ required: true, default: 1 })
groupId: number; // 战区 groupKey: string; // 战区
@prop({ required: true, default: 1 })
serverType: number; // 1-单服 2-跨服
@prop({ required: true }) @prop({ required: true })
cityId: number; // 城池id cityId: number; // 城池id
@@ -39,22 +36,22 @@ export default class GVGCityAreaPoint extends BaseModel {
teamCode: string; // 玩家的编队 teamCode: string; // 玩家的编队
public static async settlePoint(cityId: number, areaId: number, pointId: number, team: GVGTeamType) { public static async settlePoint(cityId: number, areaId: number, pointId: number, team: GVGTeamType) {
let { configId, groupId, serverType, leagueCode, leagueName, roleId, roleName, teamCode } = team; let { configId, groupKey, leagueCode, leagueName, roleId, roleName, teamCode } = team;
await GVGCityAreaPointModel.findOneAndUpdate({ configId, groupId, serverType, pointId }, { $setOnInsert: { teamCode: '' }}, { upsert: true }); await GVGCityAreaPointModel.findOneAndUpdate({ configId, groupKey, pointId }, { $setOnInsert: { teamCode: '' }}, { upsert: true });
let result: GVGCityAreaPointType = await GVGCityAreaPointModel.findOneAndUpdate( let result: GVGCityAreaPointType = await GVGCityAreaPointModel.findOneAndUpdate(
{ configId, groupId, serverType, pointId }, { configId, groupKey, pointId },
{ $set: { cityId, areaId, leagueCode, leagueName, roleId, roleName, teamCode } }, { $set: { cityId, areaId, leagueCode, leagueName, roleId, roleName, teamCode } },
{ new: true }).lean(); { new: true }).lean();
return result; return result;
} }
public static async leavePoint(configId: number, groupId: number, serverType: number, pointId: number) { public static async leavePoint(configId: number, groupKey: string, pointId: number) {
let result: GVGCityAreaPointType = await GVGCityAreaPointModel.findOneAndUpdate({ configId, groupId, serverType, pointId }, { $set: { teamCode: '' }}, { new: true }).lean(); let result: GVGCityAreaPointType = await GVGCityAreaPointModel.findOneAndUpdate({ configId, groupKey, pointId }, { $set: { teamCode: '' }}, { new: true }).lean();
return result; return result;
} }
public static async findByConfig(configId: number, groupId: number, serverType: number) { public static async findByConfig(configId: number, groupKey: string) {
let result: GVGCityAreaPointType[] = await GVGCityAreaPointModel.find({ configId, groupId, serverType }).lean(); let result: GVGCityAreaPointType[] = await GVGCityAreaPointModel.find({ configId, groupKey }).lean();
return result return result
} }
} }

View File

@@ -10,6 +10,9 @@ export default class GVGRec extends BaseModel {
@prop({ required: true, default: '' }) @prop({ required: true, default: '' })
leagueCode: string; // 联军id leagueCode: string; // 联军id
@prop({ required: false, default: '' })
groupKey: string; // 战区
@prop({ required: false, default: '' }) @prop({ required: false, default: '' })
roleId: string; // 玩家id 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) { public static async findBattleRecByCity(configId: number, groupKey: string, 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(); 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; return result;
} }

View File

@@ -105,10 +105,7 @@ export default class GVGTeam extends BaseModel {
lineupCe: number; lineupCe: number;
@prop({ required: true }) @prop({ required: true })
groupId: number; // 战区 groupKey: string; // 战区
@prop({ required: true })
serverType: number; // 单服还是跨服
@prop({ required: true, default: false }) @prop({ required: true, default: false })
isRobot: boolean; // 是否是机器人 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) { public static async enterCity(roleId: string, cityId: number, areaId: number, groupKey: string) {
const res = await GVGTeamModel.updateMany({ roleId }, { cityId, areaId, fromAreaId: areaId, pointId: 0, groupId, serverType }).lean(); const res = await GVGTeamModel.updateMany({ roleId }, { cityId, areaId, fromAreaId: areaId, pointId: 0, groupKey }).lean();
return !!res['ok']; return !!res['ok'];
} }
@@ -200,17 +197,17 @@ export default class GVGTeam extends BaseModel {
return await GVGTeamModel.findByRole(roleId, '-_id'); return await GVGTeamModel.findByRole(roleId, '-_id');
} }
public static async findRobotTeams(groupId: number, serverType: number, cityId: number) { public static async findRobotTeams(groupKey: string, cityId: number) {
const team: GVGTeamType[] = await GVGTeamModel.find({ groupId, serverType, cityId, isRobot: true }).lean(); const team: GVGTeamType[] = await GVGTeamModel.find({ groupKey, cityId, isRobot: true }).lean();
return team; 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 }) => { await GVGTeamModel.bulkWrite(dicPoints.map(({ pointId, areaId, name, head, spine, ce, durability }) => {
return { return {
updateOne: { updateOne: {
filter: { groupId, serverType, cityId, areaId, pointId }, filter: { groupKey, cityId, areaId, pointId },
update: { $setOnInsert: { update: { $setOnInsert: {
teamCode: genCode(8), maxDurability: durability, roleName: name, head, spine, frame: EXTERIOR.EXTERIOR_FACECASE, lineupCe: ce, isRobot: true, 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, 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) { public static async findCatapultTeams(groupKey: string, cityId: number) {
const team: GVGTeamType[] = await GVGTeamModel.find({ groupId, serverType, cityId, isRobot: true, isCatapult: true }).lean(); const team: GVGTeamType[] = await GVGTeamModel.find({ groupKey, cityId, isRobot: true, isCatapult: true }).lean();
return team; 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 => { await GVGTeamModel.bulkWrite(areaIds.map(areaId => {
return { return {
updateOne: { updateOne: {
filter: { groupId, serverType, cityId, areaId }, filter: { groupKey, cityId, areaId },
update: { $setOnInsert: { update: { $setOnInsert: {
teamCode: genCode(8), maxDurability: durability, captapultAtk: atk, leagueCode, leagueName, 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, 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 // 攻击方攻击cd
@@ -299,8 +296,8 @@ export default class GVGTeam extends BaseModel {
} }
} }
public static async findByAreaId(groupId: number, serverType: number, cityId: number, areaId: number) { public static async findByAreaId(groupKey: string, cityId: number, areaId: number) {
const team: GVGTeamType[] = await GVGTeamModel.find({ groupId, serverType, cityId, areaId, stopMoveTime: { $lte: nowSeconds() }, isBroken: false }).lean(); const team: GVGTeamType[] = await GVGTeamModel.find({ groupKey, cityId, areaId, stopMoveTime: { $lte: nowSeconds() }, isBroken: false }).lean();
return team; return team;
} }
@@ -310,8 +307,8 @@ export default class GVGTeam extends BaseModel {
} }
// 这个编队上是否已经有队伍了 // 这个编队上是否已经有队伍了
public static async checkPoint(configId: number, groupId: number, serverType: number, pointId: number) { public static async checkPoint(configId: number, groupKey: string, pointId: number) {
return await GVGTeamModel.exists({ configId, groupId, serverType, pointId, isBroken: false }); return await GVGTeamModel.exists({ configId, groupKey, pointId, isBroken: false });
} }
// 投石车伤害 // 投石车伤害

View File

@@ -14,10 +14,7 @@ class Vestige {
export default class GVGVestige extends BaseModel { export default class GVGVestige extends BaseModel {
@prop({ required: true }) @prop({ required: true })
groupId: number; // 战区id groupKey: string; // 战区
@prop({ required: true })
type: number; // 1-单服 2-跨服
@prop({ required: true, type: Vestige, _id: false }) @prop({ required: true, type: Vestige, _id: false })
vestiges: Vestige[]; // 今天的遗迹点 vestiges: Vestige[]; // 今天的遗迹点
@@ -25,15 +22,15 @@ export default class GVGVestige extends BaseModel {
@prop({ required: true }) @prop({ required: true })
day: number; // 每天5点 day: number; // 每天5点
public static async getVestige(groupId: number) { public static async getVestige(groupKey: string) {
let day = getZeroPoint(); let day = getZeroPoint();
let result: GVGVestigeType = await GVGVestigeModel.findOne({ groupId, day }).lean(); let result: GVGVestigeType = await GVGVestigeModel.findOne({ groupKey, day }).lean();
return result; return result;
} }
public static async initTodayVestige(groupId: number, type: number, vestiges: Vestige[]) { public static async initTodayVestige(groupKey: string, vestiges: Vestige[]) {
let day = getZeroPoint(); 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; return result;
} }
} }

View File

@@ -2,7 +2,7 @@ import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { DAY_TO_SECOND, getZeroPoint } from '../pubUtils/timeUtil'; 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 }) @index({ leagueCode: 1 })
export default class GVGVestigeLeagueRank extends BaseModel { export default class GVGVestigeLeagueRank extends BaseModel {
@@ -16,10 +16,7 @@ export default class GVGVestigeLeagueRank extends BaseModel {
leagueCode: string; // 玩家id leagueCode: string; // 玩家id
@prop({ required: true }) @prop({ required: true })
groupId: number; // 战区id groupKey: string; // 1-单服 2-跨服
@prop({ required: true })
serverType: number; // 1-单服 2-跨服
@prop({ required: true }) @prop({ required: true })
score: number; // 得分 score: number; // 得分
@@ -30,31 +27,31 @@ export default class GVGVestigeLeagueRank extends BaseModel {
@prop({ required: true }) @prop({ required: true })
isReceived: boolean; // 是否领取过 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 today = getZeroPoint();
let result: GVGVestigeLeagueRankType = await GVGVestigeLeagueRankModel.findOneAndUpdate({ 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(); }, { $inc: { score: inc }, $set: { configId }, $setOnInsert: { rank: 0, isReceived: false } }, { new: true, upsert: true }).lean();
return result; 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 today = getZeroPoint();
let ranks = await GVGVestigeLeagueRankModel.aggregate([ let ranks = await GVGVestigeLeagueRankModel.aggregate([
{ $match: { day: today } }, { $match: { day: today } },
{ $group: { { $group: {
_id: { groupId: "$groupId", serverType: "$serverType" }, _id: "$groupKey",
arr: { $push: { leagueCode: "$leagueCode", score: "$score", updatedAt: "$updatedAt" } }, leagueCodes: { $addToSet: "$leagueCode" } arr: { $push: { leagueCode: "$leagueCode", score: "$score", updatedAt: "$updatedAt" } }, leagueCodes: { $addToSet: "$leagueCode" }
}}, }},
]); ]);
return ranks; 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(); let today = getZeroPoint();
await GVGVestigeLeagueRankModel.bulkWrite(ranks.map(({ field, rank }) => { 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 } }} }
})); }));
} }

View File

@@ -14,10 +14,7 @@ export default class GVGVestigeLock extends BaseModel {
day: number; // 每天5点 day: number; // 每天5点
@prop({ required: true }) @prop({ required: true })
groupId: number; // 战区id groupKey: string; // 1-单服 2-跨服
@prop({ required: true })
serverType: number; // 1-单服 2-跨服
@prop({ required: true }) @prop({ required: true })
vestigeId: number; // 遗迹id vestigeId: number; // 遗迹id
@@ -34,26 +31,26 @@ export default class GVGVestigeLock extends BaseModel {
@prop({ required: true }) @prop({ required: true })
defenseRoleId: string; // 防守玩家 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(); 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({ 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(); }, { $set: { unlockTime: Date.now() + GVG.GVG_VESTIGE_PREPARE_COUNTDOWN * 1000, attackRoleId, defenseRoleId } }, { new: true }).lean();
return result; 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 day = getZeroPoint();
let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({ 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(); }, { $set: { unlockTime: Date.now() + GVG.GVG_VESTIGE_BATTLE_COUNTDOWN * 1000 } }, { new: true }).lean();
return result; 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 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; return result;
} }
} }

View File

@@ -14,7 +14,7 @@ export class Lineup {
ce: number; // 战力 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 }) @index({ roleId: 1 })
export default class GVGVestigeRank extends BaseModel { export default class GVGVestigeRank extends BaseModel {
@@ -25,14 +25,11 @@ export default class GVGVestigeRank extends BaseModel {
day: number; // 每天5点 day: number; // 每天5点
@prop({ required: true }) @prop({ required: true })
groupId: number; // 战区id groupKey: string; // 战区
@prop({ required: true }) @prop({ required: true })
vestigeId: number; // 遗迹id vestigeId: number; // 遗迹id
@prop({ required: true })
serverType: number; // 1-单服 2-跨服
@prop({ required: true }) @prop({ required: true })
roleId: string; // 玩家 roleId: string; // 玩家
@@ -72,16 +69,16 @@ export default class GVGVestigeRank extends BaseModel {
return result; 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 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; 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 today = getZeroPoint();
let doc = new GVGVestigeRankModel(); 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(); let result: GVGVestigeRankType = await GVGVestigeRankModel.findOneAndUpdate({ day: today, vestigeId, roleId: role.roleId }, { $setOnInsert: update }, { new: true, upsert: true }).lean();
return result; return result;
} }
@@ -92,9 +89,9 @@ export default class GVGVestigeRank extends BaseModel {
return result; 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 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(); .lean();
return result; return result;
} }
@@ -146,21 +143,21 @@ export default class GVGVestigeRank extends BaseModel {
return result; 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 today = getZeroPoint();
let ranks = await GVGVestigeRankModel.aggregate([ let ranks = await GVGVestigeRankModel.aggregate([
{ $match: { day: today } }, { $match: { day: today } },
{ $group: { { $group: {
_id: { groupId: "$groupId", vestigeId: "$vestigeId", serverType: "$serverType" }, _id: { groupKey: "$groupKey", vestigeId: "$vestigeId" },
arr: { $push: { roleId: "$roleId", rank: "$rank" } }, roleIds: { $addToSet: "$roleId" } arr: { $push: { roleId: "$roleId", rank: "$rank" } }, roleIds: { $addToSet: "$roleId" }
}}, }},
]); ]);
return ranks; return ranks;
} }
public static async findRankByVestige(groupId: number, serverType: number, vestigeId: number) { public static async findRankByVestige(groupKey: string, vestigeId: number) {
let today = getZeroPoint(); 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; return result;
} }
} }

View File

@@ -17,7 +17,7 @@ class LeagueGood {
} }
@index({ battleCode: 1 }) @index({ battleCode: 1 })
@index({ groupId: 1, vestigeId: 1, rank: 1 }) @index({ groupKey: 1, vestigeId: 1, rank: 1 })
export default class GVGVestigeRec extends BaseModel { export default class GVGVestigeRec extends BaseModel {
@prop({ required: true }) @prop({ required: true })
@@ -36,10 +36,7 @@ export default class GVGVestigeRec extends BaseModel {
configId: number; // 赛期 configId: number; // 赛期
@prop({ required: true }) @prop({ required: true })
groupId: number; // 战区id groupKey: string; // 战区id
@prop({ required: true })
serverType: number; // 战区id
@prop({ required: true }) @prop({ required: true })
vestigeId: number; // 遗迹id vestigeId: number; // 遗迹id
@@ -68,10 +65,10 @@ export default class GVGVestigeRec extends BaseModel {
@prop({ required: true, default: false }) @prop({ required: true, default: false })
hasRpl: boolean; // 是否存在对应录像 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 battleCode = genCode(10);
const result: GVGVestigeRecType = await GVGVestigeRecModel.findOneAndUpdate({ battleCode }, { 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(); }, { new: true, upsert: true }).lean();
return result; return result;
} }

View File

@@ -2,7 +2,7 @@ import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { getZeroPoint } from '../pubUtils/timeUtil'; import { getZeroPoint } from '../pubUtils/timeUtil';
@index({ day: 1, groupId: 1, serverType: 1, score: 1 }) @index({ day: 1, groupKey: 1, score: 1 })
@index({ roleId: 1 }) @index({ roleId: 1 })
export default class GVGVestigeSumRank extends BaseModel { export default class GVGVestigeSumRank extends BaseModel {
@@ -19,10 +19,7 @@ export default class GVGVestigeSumRank extends BaseModel {
leagueCode: string; // 联军id leagueCode: string; // 联军id
@prop({ required: true }) @prop({ required: true })
groupId: number; // 战区id groupKey: string; // 战区id
@prop({ required: true })
serverType: number; // 1-单服 2-跨服
@prop({ required: true }) @prop({ required: true })
score: number; // 得分 score: number; // 得分
@@ -33,21 +30,21 @@ export default class GVGVestigeSumRank extends BaseModel {
@prop({ required: true }) @prop({ required: true })
isReceived: boolean; // 是否领取过 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 today = getZeroPoint();
let result: GVGVestigeSumRankType = await GVGVestigeSumRankModel.findOneAndUpdate({ 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(); }, { $inc: { score: inc } , $setOnInsert: { rank: 0, isReceived: false } }, { new: true, upsert: true }).lean();
return result; 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 today = getZeroPoint();
let ranks = await GVGVestigeSumRankModel.aggregate([ let ranks = await GVGVestigeSumRankModel.aggregate([
{ $match: { day: today } }, { $match: { day: today } },
{ $group: { { $group: {
_id: { groupId: "$groupId", serverType: "$serverType" }, _id: "$groupKey",
arr: { $push: { roleId: "$roleId", score: "$score", updatedAt: "$updatedAt", leagueCode: "$leagueCode" } }, roleIds: { $addToSet: "$roleId" } 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; 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(); let today = getZeroPoint();
await GVGVestigeSumRankModel.bulkWrite(ranks.map(({ field, rank }) => { 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 } }} }
})); }));
} }

View File

@@ -264,8 +264,7 @@ export interface SaveTeamUpdateParam {
frame: number; frame: number;
spine: number; spine: number;
configId: number; configId: number;
groupId: number; groupKey: string;
serverType: number;
lineup?: GVGHeroInfo[]; lineup?: GVGHeroInfo[];
lineupCe?: number; lineupCe?: number;
} }

View File

@@ -363,8 +363,7 @@ export class KeyName {
activityId?: number; activityId?: number;
index?: number; // 军团活动第几期 index?: number; // 军团活动第几期
vestigeId?: number; vestigeId?: number;
groupId?: number; groupKey?: string;
serverType?: number;
day?: string; day?: string;
configId?: number; configId?: number;
@@ -378,8 +377,7 @@ export class KeyName {
if(param.activityId) this.activityId = param.activityId; if(param.activityId) this.activityId = param.activityId;
if(param.index) this.index = param.index; if(param.index) this.index = param.index;
if(param.vestigeId) this.vestigeId = param.vestigeId; if(param.vestigeId) this.vestigeId = param.vestigeId;
if(param.groupId) this.groupId = param.groupId; if(param.groupKey) this.groupKey = param.groupKey;
if(param.serverType) this.serverType = param.serverType;
if(param.day) this.day = param.day; if(param.day) this.day = param.day;
if(param.configId) this.configId = param.configId; if(param.configId) this.configId = param.configId;
} }
@@ -415,17 +413,17 @@ export class KeyName {
case REDIS_KEY.TOP_LINE_SNAPSHOT: case REDIS_KEY.TOP_LINE_SNAPSHOT:
return `${this.key}:${this.serverId}:${this.activityId}`; return `${this.key}:${this.serverId}:${this.activityId}`;
case REDIS_KEY.GVG_VESTIGE_MEMBER: 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: 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: 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: 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: 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: 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: default:
return this.key; return this.key;
} }

View File

@@ -14,7 +14,7 @@
{ {
"periodType": 3, "periodType": 3,
"day": "6&", "day": "6&",
"startTime": "20:40:00", "startTime": "17:30:00",
"endTime": "21:40:00" "endTime": "20:00:00"
} }
] ]