🐞 fix(gvg): 修复攻打掉占领据点的队伍时的数据错误

This commit is contained in:
luying
2023-03-07 16:27:22 +08:00
parent 82e6d5ec08
commit 6b79612a5e
4 changed files with 13 additions and 10 deletions

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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;