diff --git a/game-server/app/servers/battle/remote/comBattleRemote.ts b/game-server/app/servers/battle/remote/comBattleRemote.ts index cfc3314eb..84d32c71d 100644 --- a/game-server/app/servers/battle/remote/comBattleRemote.ts +++ b/game-server/app/servers/battle/remote/comBattleRemote.ts @@ -1,4 +1,4 @@ -import { Application, ChannelService, FrontendSession, RemoterClass, HandlerService, } from 'pinus'; +import { Application, ChannelService, FrontendSession, RemoterClass, HandlerService, pinus, } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { STATUS } from '../../../consts'; @@ -127,4 +127,8 @@ export class ComBattleRemote { } return this.bossHp; } + + public async leaveFromBattle(roleId: string, teamCode: string ) { + // this.app.sysrpc.msgRemote.forwardMessage + } } \ No newline at end of file diff --git a/game-server/app/servers/connector/handler/entryHandler.ts b/game-server/app/servers/connector/handler/entryHandler.ts index 423b6e2dc..91dea9a56 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -22,6 +22,7 @@ import { Rank } from '../../../services/rankService'; import { checkTaskWithRole, } from '../../../services/taskService'; import { pushData, everydayRefresh } from '../../../services/connectorService'; import { pick } from 'lodash'; +import { setComBtlOnUserLeave } from '../../../services/comBattleService'; export default function (app: Application) { new HandlerService(app, {}); @@ -192,6 +193,7 @@ export class EntryHandler { let sid = session.get('sid'); let serverId = session.get('serverId'); const guildCode = session.get('guildCode'); + const teamCode: string = session.get('teamCode'); roleLeave(roleId).then(function (roleInfo) { if (roleInfo.isOnline) { reportOneOnline(roleId, roleInfo.userCode, sid, roleInfo.pkgName); @@ -206,6 +208,9 @@ export class EntryHandler { await leaveWorldChannel(roleId, sid, serverId); await leaveGuildChannel(roleId, sid, guildCode); RoleModel.updateRoleInfo(roleId, { quitTime: nowSeconds() }); + if(teamCode) { // 如果有寻宝中的队伍,那么等于战败 + await setComBtlOnUserLeave(roleId, teamCode) + } } diff --git a/game-server/app/services/comBattleService.ts b/game-server/app/services/comBattleService.ts index f4da4884f..126943d19 100644 --- a/game-server/app/services/comBattleService.ts +++ b/game-server/app/services/comBattleService.ts @@ -12,7 +12,7 @@ import { RoleStatus, ComBattleTeamModel, ComBattleTeamType } from './../db/ComBa import { getRandEelm, getRandValue, resResult, ratioReward, getRandValueByMinMax, getRandEelmWithWeight, getRobotInfo } from "../pubUtils/util"; import { getRandRobot, transBossHpArr } from "./battleService"; import { difference, omit } from 'underscore'; -import { Channel, ChannelService } from 'pinus'; +import { Channel, ChannelService, pinus } from 'pinus'; import { TREASURE, EXTERIOR } from '../pubUtils/dicParam'; import { addItems, decreaseItems, handleCost } from './rewardService'; import { getFriendLvAdd } from './friendService'; @@ -25,6 +25,7 @@ import { getRewardByBlueprtId, gameData, getBossHpByBlueprtId } from '../pubUtil import { getFriendPointObject } from '../pubUtils/itemUtils'; import { DicWar } from '../pubUtils/dictionary/DicWar'; import { getZeroPointD } from '../pubUtils/timeUtil'; +import { dispatch } from '../util/dispatcher'; /** * 在给定的品质列表中随机返回一定数量的藏宝图Id @@ -44,12 +45,12 @@ export function getRandBlueprtId(qualityArr: number[], cnt = 1) { export function getRandComBtlRobots(topLineupCe: number, ceLimit: number, lv: number, cnt: number) { let robotHeroes = getRandRobot(cnt); // 随机几个阵容 - let robotInfos = []; // 随机几个机器人信息 + let robotInfos: { robotRoleName: string, robotRoleId: string }[] = []; // 随机几个机器人信息 for (let i = 0; i < cnt; i++) { robotInfos.push(getRobotInfo()); } // 创建并添加机器人 - let robotStArr = [], robotIdArr = []; + let robotStArr: RoleStatus[] = [], robotIdArr: string[] = []; if (robotHeroes && robotInfos && robotHeroes.length && robotInfos.length && robotInfos.length === robotHeroes.length) { robotHeroes.forEach((robot, idx) => { let robotCe = 0; @@ -666,9 +667,14 @@ export function teamIsFullToStart(comTeam: MemComBtlTeam) { * @param {number} [count=1] */ export async function addRobotsToTeam(comTeam: MemComBtlTeam, roleId: string, roleCe: number, roleLv: number, teamMap: Map, teamDisTimer: Map, channel: Channel, count = 1) { - const { teamCode } = comTeam; + const { teamCode, roleStatus } = comTeam; + let hasCap = roleStatus.findIndex(cur => cur.isCap) != -1; const { robotStArr, robotIdArr } = getRandComBtlRobots(roleCe, comTeam.ceLimit, roleLv, count); for (let st of robotStArr) { + if(!hasCap) { + st.isCap = true; + hasCap = true; + } addRoleStToTeam(comTeam, st); await ComBattleTeamModel.addRole(teamCode, st); } @@ -722,3 +728,8 @@ export async function oneTeamNotInBlack(teams: ComBattleTeamType[], roleId: stri } return null; } + +export async function setComBtlOnUserLeave(roleId: string, teamCode: string) { + let res = dispatch(teamCode, pinus.app.getServersByType('battle'), 'battle'); + await pinus.app.rpc.battle.comBattleRemote.leaveFromBattle.toServer(res.id, roleId, teamCode); +} \ No newline at end of file diff --git a/shared/db/ComBattleTeam.ts b/shared/db/ComBattleTeam.ts index 2ee3ec5ac..09e9cff4c 100644 --- a/shared/db/ComBattleTeam.ts +++ b/shared/db/ComBattleTeam.ts @@ -93,6 +93,7 @@ export class RoleStatus { this.heroes = heroes; this.killed = []; this.isRobot = isRobot; + this.fixReward = []; } addFrdRatio(frdRatio: number) {