🐞 fix(gvg): 修复激战期离开战场逻辑
This commit is contained in:
@@ -25,6 +25,7 @@ import { checkServerIsOpen, getIpLocation } from '../../../services/roleService'
|
||||
import { dispatch } from '../../../pubUtils/dispatcher';
|
||||
import { leaveRaceActivityToRemote } from '../../../services/guildActivity/guildActivityService';
|
||||
import { getHiddenData } from '../../../services/dataService';
|
||||
import { leaveCity } from '../../../services/gvg/gvgBattleService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -223,7 +224,7 @@ export class EntryHandler {
|
||||
await leaveGVGAreaChannel(roleId, sid);
|
||||
await leaveGVGAreaTeamChannel(roleId, sid);
|
||||
await leaveGVGCityTeamChannel(roleId, sid);
|
||||
|
||||
await pinus.app.rpc.guild?.guildRemote.leaveCity.broadcast(roleId, true);
|
||||
} catch(e) {
|
||||
console.error(e);
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ import { Application, BackendSession, ChannelService, HandlerService, pinus } fr
|
||||
import { resResult, genCode } from "../../../pubUtils/util";
|
||||
import { GVGLeagueModel } from '../../../db/GVGLeague';
|
||||
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, leaveCity } from '../../../services/gvg/gvgBattleService';
|
||||
import { getGVGBattleData } from '../../../services/gvg/gvgBattleMemory';
|
||||
import { GVGBattleRecModel } from '../../../db/GVGBattleRec';
|
||||
import { getFightTimeByPeriod } from '../../../services/gvg/gvgFightService';
|
||||
@@ -238,8 +238,6 @@ export class GVGBattleHandler {
|
||||
const { cityId } = msg;
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
|
||||
let groupKey = await getGroupKey(serverId);
|
||||
|
||||
// 检测是否已经在城池中
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
@@ -251,22 +249,12 @@ export class GVGBattleHandler {
|
||||
return resResult(STATUS.GVG_USER_NOT_IN_CITY);
|
||||
}
|
||||
|
||||
const city = await GVGCityModel.decreasePlayer(configId, groupKey, cityId, roleId);
|
||||
if (!city) {
|
||||
return resResult(STATUS.GVG_CITY_NOT_FOUND);
|
||||
}
|
||||
|
||||
// 更新玩家城池和队伍城池
|
||||
gvgUserData = await GVGUserDataModel.changeCity(configId, myLeague.leagueCode, roleId, 0);
|
||||
await GVGTeamModel.enterCity(roleId, 0, 0, groupKey);
|
||||
// 处理内存数据
|
||||
let teamObj = getGVGBattleData(groupKey);
|
||||
teamObj.leaveCity(roleId);
|
||||
await leaveCity(roleId, false);
|
||||
|
||||
await leaveGVGAreaChannel(roleId, sid);
|
||||
await leaveGVGAreaTeamChannel(roleId, sid);
|
||||
await leaveGVGCityTeamChannel(roleId, sid);
|
||||
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ import { setHiddenData } from '../../../services/dataService';
|
||||
import { setKvToMemory } from '../../../services/pushService';
|
||||
import { getGVGConfig, setGVGConfig, setGVGServerGroup } from '../../../services/gvg/gvgService';
|
||||
import { GVGConfigType } from '../../../db/GVGConfig';
|
||||
import { catapultHurt, gvgBattleEnd, gvgBattleSeconds, gvgBattleStart, initCatapult } from '../../../services/gvg/gvgBattleService';
|
||||
import { catapultHurt, gvgBattleEnd, gvgBattleSeconds, gvgBattleStart, initCatapult, leaveCity } from '../../../services/gvg/gvgBattleService';
|
||||
import { clearBattleMemory } from '../../../services/gvg/gvgBattleMemory';
|
||||
|
||||
export default function (app: Application) {
|
||||
@@ -168,4 +168,12 @@ export class GuildRemote {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
|
||||
public async leaveCity(roleId: string, isForce: boolean) {
|
||||
try {
|
||||
return leaveCity(roleId, isForce);
|
||||
} catch(e) {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -21,6 +21,7 @@ import { sendMessageToGVGAreaByTeamWithSuc, sendMessageToGVGAreaWithSuc, sendMes
|
||||
import { sendMailToLeagueByContent } from "../mailService";
|
||||
import { GVGCityAreaPointModel } from "../../db/GVGCityAreaPoint";
|
||||
import { addCityGuardMessage } from "./gvgRecService";
|
||||
import { GVGUserDataModel } from "../../db/GVGUserData";
|
||||
|
||||
|
||||
/**
|
||||
@@ -130,6 +131,26 @@ export function calBattleScoreByCe(isSuccess: boolean, lineupCe: number) {
|
||||
return isSuccess? winScore: 0;
|
||||
}
|
||||
|
||||
export async function leaveCity(roleId: string, isForce: boolean) {
|
||||
let teams = await GVGTeamModel.findByRole(roleId);
|
||||
let hasPoint = false, myTeam: GVGTeamType;
|
||||
for(let team of teams) {
|
||||
if(team.pointId > 0) hasPoint = true;
|
||||
myTeam = team;
|
||||
}
|
||||
|
||||
if(isForce || !hasPoint) {
|
||||
let leaveResult = await GVGTeamModel.leaveCity(roleId);
|
||||
if(leaveResult) {
|
||||
await GVGCityModel.decreasePlayer(myTeam.configId, myTeam.groupKey, myTeam.cityId, roleId);
|
||||
await GVGUserDataModel.changeCity(myTeam.configId, myTeam.leagueCode, roleId, 0);
|
||||
// 处理内存数据
|
||||
let teamObj = getGVGBattleData(myTeam.groupKey);
|
||||
teamObj.leaveCity(roleId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 复活cd
|
||||
export async function getTechReviveMinus(configId: number, leagueCode: string) {
|
||||
let leaguePrepare = await GVGLeaguePrepareModel.findByLeague(configId, leagueCode);
|
||||
|
||||
@@ -143,6 +143,12 @@ export default class GVGTeam extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
// 离开队伍
|
||||
public static async leaveCity(roleId: string) {
|
||||
let res = await GVGTeamModel.updateMany({ roleId }, { $set: { cityId: 0, areaId: 0, pointId: 0 } });
|
||||
return !!res["ok"];
|
||||
}
|
||||
|
||||
// 查找角色队伍数
|
||||
public static async getTeamCntByRole(roleId: string) {
|
||||
const teams: GVGTeamType[] = await GVGTeamModel.find({ roleId }).select('teamCode').lean();
|
||||
|
||||
Reference in New Issue
Block a user