寻宝机器人伤害
This commit is contained in:
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user