diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index 3684c95f0..b02dae73a 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -2,7 +2,7 @@ * @Author: 梁桐川 * @Date: 2020-11-30 15:05:48 * @Last Modified by: 梁桐川 - * @Last Modified time: 2020-11-30 15:09:51 + * @Last Modified time: 2020-11-30 18:08:49 */ import { COM_BATTLE_ROBOT_CE_RATIO, COM_BATTLE_ROBOT_ID_NAME, COM_BATTLE_ASSIST_TIME, COM_BATTLE_ROBOT_ROUND_LMT, COM_BATTLE_ROBOT_HURT_RATIO, COM_BATTLE_ROBOT_HURT_CH_RATIO, COM_TEAM_STATUS } from './../../../consts/consts'; import { IT_TYPE, GOLD_COST_RATIO, CURRENCY_BY_TYPE, CURRENCY_TYPE } from '../../../consts/consts'; @@ -232,7 +232,7 @@ export class ComBattleHandler { let teamStatus = this.teamMap.get(teamCode); if (!teamStatus || teamStatus.status !== 0 || teamStatus.roleIds.length === 3) return resResult(STATUS.COM_BATTLE_MEMBER_LIMIT); if (teamStatus.roleIds.indexOf(roleId) !== -1) return resResult(STATUS.COM_BATTLE_DUP_ENTER); - let { lv, headHid = 19, topFiveCe = 0, sHid = 19 } = await Role.findByRoleId(roleId); + let { lv = 1, headHid = 19, topFiveCe = 0, sHid = 19 } = await Role.findByRoleId(roleId); let { quality } = getGoodById(teamStatus.blueprtId); let { assistanceLevel, assistanceTime } = getComBtlSetByQuality(quality); if (lv < COM_TEAM_ENABLE_LV) { @@ -452,51 +452,33 @@ export class ComBattleHandler { /** * @description 战场中的状态同步,战斗结果判定 - * @param {{teamCode: string, heroes: Array<{hid: number, hurtHp: number}>, bossHurts: Array<{dataId: number, hurtHp: number}>, killed: Array, curRnd: number}} msg 队伍编号;武将伤害;boss 承伤;武将阵亡;当前回合 + * @param {{teamCode: string, bossHurts: Array<{dataId: number, hurtHp: number}>, killed: Array, curRnd: number}} msg 队伍编号;boss 承伤;武将阵亡;当前回合 * @param {BackendSession} session * @returns * @memberof ComBattleHandler */ - async action(msg: {teamCode: string, heroes: Array<{hid: number, hurtHp: number}>, bossHurts: Array<{dataId: number, hurtHp: number}>, killed: Array, curRnd: number}, session: BackendSession) { + async action(msg: {teamCode: string, bossHurts: Array<{dataId: number, hurtHp: number}>, killed: Array, curRnd: number}, session: BackendSession) { let roleId = session.get('roleId'); - let { teamCode, heroes, killed, bossHurts, curRnd } = msg; + let { teamCode, killed, bossHurts, curRnd } = msg; let teamStatus = this.teamMap.get(teamCode); if (!teamStatus || !teamStatus.roleIds || teamStatus.roleIds.indexOf(roleId) === -1) return resResult(STATUS.COM_BATTLE_TEAM_INVALID); if (teamStatus.status !== COM_TEAM_STATUS.FIGHTING) return resResult(STATUS.COM_BATTLE_NOT_START); - // 仅做武将伤害和 boss 承伤的校验,不处理溢出 - let totalHurtHp = 0; - let totalBossHurt = 0; - if (heroes && heroes.length) { - heroes.forEach(hero => { - if (hero.hurtHp > 0) { - totalHurtHp += hero.hurtHp; - } - }); - } - if (bossHurts && bossHurts.length) { - bossHurts.forEach(boss => { - if (boss.hurtHp > 0) { - totalBossHurt += boss.hurtHp; - } - }); - } - if (totalHurtHp !== totalBossHurt) return resResult(STATUS.COM_BATTLE_HURT_NUM_ERR); - // 重置总血量,计算真实伤害 - totalHurtHp = 0, totalBossHurt = 0; + let totalHurtHp = 0; teamStatus.bossHpArr.forEach(boss => { - bossHurts.forEach(bh => { - if (boss.dataId === bh.dataId) { - if (boss.curHp >= bh.hurtHp) { - totalHurtHp += bh.hurtHp; - boss.curHp -= bh.hurtHp; + for (let bh of bossHurts) { + if (boss.dataId === bh.dataId && bh.hurtHp < 0) { + let deltaHp = Math.abs(bh.hurtHp); + if (boss.curHp >= deltaHp) { + totalHurtHp += deltaHp; + boss.curHp -= deltaHp; } else { - totalHurtHp += boss.curHp; + totalHurtHp += deltaHp; boss.curHp = 0; } } - }) + } }); // 更新玩家武将阵亡情况,计算玩家总伤害,计算机器人造成的伤害 teamStatus.roleStatus.forEach(roleSt => {