diff --git a/game-server/app/servers/guild/handler/gvgBattleHandler.ts b/game-server/app/servers/guild/handler/gvgBattleHandler.ts index 3400eca67..ee5c23b5c 100644 --- a/game-server/app/servers/guild/handler/gvgBattleHandler.ts +++ b/game-server/app/servers/guild/handler/gvgBattleHandler.ts @@ -485,12 +485,15 @@ export class GVGBattleHandler { defenseTeam = await GVGTeamModel.battleEndDefense(defenseTeam.teamCode, isSuccess? -fail: -win, getBirthAreaOfCity(city, defenseTeam.leagueCode), GVG.GVG_DEFAULT_DEFENSE_CD, await getTechReviveMinus(groupKey, configId, defenseTeam.leagueCode)); if(defenseTeam.curTeamBreak && defenseTeam.originPointId > 0 && !defenseTeam.isCatapult) { // 打败的对手原来占领着一个位置,现在这个位置是你的了 if(!attackTeam.curTeamBreak) { - attackTeam = await GVGTeamModel.settlePoint(attackTeam.teamCode, defenseTeam.originPointId); - await GVGCityAreaPointModel.settlePoint(cityId, attackTeam.areaId, defenseTeam.originPointId, attackTeam); + let settleResult = await GVGCityAreaPointModel.settlePoint(cityId, attackTeam.areaId, defenseTeam.originPointId, attackTeam, defenseTeam.teamCode); + if(settleResult) attackTeam = await GVGTeamModel.settlePoint(attackTeam.teamCode, defenseTeam.originPointId); } else { await GVGCityAreaPointModel.leavePoint(configId, groupKey, defenseTeam.originPointId); } } + if(attackTeam.curTeamBreak && attackTeam.originPointId) { + await GVGCityAreaPointModel.leavePoint(configId, groupKey, attackTeam.originPointId); + } if(defenseTeam.curTeamBreak) { let attackScore = calBattleScoreByCe(isSuccess, defenseTeam.lineupCe); let attackCurTeamBreak = attackTeam.curTeamBreak; @@ -545,8 +548,8 @@ export class GVGBattleHandler { defenseTeam = await GVGTeamModel.battleEndDefense(oppoTeamCode, -hurt, getBirthAreaOfCity(city, defenseTeam.leagueCode), 0, await getTechReviveMinus(groupKey, configId, defenseTeam.leagueCode)); if(defenseTeam.curTeamBreak && defenseTeam.originPointId > 0 && !defenseTeam.isCatapult) { // 打败的对手原来占领着一个位置,现在这个位置是你的了 if(!attackTeam.curTeamBreak) { - attackTeam = await GVGTeamModel.settlePoint(attackTeam.teamCode, defenseTeam.originPointId); - await GVGCityAreaPointModel.settlePoint(cityId, attackTeam.areaId, defenseTeam.originPointId, attackTeam); + let settleResult = await GVGCityAreaPointModel.settlePoint(cityId, attackTeam.areaId, defenseTeam.originPointId, attackTeam, defenseTeam.teamCode); + if(settleResult) attackTeam = await GVGTeamModel.settlePoint(attackTeam.teamCode, defenseTeam.originPointId); } else { await GVGCityAreaPointModel.leavePoint(configId, groupKey, defenseTeam.originPointId); } diff --git a/game-server/app/services/gvg/gvgBattleMemory.ts b/game-server/app/services/gvg/gvgBattleMemory.ts index 89ab382d7..7b81b50ac 100644 --- a/game-server/app/services/gvg/gvgBattleMemory.ts +++ b/game-server/app/services/gvg/gvgBattleMemory.ts @@ -104,11 +104,12 @@ class GVGBattleData { } private setRolePoints(roleId: string, fromPointId: number, pointId: number, teamCode: string) { - if(fromPointId > 0 && pointId == 0) { // 被打得撤离积分点 + if(fromPointId > 0) { // 被打得撤离积分点 if(this.rolePoints.has(roleId) && this.rolePoints.get(roleId).has(fromPointId)) { this.rolePoints.get(roleId).delete(fromPointId); } - } else if (fromPointId == 0 && pointId > 0) { + } + if (pointId > 0) { if(!this.rolePoints.has(roleId)) this.rolePoints.set(roleId, new Map()); this.rolePoints.get(roleId).set(pointId, teamCode); } diff --git a/game-server/app/services/gvg/gvgBattleService.ts b/game-server/app/services/gvg/gvgBattleService.ts index af0eb473b..7f5f9398b 100644 --- a/game-server/app/services/gvg/gvgBattleService.ts +++ b/game-server/app/services/gvg/gvgBattleService.ts @@ -218,7 +218,6 @@ 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); - if(!myLeague) return; let groupKey = await getGroupKey(serverId); let { configId } = getGVGConfig(); let teams = await GVGTeamModel.findByRole(roleId); @@ -227,7 +226,7 @@ export async function leaveCity(isForce: boolean, roleId: string, serverId: numb if(isForce || !hasPoint) { await GVGTeamModel.leaveCity(roleId); await GVGCityModel.decreasePlayer(configId, groupKey, roleId); - await GVGUserDataModel.changeCity(configId, myLeague.leagueCode, roleId, 0); + if(myLeague) await GVGUserDataModel.changeCity(configId, myLeague.leagueCode, roleId, 0); await GVGCityAreaPointModel.playerLeave(configId, groupKey, roleId); // 处理内存数据 let teamObj = getGVGBattleData(groupKey); diff --git a/shared/db/GVGCityAreaPoint.ts b/shared/db/GVGCityAreaPoint.ts index d9bf429d7..aba30beb0 100644 --- a/shared/db/GVGCityAreaPoint.ts +++ b/shared/db/GVGCityAreaPoint.ts @@ -35,12 +35,12 @@ export default class GVGCityAreaPoint extends BaseModel { @prop({ required: true }) 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, originTeam = '') { let { configId, groupKey, leagueCode, leagueName, roleId, roleName, teamCode } = team; await GVGCityAreaPointModel.updateMany({ configId, groupKey, teamCode }, { $set: { teamCode: '', roleId: '', roleName: '', leagueCode: '', leagueName: '' } }); await GVGCityAreaPointModel.findOneAndUpdate({ configId, groupKey, pointId }, { $setOnInsert: { teamCode: '' }}, { upsert: true }); let result: GVGCityAreaPointType = await GVGCityAreaPointModel.findOneAndUpdate( - { configId, groupKey, pointId, teamCode: '' }, + { configId, groupKey, pointId, teamCode: originTeam }, { $set: { cityId, areaId, leagueCode, leagueName, roleId, roleName, teamCode } }, { new: true }).lean(); return result;