diff --git a/game-server/app/servers/guild/handler/gvgBattleHandler.ts b/game-server/app/servers/guild/handler/gvgBattleHandler.ts index 573dc02a0..0bad4a1f2 100644 --- a/game-server/app/servers/guild/handler/gvgBattleHandler.ts +++ b/game-server/app/servers/guild/handler/gvgBattleHandler.ts @@ -478,7 +478,7 @@ export class GVGBattleHandler { // 计算并更新两支队伍耐久 let { win, fail } = gameData.gvgBattleDurabilityMinus; attackTeam = await GVGTeamModel.battleEndAttack(attackTeam.teamCode, isSuccess? -win: -fail, getBirthAreaOfCity(city, attackTeam.leagueCode), await getTechReviveMinus(groupKey, configId, attackTeam.leagueCode)); - defenseTeam = await GVGTeamModel.battleEndDefense(defenseTeam.teamCode, isSuccess? -fail: -win, getBirthAreaOfCity(city, defenseTeam.leagueCode), await getTechReviveMinus(groupKey, configId, defenseTeam.leagueCode)); + 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); @@ -536,7 +536,7 @@ export class GVGBattleHandler { if (!city) return resResult(STATUS.GVG_CITY_NOT_FOUND); let hurt = await getTechKnifeHurt(configId, attackTeam.leagueCode); - defenseTeam = await GVGTeamModel.battleEndDefense(oppoTeamCode, -hurt, getBirthAreaOfCity(city, defenseTeam.leagueCode), await getTechReviveMinus(groupKey, configId, defenseTeam.leagueCode)); + 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); diff --git a/game-server/app/services/gvg/gvgBattleService.ts b/game-server/app/services/gvg/gvgBattleService.ts index b4799137a..baf158b79 100644 --- a/game-server/app/services/gvg/gvgBattleService.ts +++ b/game-server/app/services/gvg/gvgBattleService.ts @@ -106,7 +106,7 @@ export function checkMoveStatus(team: GVGTeamType, cityId: number, areaId: numbe if(team.pointId > 0) return STATUS.GVG_BATTLE_TEAM_IS_SELLTED; if(team.stopMoveTime > nowSeconds()) return STATUS.GVG_BATTLE_IS_MOVING; if(team.moveCdTime > nowSeconds()) return STATUS.GVG_BATTLE_IS_MOVING_CD; - if(team.lockTime > nowSeconds()) return STATUS.GVG_TEAM_DEFENSEING; + if(team.lockTime > nowSeconds()) return STATUS.GVG_BATTLE_TEAM_LOCK; if(team.restartTime > nowSeconds()) return STATUS.GVG_BATTLE_TEAM_REVIVE; let dicArea = gameData.gvgArea.get(areaId); if(!dicArea) return STATUS.DIC_DATA_NOT_FOUND; @@ -663,7 +663,7 @@ export async function pushTeamBeHurtMessage(team: GVGTeamType, replaceTeam?: GVG if(team.curTeamBreak && team.originPointId > 0) { await sendMessageToGVGAreaByTeamWithSuc(team.groupKey, team.fromAreaId, PUSH_ROUTE.GVG_AREA_POINT_CHANGE, { - cityId: team.cityId, areaId: team.fromAreaId, targetPointId: team.originPointId, originPointId: replaceTeam?.originPointId??0, point: new GVGTeamInListOnPoint(team.originPointId, replaceTeam && !replaceTeam.curTeamBreak, replaceTeam) + cityId: team.cityId, areaId: team.fromAreaId, targetPointId: team.pointId, originPointId: team.originPointId, point: new GVGTeamInListOnPoint(team.originPointId, replaceTeam && !replaceTeam.curTeamBreak, replaceTeam) }); } diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index d4452602c..a4bfb349b 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -369,7 +369,7 @@ export const STATUS = { GVG_BATTLE_IS_MOVING: { code: 21403, simStr: '编队正在移动中' }, GVG_BATTLE_IS_NOT_IN_CITY: { code: 21404, simStr: '编队不在这个城池中' }, GVG_TEAM_ATTACKING: { code: 21405, simStr: '您的编队正在攻击冷却中' }, - GVG_TEAM_DEFENSEING: { code: 21406, simStr: '选择的编队正在防守冷却中' }, + GVG_TEAM_DEFENSEING: { code: 21406, simStr: '该玩家正在与其他玩家战斗' }, GVG_BATTLEREC_NOT_FOUND: { code: 21407, simStr: '未找到该记录' }, GVG_AREA_NOT_IN_CITY: { code: 21408, simStr: '选择区域不在这座城池中' }, GVG_TEAM_NOT_FOUND: { code: 21409, simStr: '未找到这个队伍' }, @@ -385,7 +385,7 @@ export const STATUS = { GVG_TEAM_NOT_NEED_REVIVE: { code: 21418, simStr: '此队伍不需要复活' }, GVG_BATTLE_IS_MOVING_CD: { code: 21403, simStr: '移动冷却中' }, GVG_BATTLE_TEAM_REVIVE: { code: 21404, simStr: '队伍复活中' }, - GVG_BATTLE_TEAM_LOCK: { code: 21405, simStr: '您的队伍正在被攻击中' }, + GVG_BATTLE_TEAM_LOCK: { code: 21405, simStr: '正在有玩家挑战您,请等待' }, // 通用 30000 - 30099 DIC_DATA_NOT_FOUND: { code: 30000, simStr: '数据表未找到' }, diff --git a/shared/db/GVGLeague.ts b/shared/db/GVGLeague.ts index cf6c15536..aef1807c4 100644 --- a/shared/db/GVGLeague.ts +++ b/shared/db/GVGLeague.ts @@ -4,6 +4,7 @@ import Role, { RoleType } from '../db/Role'; import { genCode } from '../pubUtils/util'; import { GuildType } from './Guild'; import { LEAGUE_AUTH } from '../consts'; +import { GVG } from '../pubUtils/dicParam'; class Member { @prop({ required: true }) @@ -88,7 +89,7 @@ export default class GVGLeague extends BaseModel { public static async findByCondition(type: number, serverIds: number[], page: number, name: string) { let query = { - status: 1, type, serverId: { $in: serverIds } + status: 1, type, serverId: { $in: serverIds }, guildCnt: { $lt: GVG.GVG_LEAGUE_COMPOSE } }; if(name) { query['name'] = { $regex: new RegExp(name, 'i') }; diff --git a/shared/db/GVGTeam.ts b/shared/db/GVGTeam.ts index fab3bf767..2f8c601e6 100644 --- a/shared/db/GVGTeam.ts +++ b/shared/db/GVGTeam.ts @@ -273,8 +273,8 @@ export default class GVGTeam extends BaseModel { } // 结算防守方 - public static async battleEndDefense(teamCode: string, hpInc: number, rebirthAreaId: number, reviveCd: number) { - let team: GVGTeamType = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $set: { defenseTime: nowSeconds() + GVG.GVG_DEFAULT_DEFENSE_CD, lockTime: 0, lockTeamCode: '' }, $inc: { durability: hpInc } }, { new: true }).lean(); + public static async battleEndDefense(teamCode: string, hpInc: number, rebirthAreaId: number, defenseCd: number, reviveCd: number) { + let team: GVGTeamType = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $set: { defenseTime: nowSeconds() + defenseCd, lockTime: 0, lockTeamCode: '' }, $inc: { durability: hpInc } }, { new: true }).lean(); if(team.durability <= 0) { let originPointId = team.pointId; team = await GVGTeamModel.teamBreak(teamCode, team.isRobot, team.maxDurability, rebirthAreaId, team.areaId, reviveCd); diff --git a/shared/domain/gvgField/returnData.ts b/shared/domain/gvgField/returnData.ts index 4529fba71..52cc64623 100644 --- a/shared/domain/gvgField/returnData.ts +++ b/shared/domain/gvgField/returnData.ts @@ -702,6 +702,7 @@ export class GVGTeamInList { durability: number; // 耐久 maxDurability: number; // 最大耐久 restartTime: number; + defenseTime: number; curTeamBreak: boolean; constructor(team: GVGTeamType) { @@ -720,6 +721,7 @@ export class GVGTeamInList { this.durability = team.durability; this.maxDurability = team.maxDurability; this.restartTime = team.restartTime; + this.defenseTime = team.defenseTime; this.curTeamBreak = !!team.curTeamBreak; } } diff --git a/shared/pubUtils/dicParam.ts b/shared/pubUtils/dicParam.ts index 96ff737ec..6b7702432 100644 --- a/shared/pubUtils/dicParam.ts +++ b/shared/pubUtils/dicParam.ts @@ -405,7 +405,7 @@ export const GVG = { GVG_DEFAULT_REVIVE_CD: 30, // GVG激战期默认的复活CD GVG_DEFAULT_MOVE_CD: 5, // GVG激战期默认的移动CD GVG_DEFAULT_ATTACK_CD: 5, // GVG激战期默认的攻击CD - GVG_DEFAULT_DEFENSE_CD: 2, // GVG激战期默认的防御CD + GVG_DEFAULT_DEFENSE_CD: 5, // GVG激战期默认的防御CD GVG_DEFAULT_DURABILITY_MINUS: '5&100', // GVG激战期默认的队伍耐扣除规则,胜&败:num&num GVG_PRODUCE_GAME_RATIO: '1&10|2&20|3&6', // 云台外政中贡献分3种产量分值换算 1:粮食*系数 2:铁矿*系数 3:木材*系数 GVG_BATTLE_SCORE: 1000000, // 战力换算积分的除数