diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index 835f89ebc..d6107c9f1 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -33,6 +33,9 @@ export default function(app: Application) { } export class ComBattleHandler { constructor(private app: Application) { + this.app.set('teamMap', this.teamMap); + this.app.set('teamDisTimer', this.teamDisTimer); + this.app.set('robotHurtTimer', this.robotHurtTimer); } private teamMap: Map = new Map(); private teamDisTimer: Map = new Map(); diff --git a/game-server/app/servers/battle/remote/comBattleRemote.ts b/game-server/app/servers/battle/remote/comBattleRemote.ts index 84d32c71d..94f8dce51 100644 --- a/game-server/app/servers/battle/remote/comBattleRemote.ts +++ b/game-server/app/servers/battle/remote/comBattleRemote.ts @@ -1,6 +1,8 @@ import { Application, ChannelService, FrontendSession, RemoterClass, HandlerService, pinus, } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { STATUS } from '../../../consts'; +import { handleComBtlProgress } from '../../../services/comBattleService'; +import { MemComBtlTeam } from '../../../domain/battleField/ComBattleTeamField'; export default function (app: Application) { new HandlerService(app, {}); @@ -129,6 +131,18 @@ export class ComBattleRemote { } public async leaveFromBattle(roleId: string, teamCode: string ) { - // this.app.sysrpc.msgRemote.forwardMessage + let teamMap: Map = this.app.get('teamMap'); + if(teamMap && teamMap.has(teamCode)) { + let myTeam = teamMap.get(teamCode); + for(let roleStatus of myTeam.roleStatus) { + if(roleStatus.roleId == roleId) { + roleStatus.battleStatus = 2; // 自己失败了 + } + } + let channelService = this.app.get('channelService'); + let channel = channelService.getChannel(teamCode, false); + + await handleComBtlProgress(myTeam, this.app.get('robotHurtTimer'), teamMap, channel); // 结算 + } } } \ No newline at end of file diff --git a/game-server/app/servers/connector/filter/global.ts b/game-server/app/servers/connector/filter/global.ts index e06f54b32..6f1648f96 100644 --- a/game-server/app/servers/connector/filter/global.ts +++ b/game-server/app/servers/connector/filter/global.ts @@ -19,6 +19,8 @@ Filter.prototype.before = async function (routeRecord: RouteRecord, msg: any, se const roleId: string = session.get('roleId'); const uid: number = session.get('userid'); + session.push('teamCode', () => {}); + let connectorServers = pinus.app.getServersByType('connector'); let { id } = connectorServers[0]; let maintenServers = await pinus.app.rpc.connector.connectorRemote.getServerMainten.toServer(id); diff --git a/game-server/app/servers/connector/handler/entryHandler.ts b/game-server/app/servers/connector/handler/entryHandler.ts index 91dea9a56..655de22e1 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -209,7 +209,7 @@ export class EntryHandler { await leaveGuildChannel(roleId, sid, guildCode); RoleModel.updateRoleInfo(roleId, { quitTime: nowSeconds() }); if(teamCode) { // 如果有寻宝中的队伍,那么等于战败 - await setComBtlOnUserLeave(roleId, teamCode) + setComBtlOnUserLeave(roleId, teamCode) } } diff --git a/game-server/app/services/comBattleService.ts b/game-server/app/services/comBattleService.ts index 126943d19..9e4002d07 100644 --- a/game-server/app/services/comBattleService.ts +++ b/game-server/app/services/comBattleService.ts @@ -81,7 +81,7 @@ export function checkComBattleResult(teamStatus) { // 看看是否还有活人 teamStatus.roleStatus.forEach(st => { // 设置了阵容,且阵容人数和阵亡人数一样,说明玩家战败 - if (!st.isRobot && st.heroes && ((st.heroes.length > 0 && st.killed.length < st.heroes.length) || st.heroes.length === 0)) { + if (!st.isRobot && st.battleStatus != 2 && st.heroes && ((st.heroes.length > 0 && st.killed.length < st.heroes.length) || st.heroes.length === 0 )) { allPlayerKilled = false } });