🐞 fix(gvg): 联军信息变动同步
This commit is contained in:
@@ -5,7 +5,7 @@ import { GuildModel, GuildType } from "../../../db/Guild";
|
||||
import { GVGLeagueModel, GVGLeagueType } from "../../../db/GVGLeague";
|
||||
import { GVGLeagueApplyModel } from "../../../db/GVGLeagueApply";
|
||||
import { calLeagueCe, getGroupIdOfServer, getGVGConfig, getGVGPeriodData, getGVGServerType, getServersOfSameGroup } from "../../../services/gvg/gvgService";
|
||||
import { checkCanManage, checkGuildLeader, checkLeagueAuth, createLeague, getLeagueApplyData, getLeagueInviteData, getMyAuth, joinGuildToLeague } from "../../../services/gvg/gvgTeamService";
|
||||
import { checkCanManage, checkGuildLeader, checkLeagueAuth, createLeague, getLeagueApplyData, getLeagueInviteData, getMyAuth, joinGuildToLeague, updateGVGBattleLeagueInfo } from "../../../services/gvg/gvgTeamService";
|
||||
import { LeagueGuildInfo, LeagueListInfo, LeagueMemberListInfo, LeagueSimpleInfo } from "../../../domain/gvgField/returnData";
|
||||
import { getAllServerName, getServerName, isRoleOnline, updateUserInfo } from "../../../services/redisService";
|
||||
import { GVG } from "../../../pubUtils/dicParam";
|
||||
@@ -593,6 +593,7 @@ export class GVGManageHandler {
|
||||
const roleId = session.get('roleId');
|
||||
const roleName = session.get('roleName');
|
||||
const guildCode = session.get('guildCode');
|
||||
const serverId = session.get('serverId');
|
||||
|
||||
const { leagueCode: targetLeagueCode, name, notice, icon } = msg;
|
||||
|
||||
@@ -619,6 +620,7 @@ export class GVGManageHandler {
|
||||
if(notice != undefined) {
|
||||
await changeNoticeMessage(roleId, roleName, myLeague, notice);
|
||||
}
|
||||
await updateGVGBattleLeagueInfo(serverId, myLeague.leagueCode, { leagueName: name, icon })
|
||||
|
||||
// 返回
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
|
||||
@@ -11,6 +11,7 @@ import { GVGConfigType } from '../../../db/GVGConfig';
|
||||
import { catapultHurt, gvgBattleEnd, gvgBattleSeconds, gvgBattleStart, initCatapult, leaveCity } from '../../../services/gvg/gvgBattleService';
|
||||
import { clearBattleMemory } from '../../../services/gvg/gvgBattleMemory';
|
||||
import { GVGLeagueType } from '../../../db/GVGLeague';
|
||||
import { updateLeagueNameMem, updateTeamRoleInfoMem } from '../../../services/gvg/gvgTeamService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -177,4 +178,20 @@ export class GuildRemote {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
|
||||
public async updateLeagueNameMem(serverId: number, leagueCode: string, leagueName: string) {
|
||||
try {
|
||||
return updateLeagueNameMem(serverId, leagueCode, leagueName);
|
||||
} catch(e) {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
|
||||
public async updateTeamRoleInfoMem(serverId: number, roleId: string, info: { roleName?: string, lv?: number }) {
|
||||
try {
|
||||
return updateTeamRoleInfoMem(serverId, roleId, info);
|
||||
} catch(e) {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -27,6 +27,7 @@ import { sendMessageToUserWithSuc } from '../../../services/pushService';
|
||||
import { GuildLeader } from '../../../domain/rank';
|
||||
import { checkPopUpCondition } from '../../../services/activity/popUpShopService';
|
||||
import { isGoodsHidden, isHeroHidden } from '../../../services/dataService';
|
||||
import { updateGVGBattleRoleInfo } from '../../../services/gvg/gvgTeamService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -479,6 +480,7 @@ export class RoleHandler {
|
||||
if(role.isGuildLeader) {
|
||||
await updateUserInfo(REDIS_KEY.GUILD_INFO, guildCode, [{ field: 'leader', value: new GuildLeader(role) }]);
|
||||
}
|
||||
await updateGVGBattleRoleInfo(serverId, roleId, { roleName });
|
||||
|
||||
return resResult(STATUS.SUCCESS, { roleName: role.roleName, renameCnt: role.renameCnt });
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ class GVGBattleData {
|
||||
private teams: Map<string, GVGTeamMem> = new Map(); // 队伍, teamCode => team
|
||||
private rolePoints: Map<string, Map<number, string>> = new Map(); // roleId => pointId[],用于更新玩家的积分
|
||||
private roleToTeam: Map<string, string[]> = new Map(); // roleId => teamCode
|
||||
private leagueToTeam: Map<string, Set<string>> = new Map(); // leagueCode => teamCode
|
||||
public areaToTeams: Map<number, Set<string>> = new Map(); // areaId => teamCode set,用于定时下发地图玩家数据
|
||||
|
||||
constructor(groupKey: string) {
|
||||
@@ -54,6 +55,8 @@ class GVGBattleData {
|
||||
for(let [_areaId, teamSet] of this.areaToTeams) {
|
||||
if(teamSet.has(teamCode)) teamSet.delete(teamCode);
|
||||
}
|
||||
if(team.leagueCode && this.leagueToTeam.has(team.leagueCode))
|
||||
this.leagueToTeam.get(team.leagueCode).delete(teamCode);
|
||||
}
|
||||
this.rolePoints.delete(roleId);
|
||||
}
|
||||
@@ -73,6 +76,14 @@ class GVGBattleData {
|
||||
let teamCodesOfRole = this.roleToTeam.get(team.roleId)||[];
|
||||
if(teamCodesOfRole.indexOf(team.teamCode) == -1) teamCodesOfRole.push(team.teamCode);
|
||||
this.roleToTeam.set(team.roleId, teamCodesOfRole);
|
||||
if(team.leagueCode) {
|
||||
if(!this.leagueToTeam.has(team.leagueCode)) {
|
||||
this.leagueToTeam.set(team.leagueCode, new Set());
|
||||
}
|
||||
if(!this.leagueToTeam.get(team.leagueCode).has(team.teamCode))
|
||||
this.leagueToTeam.get(team.leagueCode).add(team.teamCode);
|
||||
}
|
||||
|
||||
this.setAreaMap(team.teamCode, fromAreaId, team.areaId);
|
||||
}
|
||||
}
|
||||
@@ -174,6 +185,23 @@ class GVGBattleData {
|
||||
public findAreas() {
|
||||
return this.areaToTeams.keys();
|
||||
}
|
||||
|
||||
public updateLeagueInfo(leagueCode: string, leagueName: string) {
|
||||
let teamCodes = this.leagueToTeam.get(leagueCode)||new Set();
|
||||
for(let teamCode of teamCodes) {
|
||||
let team = this.teams.get(teamCode);
|
||||
team.leagueName = leagueName;
|
||||
}
|
||||
}
|
||||
|
||||
public updateRoleInfo(roleId: string, info: { roleName?: string, lv?: number }) {
|
||||
let teamCodes = this.leagueToTeam.get(roleId)||new Set();
|
||||
for(let teamCode of teamCodes) {
|
||||
let team = this.teams.get(teamCode);
|
||||
if(info.roleName) team.roleName = info.roleName;
|
||||
if(info.lv) team.lv = info.lv;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function getGVGBattleData(groupKey: string) {
|
||||
|
||||
@@ -10,7 +10,7 @@ import { getGVGBattleData, getGVGBattleMap } from "./gvgBattleMemory";
|
||||
import { GVGAttackSpine, GVGCityMapInfo, GVGTeamInList, GVGTeamInListOnPoint, GVGTeamSpineInMap } from "../../domain/gvgField/returnData";
|
||||
import { GVG } from "../../pubUtils/dicParam";
|
||||
import { GVGHeroInfo, PvpEnemies, PvpHeroInfo } from "../../domain/dbGeneral";
|
||||
import { getGroupKey, getGVGConfig } from "./gvgService";
|
||||
import { getGroupKey, getGVGConfig, getGVGPeriodData } from "./gvgService";
|
||||
import { GVGLeaguePrepareModel } from "../../db/GVGLeaguePrepare";
|
||||
import { pinus } from "pinus";
|
||||
import { dispatch } from "../../pubUtils/dispatcher";
|
||||
@@ -391,17 +391,20 @@ export async function getBattleRanksByCity(configId: number, groupKey: string, c
|
||||
|
||||
// 每5秒一次结算
|
||||
export async function gvgBattleSeconds() {
|
||||
const { configId } = getGVGConfig();
|
||||
const { configId, period } = getGVGPeriodData();
|
||||
let { startFightTime, endFightTime } = getFightTimeByPeriod(period);
|
||||
const serverNames = await getAllServerName();
|
||||
let keys: { groupKey: string, cityId: number }[] = []
|
||||
for(let [_key, teamObj] of getGVGBattleMap()) {
|
||||
// 每5秒给据点上的人加积分
|
||||
let teams = teamObj.findSettledPoint();
|
||||
for(let teamMem of teams) {
|
||||
if(teamMem.isBroken || teamMem.durability <= 0) continue;
|
||||
let addScore = gameData.gvgAreaPoint.get(teamMem.pointId)?.score||0;
|
||||
let team = await GVGTeamModel.addScore(teamMem.teamCode, 0, addScore);
|
||||
await redisAddSettleScore(team, addScore);
|
||||
if(startFightTime <= nowSeconds() && endFightTime >= nowSeconds()) {
|
||||
// 每5秒给据点上的人加积分
|
||||
let teams = teamObj.findSettledPoint();
|
||||
for(let teamMem of teams) {
|
||||
if(teamMem.isBroken || teamMem.durability <= 0) continue;
|
||||
let addScore = gameData.gvgAreaPoint.get(teamMem.pointId)?.score||0;
|
||||
let team = await GVGTeamModel.addScore(teamMem.teamCode, 0, addScore);
|
||||
await redisAddSettleScore(team, addScore);
|
||||
}
|
||||
}
|
||||
// 向下推送区域数据
|
||||
let spinesByCity = new Map<number, GVGTeamSpineInMap[]>();
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
// 和gvg组建期相关的方法
|
||||
|
||||
import { pinus } from "pinus";
|
||||
import { GUILD_AUTH, GVG_APPLY_TYPE, GVG_PERIOD, GVG_SERVER_TYPE, LEAGUE_AUTH, LEAGUE_MANAGE_TYPE, PUSH_ROUTE, REDIS_KEY, STATUS } from "../../consts";
|
||||
import { GuildModel, GuildType } from "../../db/Guild";
|
||||
import { GVGCityModel } from "../../db/GVGCity";
|
||||
import { GVGCityAreaPointModel } from "../../db/GVGCityAreaPoint";
|
||||
import { GVGLeagueModel, GVGLeagueType, GVGLeagueUpdate } from "../../db/GVGLeague";
|
||||
import { GVGLeagueApplyModel, GVGLeagueApplyType } from "../../db/GVGLeagueApply";
|
||||
import { GVGLeaguePrepareModel, GVGLeaguePrepareType } from "../../db/GVGLeaguePrepare";
|
||||
import { GVGTeamModel } from "../../db/GVGTeam";
|
||||
import { RoleType } from "../../db/Role";
|
||||
import { UserGuildModel } from "../../db/UserGuild";
|
||||
import { LeagueGuildInfo, LeagueListInfo } from "../../domain/gvgField/returnData";
|
||||
@@ -14,8 +18,9 @@ import { getZeroPointD } from "../../pubUtils/timeUtil";
|
||||
import { resResult } from "../../pubUtils/util";
|
||||
import { sendMessageToUserWithSuc } from "../pushService";
|
||||
import { updateUserInfo } from "../redisService";
|
||||
import { getGVGBattleData } from "./gvgBattleMemory";
|
||||
import { guildJoinLeagueRecord } from "./gvgRecService";
|
||||
import { calLeagueCe, getCurPeriod, getGVGConfig, getGVGPeriodData, getGVGServerType } from "./gvgService";
|
||||
import { calLeagueCe, getCurPeriod, getGroupKey, getGVGConfig, getGVGPeriodData, getGVGServerType } from "./gvgService";
|
||||
|
||||
/**
|
||||
* 自动创建联军
|
||||
@@ -230,4 +235,28 @@ export async function guildAbdicateToLeague(guild: GuildType, fromRoleId: string
|
||||
if(!guild.leagueCode) return;
|
||||
await GVGLeagueModel.abdicateGuild(guild.leagueCode, fromRoleId, toRole.roleId, toRole._id);
|
||||
await updateUserInfo(REDIS_KEY.LEAGUE_INFO, guild.leagueCode, [{ field: 'leader', value: new LeagueLeader(toRole) }]);
|
||||
}
|
||||
|
||||
export async function updateGVGBattleLeagueInfo(serverId: number, leagueCode: string, info: { leagueName?: string, icon?: number }) {
|
||||
await GVGTeamModel.updateLeagueName(leagueCode, info.leagueName);
|
||||
await GVGCityModel.updateLeagueInfo(leagueCode, info.leagueName, info.icon);
|
||||
await GVGCityAreaPointModel.updateLeagueName(leagueCode, info.leagueName)
|
||||
if(info.leagueName) await pinus.app.rpc.guild.guildRemote.updateLeagueNameMem.broadcast(serverId, leagueCode, info.leagueName);
|
||||
}
|
||||
|
||||
export async function updateLeagueNameMem(serverId: number, leagueCode: string, leagueName: string ) {
|
||||
let groupKey = await getGroupKey(serverId);
|
||||
let teamObj = getGVGBattleData(groupKey);
|
||||
teamObj.updateLeagueInfo(leagueCode, leagueName);
|
||||
}
|
||||
|
||||
export async function updateGVGBattleRoleInfo(serverId: number, roleId: string, info: { roleName?: string, lv?: number }) {
|
||||
await GVGTeamModel.updateRoleInfo(roleId, info);
|
||||
await pinus.app.rpc.guild.guildRemote.updateTeamRoleInfoMem.broadcast(serverId, roleId, info);
|
||||
}
|
||||
|
||||
export async function updateTeamRoleInfoMem(serverId: number, roleId: string, info: { roleName?: string, lv?: number } ) {
|
||||
let groupKey = await getGroupKey(serverId);
|
||||
let teamObj = getGVGBattleData(groupKey);
|
||||
teamObj.updateRoleInfo(roleId, info);
|
||||
}
|
||||
@@ -21,6 +21,7 @@ import { sendMessageToUserWithSuc } from './pushService';
|
||||
import { ActionPointModel } from '../db/ActionPoint';
|
||||
import { GK_MAIN, GK_MAINELITE, RECHARGE } from '../pubUtils/dicParam';
|
||||
import { rebateHistoryOrder } from './orderService';
|
||||
import { updateGVGBattleRoleInfo } from './gvg/gvgTeamService';
|
||||
|
||||
export async function roleLevelup(type: KING_EXP_RATIO_TYPE, roleId: string, kingExp: number = 0, session: BackendSession) {
|
||||
const serverId = session.get('serverId');
|
||||
@@ -56,6 +57,8 @@ export async function roleLevelup(type: KING_EXP_RATIO_TYPE, roleId: string, kin
|
||||
if(lv < RECHARGE.RECHARGE_RMB_RETURN_LEVEL_LIMITED && newLv >= RECHARGE.RECHARGE_RMB_RETURN_LEVEL_LIMITED) {
|
||||
rebateHistoryOrder(roleId, role.userInfo?.uid);
|
||||
}
|
||||
|
||||
await updateGVGBattleRoleInfo(serverId, roleId, { lv });
|
||||
}
|
||||
let actordata: { lv: number, exp: number, getExp: number, mostExp: number }[] = [];
|
||||
for (let i = lv; i <= newLv; i++) {
|
||||
|
||||
@@ -113,6 +113,13 @@ export default class GVGCity extends BaseModel {
|
||||
const cities: GVGCityType[] = await GVGCityModel.find({ configId, hasGuard: true }).lean();
|
||||
return cities
|
||||
}
|
||||
|
||||
public static async updateLeagueInfo(leagueCode: string, leagueName: string, icon: number) {
|
||||
let updateInfo: GVGCityUpdate = {};
|
||||
if(leagueName != undefined) updateInfo.guardLeagueName = leagueName;
|
||||
if(icon != undefined) updateInfo.guardLeagueIcon = icon;
|
||||
await GVGCityModel.updateMany({ guardLeague: leagueCode }, { $set: updateInfo });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -54,6 +54,10 @@ export default class GVGCityAreaPoint extends BaseModel {
|
||||
let result: GVGCityAreaPointType[] = await GVGCityAreaPointModel.find({ configId, groupKey }).lean();
|
||||
return result
|
||||
}
|
||||
|
||||
public static async updateLeagueName(leagueCode: string, leagueName: string) {
|
||||
await GVGCityAreaPointModel.updateMany({ leagueCode }, { $set: { leagueName }});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -343,6 +343,14 @@ export default class GVGTeam extends BaseModel {
|
||||
let team: GVGTeamType = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $set: { restartTime: 0 } }, { new: true }).lean();
|
||||
return team;
|
||||
}
|
||||
|
||||
public static async updateLeagueName(leagueCode: string, leagueName: string) {
|
||||
await GVGTeamModel.updateMany({ leagueCode }, { $set: { leagueName } });
|
||||
}
|
||||
|
||||
public static async updateRoleInfo(roleId: string, info: { roleName?: string, lv?: number }) {
|
||||
await GVGTeamModel.updateMany({ roleId }, { $set: info });
|
||||
}
|
||||
}
|
||||
|
||||
export const GVGTeamModel = getModelForClass(GVGTeam);
|
||||
|
||||
@@ -48,4 +48,11 @@ export class GVGTeamMem extends GVGTeam {
|
||||
this.startMoveTime = startMoveTime;
|
||||
this.stopMoveTime = stopMoveTime;
|
||||
}
|
||||
|
||||
public updateInfo(info: { leagueName?: string, roleName?: string, lv?: number }) {
|
||||
if(!info) return
|
||||
if(info.leagueName) this.leagueName = info.leagueName;
|
||||
if(info.roleName) this.roleName = info.roleName;
|
||||
if(info.lv) this.lv = info.lv;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user