diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index d6107c9f1..17e87645c 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -114,7 +114,7 @@ export class ComBattleHandler { const teams = await ComBattleTeamModel.getOtherTeamByQualityAndSt(roleId, qualityArr, COM_TEAM_STATUS.DEFAULT, lvRange, topLineupCe); const team: ComBattleTeamType = await oneTeamNotInBlack(teams, roleId); - if (team && team.roleIds.length < 3 && team.status === COM_TEAM_STATUS.DEFAULT && team.roleIds.indexOf(roleId) === -1) { + if (team && team.roleIds.length < 3 && team.status === COM_TEAM_STATUS.DEFAULT && team.roleIds.indexOf(roleId) === -1 && team.blacklist.indexOf(roleId) === -1) { return resResult(STATUS.SUCCESS, {teamCode: team.teamCode}); } @@ -181,6 +181,8 @@ export class ComBattleHandler { if (!teamStatus || teamStatus.status !== COM_TEAM_STATUS.DEFAULT) return resResult(STATUS.COM_BATTLE_TEAM_INVALID); if (teamIsFullToStart(teamStatus)) return resResult(STATUS.COM_BATTLE_MEMBER_LIMIT); if (teamStatus.roleIds.indexOf(roleId) !== -1) return resResult(STATUS.COM_BATTLE_DUP_ENTER); + if (teamStatus.blacklist.indexOf(roleId) != -1) return resResult(STATUS.COM_BATTLE_BE_KICKED); + let { lv = 1, head = EXTERIOR.EXTERIOR_FACE, topLineupCe = 0, frame = EXTERIOR.EXTERIOR_FACECASE, spine = EXTERIOR.EXTERIOR_APPEARANCE } = await Role.findByRoleId(roleId, null, true); let { quality } = gameData.goods.get(teamStatus.blueprtId); @@ -354,6 +356,9 @@ export class ComBattleHandler { teamStatus.roleStatus.splice(idx, 1); } }); + if(roleId === teamStatus.capId) { // 队长移除队友,并把他加入黑名单 + teamStatus.blacklist.push(roleIdToRm); + } // 推送移除消息 let channelService = this.app.get('channelService'); @@ -706,6 +711,14 @@ export class ComBattleHandler { if (!msgData) return resResult(STATUS.WRONG_PARMS); const roleInfo = await getSimpleRoleInfo(targetRoleId); + let teamStatus = this.teamMap.get(teamCode); + if(teamStatus) { + let index = teamStatus.blacklist.indexOf(targetRoleId); + if(index != -1) { + teamStatus.blacklist.splice(index, 1); + } + } + return resResult(STATUS.SUCCESS, {...msgData, roleInfo}); } diff --git a/game-server/app/services/comBattleService.ts b/game-server/app/services/comBattleService.ts index 06ce662a1..76cba9ebd 100644 --- a/game-server/app/services/comBattleService.ts +++ b/game-server/app/services/comBattleService.ts @@ -563,7 +563,7 @@ export function createComTeamData(teamCode: string, pub: boolean, blueprtId: num const bossHp = bossHpSum; const status = COM_TEAM_STATUS.DEFAULT; return { - teamCode, pub, blueprtId, status, capId, ceLimit, bossHp, bossCurHp, quality, bossHpArr: transBossHpArr(bossHpArr), curRnd, roleCnt, timeout, lvRange: equipLvl + teamCode, pub, blueprtId, status, capId, ceLimit, bossHp, bossCurHp, quality, bossHpArr: transBossHpArr(bossHpArr), curRnd, roleCnt, timeout, lvRange: equipLvl, blacklist: [] }; } diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index 0c52c7c99..0a90936ab 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -122,7 +122,7 @@ export const STATUS = { COM_BATTLE_HEROES_ERR: { code: 20629, simStr: '阵容异常' }, COM_BATTLE_SET_FRD_ERR: { code: 20630, simStr: '设置情谊助战异常' }, COM_BATTLE_BLACKLIST: { code: 20633, simStr: '队伍中存在黑名单玩家' }, - + COM_BATTLE_BE_KICKED: { code: 20634, simStr: '您已被队伍踢出,无法加入'}, // 共斗藏宝图合成 COM_BLUEPRT_QUALITY_CANNOT_COMPOSE: { code: 20630, simStr: '该品质藏宝图不可合成' }, COM_BLUEPRT_COUNT_ERROR: { code: 20631, simStr: '材料数量不足' }, diff --git a/shared/db/ComBattleTeam.ts b/shared/db/ComBattleTeam.ts index 09e9cff4c..a38866b5b 100644 --- a/shared/db/ComBattleTeam.ts +++ b/shared/db/ComBattleTeam.ts @@ -175,6 +175,9 @@ export default class ComBattleTeam extends BaseModel { @prop({ required: true, default: false }) timeout: boolean; + // 黑名单 + blacklist: string[] = []; + public static async createTeam(teamData: ComBattleTeamParam, lean = true) { const team: ComBattleTeamType = await ComBattleTeamModel.findOneAndUpdate({ teamCode: teamData.teamCode }, {$set :{...teamData, roleCnt: teamData.roleIds.length}}, {upsert: true, new: true}).lean(lean); return team;