🐞 fix(gvg): 离开城池的时候未解锁

This commit is contained in:
luying
2023-03-09 16:44:57 +08:00
parent 93e7711577
commit 58a4267f94
5 changed files with 31 additions and 25 deletions

View File

@@ -341,6 +341,7 @@ export class GVGBattleHandler {
let teamObj = getGVGBattleData(groupKey);
teamObj.move(teamCode, areaId, team.fromAreaId, team.startMoveTime, team.stopMoveTime);
await leaveGVGAreaTeamChannel(roleId, sid);
await addRoleToAreaTeamChannel(roleId, groupKey, areaId, sid);
await pushTeamMoveMessage(team);
return resResult(STATUS.SUCCESS, { areaId, cityId, stopMoveTime: team.stopMoveTime, moveCdTime: team.moveCdTime });
@@ -365,8 +366,6 @@ export class GVGBattleHandler {
let teamObj = getGVGBattleData(groupKey);
teamObj.move(teamCode, areaId, 0, team.startMoveTime, team.stopMoveTime);
await leaveGVGAreaTeamChannel(roleId, sid);
await addRoleToAreaTeamChannel(roleId, groupKey, areaId, sid);
return resResult(STATUS.SUCCESS, { areaId, cityId, curTeam: new MyTeamInfo(team) });
}

View File

@@ -10,10 +10,8 @@ import { getGVGConfig, setGVGConfig, setGVGServerGroup } from '../../../services
import { GVGConfigType } from '../../../db/GVGConfig';
import { catapultHurt, gvgBattleEnd, gvgBattleSeconds, gvgBattleStart, initCatapult, leaveCityMem } from '../../../services/gvg/gvgBattleService';
import { clearBattleMemory } from '../../../services/gvg/gvgBattleMemory';
import { GVGLeagueType } from '../../../db/GVGLeague';
import { updateLeagueNameMem, updateTeamRoleInfoMem } from '../../../services/gvg/gvgTeamService';
import { resetPeriodTime, setPeriodTime } from '../../../services/gvg/gvgFightService';
import { GVGTeamType } from '../../../db/GVGTeam';
export default function (app: Application) {
new HandlerService(app, {});
@@ -173,9 +171,9 @@ export class GuildRemote {
}
}
public async leaveCityMem(groupKey: string, roleId: string, teams: GVGTeamType[]) {
public async leaveCityMem(groupKey: string, roleId: string) {
try {
return leaveCityMem(groupKey, roleId, teams);
return leaveCityMem(groupKey, roleId);
} catch(e) {
errlogger.error(`remote ${__filename} \n ${e.stack}`);
}

View File

@@ -86,12 +86,13 @@ class GVGBattleData {
this.leagueToTeam.get(team.leagueCode).add(team.teamCode);
}
this.setAreaMap(team.teamCode, fromAreaId, team.areaId);
this.setAreaMap(team.teamCode, fromAreaId, team.areaId, 'enterCity');
}
}
private setAreaMap(teamCode: string, fromAreaId: number, toAreaId: number) {
private setAreaMap(teamCode: string, fromAreaId: number, toAreaId: number, fromFun) {
if(fromAreaId == toAreaId) return;
// console.log('#### gvgBattleMemory setAreaMap', 'teamCode:', teamCode, 'fromAreaId: ', fromAreaId, 'toAreaId:', toAreaId, 'appid', pinus.app.getServerId(), 'from', fromFun)
let fromAreaSet = this.areaToTeams.get(fromAreaId);
if(fromAreaSet && fromAreaSet.has(teamCode)) fromAreaSet.delete(teamCode);
@@ -119,7 +120,7 @@ class GVGBattleData {
let team = this.teams.get(teamCode);
if(!team) return;
team.moveToArea(areaId, fromAreaId, startMoveTime, stopMoveTime);
this.setAreaMap(teamCode, fromAreaId, areaId);
this.setAreaMap(teamCode, fromAreaId, areaId, 'move');
}
public setTime(teamCode: string, teamUpdate: GVGTeamType) {
@@ -149,7 +150,7 @@ class GVGBattleData {
let { areaId: fromAreaId, pointId: originPointId } = teamMem;
teamMem.updateTeam(team);
this.setRolePoints(team.roleId, originPointId, curTeamBreak? 0: pointId, team.teamCode);
this.setAreaMap(team.teamCode, fromAreaId, team.areaId);
this.setAreaMap(team.teamCode, fromAreaId, team.areaId, 'battleEnd');
}
}

View File

@@ -10,7 +10,7 @@ import { getGVGBattleData, getGVGBattleMap } from "./gvgBattleMemory";
import { GVGAttackSpine, GVGCityMapInfo, GVGTeamInList, GVGTeamInListOnPoint, GVGTeamSpineInMap } from "../../domain/gvgField/returnData";
import { GVG } from "../../pubUtils/dicParam";
import { GVGHeroInfo, PvpEnemies, PvpHeroInfo } from "../../domain/dbGeneral";
import { getGroupKey, getGVGConfig, getGVGPeriodData } from "./gvgService";
import { getGroupKey, getGVGConfig, getGVGConfigFromRemote, getGVGPeriodData } from "./gvgService";
import { GVGLeaguePrepareModel } from "../../db/GVGLeaguePrepare";
import { pinus } from "pinus";
import { dispatch } from "../../pubUtils/dispatcher";
@@ -219,30 +219,31 @@ export async function generNewLineup(roleId: string, heroes: HeroType[], lineup:
export async function leaveCity(isForce: boolean, roleId: string, serverId: number, guildCode: string, myLeague?: GVGLeagueType) {
if(!myLeague) myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
let groupKey = await getGroupKey(serverId);
let { configId } = getGVGConfig();
let { configId } = await getGVGConfigFromRemote();
let teams = await GVGTeamModel.findByRole(roleId);
let hasPoint = !!teams.find(team => team.pointId > 0);
// console.log('######### leaveCity', configId, groupKey)
if(isForce || !hasPoint) {
await GVGTeamModel.leaveCity(roleId);
await GVGCityModel.decreasePlayer(configId, groupKey, roleId);
if(myLeague) await GVGUserDataModel.changeCity(configId, myLeague.leagueCode, roleId, 0);
await GVGCityAreaPointModel.playerLeave(configId, groupKey, roleId);
// 处理内存数据
await pinus.app.rpc.guild.guildRemote.leaveCityMem.broadcast(groupKey, roleId, teams);
await pinus.app.rpc.guild.guildRemote.leaveCityMem.broadcast(groupKey, roleId);
for(let team of teams) {
if(team.cityId > 0 && team.areaId > 0) {
await sendMessageToGVGAreaByTeamWithSuc(groupKey, team.areaId, PUSH_ROUTE.GVG_PLAYER_LEAVE_AREA, {
cityId: team.cityId, areaId: team.areaId, teamCode: team.teamCode
});
}
}
}
}
export async function leaveCityMem(groupKey: string, roleId: string, teams: GVGTeamType[]) {
export async function leaveCityMem(groupKey: string, roleId: string) {
let teamObj = getGVGBattleData(groupKey);
teamObj.leaveCity(roleId);
for(let team of teams) {
if(team.cityId > 0 && team.areaId > 0) {
await sendMessageToGVGAreaByTeamWithSuc(groupKey, team.areaId, PUSH_ROUTE.GVG_PLAYER_LEAVE_AREA, {
cityId: team.cityId, areaId: team.areaId, teamCode: team.teamCode
});
}
}
}
// 复活cd
@@ -478,6 +479,7 @@ export async function gvgBattleSeconds() {
const serverNames = await getAllServerName();
let keys: { groupKey: string, cityId: number }[] = []
for(let [_key, teamObj] of getGVGBattleMap()) {
// console.log('#### gvgBattleSeconds groupKey: ', _key, 'areas', teamObj.findAreas(), 'appid', pinus.app.getServerId());
if(startFightTime <= nowSeconds() && endFightTime >= nowSeconds()) {
// 每5秒给据点上的人加积分
let teams = teamObj.findSettledPoint();
@@ -500,12 +502,13 @@ export async function gvgBattleSeconds() {
if(index == -1) keys.push({ groupKey: teamObj.groupKey, cityId: dicArea.cityId });
}
for(let [cityId, spines] of spinesByCity) {
await sendMessageToGVGCityWithSuc(teamObj.groupKey, cityId, PUSH_ROUTE.GVG_AREA_SPINE_CHANGE, { cityId, spines });
if(spines.length > 0) await sendMessageToGVGCityWithSuc(teamObj.groupKey, cityId, PUSH_ROUTE.GVG_AREA_SPINE_CHANGE, { cityId, spines });
}
}
if(startFightTime <= nowSeconds() && endFightTime >= nowSeconds()) {
// console.log('#### cityRank keys', JSON.stringify(keys), 'appid', pinus.app.getServerId())
for(let { groupKey, cityId } of keys) {
let { ranks } = await getBattleRanksByCity(configId, groupKey, cityId);
await sendMessageToGVGCityWithSuc(groupKey, cityId, PUSH_ROUTE.GVG_CITY_RANK_UPDATE, { cityId, ranks });

View File

@@ -88,9 +88,14 @@ export function getPeriodTime() {
}
export async function getGVGConfigFromRemote() {
let guildServers = pinus.app.getServersByType('guild');
let server = getRandSingleEelm(guildServers);
return await pinus.app.rpc.guild.guildRemote.getGVGConfig.toServer(server.id);
let serverType = pinus.app.getServerType();
if(serverType == 'guild') {
return getGVGConfig();
} else {
let guildServers = pinus.app.getServersByType('guild');
let server = getRandSingleEelm(guildServers);
return await pinus.app.rpc.guild.guildRemote.getGVGConfig.toServer(server.id);
}
}
export async function setGVGConfig(config?: GVGConfigType) {