寻宝机器人伤害

This commit is contained in:
liangtongchuan
2020-11-28 22:34:55 +08:00
parent d41e348b93
commit a247f381d0
2 changed files with 43 additions and 18 deletions

View File

@@ -1,4 +1,4 @@
import { COM_BATTLE_ROBOT_CE_RATIO, COM_BATTLE_ROBOT_ID_NAME, COM_BATTLE_ASSIST_TIME } from './../../../consts/consts';
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 } from './../../../consts/consts';
import { IT_TYPE, GOLD_COST_RATIO, CURRENCY_BY_TYPE, CURRENCY_TYPE } from '../../../consts/consts';
import { getGoodById, getBossHpByBlueprtId, getComBtlSetByQuality, getBlueprtComposeByQuality, getBluePrtByQuality } from '../../../pubUtils/gamedata';
import { COM_TEAM_STATUS, COM_TEAM_ENABLE_LV } from '../../../consts/consts';
@@ -43,6 +43,8 @@ class ComTeam {
bossHpArr: Array<{dataId: number, hp: number, curHp: number}>;
// 品质
quality: number;
// 当前回合
curRnd: number;
constructor(teamCode: string, pub: boolean, blueprtId: number, status: number, capId: string, ceLimit: number, bossHp: number, quality: number, bossHpArr:Array<{dataId: number, hp: number, curHp: number}> ) {
this.teamCode = teamCode;
@@ -55,6 +57,7 @@ class ComTeam {
this.bossCurHp = bossHp;
this.quality = quality;
this.bossHpArr = bossHpArr;
this.curRnd = 0;
}
}
export class ComBattleHandler {
@@ -95,7 +98,7 @@ export class ComBattleHandler {
for (let teammate of teammates) {
// TODO: 要判断战力
let roleInfo = await RoleModel.findByRoleId(teammate.roleId);
if (!roleInfo) continue;
if (!roleInfo || roleIds.indexOf(teammate.roleId) !== -1) continue;
let {roleId, roleName, headHid = 19, sHid = 19, topFiveCe, lv} = roleInfo;
// TODO: 没处理情谊助战
const st = new RoleStatus(roleId, roleName, false, false, headHid, sHid, topFiveCe, lv);
@@ -357,9 +360,9 @@ export class ComBattleHandler {
return resResult(STATUS.SUCCESS);
}
async action(msg: {teamCode: string, heroes: Array<{hid: number, hurtHp: number}>, bossHurts: Array<{dataId: number, hurtHp: number}>, killed: Array<number>}, session: BackendSession) {
async action(msg: {teamCode: string, heroes: Array<{hid: number, hurtHp: number}>, bossHurts: Array<{dataId: number, hurtHp: number}>, killed: Array<number>, curRnd: number}, session: BackendSession) {
let roleId = session.get('roleId');
let { teamCode, heroes, killed, bossHurts } = msg;
let { teamCode, heroes, 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);
@@ -381,8 +384,14 @@ export class ComBattleHandler {
});
}
if (totalHurtHp !== totalBossHurt) return resResult(STATUS.COM_BATTLE_HURT_NUM_ERR);
let curRoleSt = null;
teamStatus.bossHpArr.forEach(boss => {
bossHurts.forEach(bh => {
if (boss.dataId === bh.dataId) {
boss.curHp -= bh.hurtHp;
if (boss.curHp < 0) boss.curHp = 0;
}
})
});
teamStatus.roleStatus.forEach(roleSt => {
if (roleSt.roleId === roleId) {
if (killed && killed.length) {
@@ -393,21 +402,33 @@ export class ComBattleHandler {
});
}
roleSt.totalDmg += totalHurtHp;
curRoleSt = roleSt;
} else if (curRnd > teamStatus.curRnd && curRnd <= COM_BATTLE_ROBOT_ROUND_LMT && roleSt.isRobot) {
// 机器人的伤害为boss 血量的一定比例,平均到一定回合数内,再平均到每个敌军,上下浮动一定比例
let eachHurtHp = getRandValue(teamStatus.bossHp / COM_BATTLE_ROBOT_ROUND_LMT * COM_BATTLE_ROBOT_HURT_RATIO / 5, COM_BATTLE_ROBOT_HURT_CH_RATIO, 0);
let robotTotalHurt = 0;
teamStatus.bossHpArr.forEach(boss => {
if (boss.curHp >= eachHurtHp) {
robotTotalHurt += eachHurtHp;
boss.curHp -= eachHurtHp;
} else { // 丢弃溢出的伤害
robotTotalHurt += boss.curHp;
boss.curHp = 0;
}
});
teamStatus.bossCurHp -= robotTotalHurt;
roleSt.totalDmg += robotTotalHurt;
// 输出回合一到机器人武将集体阵亡
if (curRnd === COM_BATTLE_ROBOT_ROUND_LMT) {
roleSt.killed === roleSt.heroes;
}
}
});
teamStatus.curRnd = curRnd;
teamStatus.bossCurHp -= totalHurtHp;
teamStatus.bossHpArr.forEach(boss => {
bossHurts.forEach(bh => {
if (boss.dataId === bh.dataId) {
boss.curHp -= bh.hurtHp;
if (boss.curHp < 0) boss.curHp = 0;
}
})
});
let channelService = this.app.get('channelService');
let channel = channelService.getChannel(teamCode, false);
channel.pushMessage('onTeammateAct', {teamCode, bossCurHp: teamStatus.bossCurHp, bossHpArr: teamStatus.bossHpArr, roleStatus: {roleId, totalDmg: curRoleSt.totalDmg, killed}});
const roleStatus = teamStatus.roleStatus.map(st => {return {roleId: st.roleId, totalDmg: st.totalDmg, killed: st.killed}});
channel.pushMessage('onTeammateAct', {teamCode, bossCurHp: teamStatus.bossCurHp, bossHpArr: teamStatus.bossHpArr, roleStatus});
return resResult(STATUS.SUCCESS);
}
@@ -514,8 +535,6 @@ export class ComBattleHandler {
// return resResult(STATUS.SUCCESS, { bossCurHp: this.bossCurHp});
// }
async composeBlueprt(msg: {original: Array<{id: number, count: number}>}, session: BackendSession) {
const roleId = session.get('roleId');
const roleName = session.get('roleName');