寻宝机器人伤害
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 { IT_TYPE, GOLD_COST_RATIO, CURRENCY_BY_TYPE, CURRENCY_TYPE } from '../../../consts/consts';
|
||||||
import { getGoodById, getBossHpByBlueprtId, getComBtlSetByQuality, getBlueprtComposeByQuality, getBluePrtByQuality } from '../../../pubUtils/gamedata';
|
import { getGoodById, getBossHpByBlueprtId, getComBtlSetByQuality, getBlueprtComposeByQuality, getBluePrtByQuality } from '../../../pubUtils/gamedata';
|
||||||
import { COM_TEAM_STATUS, COM_TEAM_ENABLE_LV } from '../../../consts/consts';
|
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}>;
|
bossHpArr: Array<{dataId: number, hp: number, curHp: number}>;
|
||||||
// 品质
|
// 品质
|
||||||
quality: 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}> ) {
|
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;
|
this.teamCode = teamCode;
|
||||||
@@ -55,6 +57,7 @@ class ComTeam {
|
|||||||
this.bossCurHp = bossHp;
|
this.bossCurHp = bossHp;
|
||||||
this.quality = quality;
|
this.quality = quality;
|
||||||
this.bossHpArr = bossHpArr;
|
this.bossHpArr = bossHpArr;
|
||||||
|
this.curRnd = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
export class ComBattleHandler {
|
export class ComBattleHandler {
|
||||||
@@ -95,7 +98,7 @@ export class ComBattleHandler {
|
|||||||
for (let teammate of teammates) {
|
for (let teammate of teammates) {
|
||||||
// TODO: 要判断战力
|
// TODO: 要判断战力
|
||||||
let roleInfo = await RoleModel.findByRoleId(teammate.roleId);
|
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;
|
let {roleId, roleName, headHid = 19, sHid = 19, topFiveCe, lv} = roleInfo;
|
||||||
// TODO: 没处理情谊助战
|
// TODO: 没处理情谊助战
|
||||||
const st = new RoleStatus(roleId, roleName, false, false, headHid, sHid, topFiveCe, lv);
|
const st = new RoleStatus(roleId, roleName, false, false, headHid, sHid, topFiveCe, lv);
|
||||||
@@ -357,9 +360,9 @@ export class ComBattleHandler {
|
|||||||
return resResult(STATUS.SUCCESS);
|
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 roleId = session.get('roleId');
|
||||||
let { teamCode, heroes, killed, bossHurts } = msg;
|
let { teamCode, heroes, killed, bossHurts, curRnd } = msg;
|
||||||
let teamStatus = this.teamMap.get(teamCode);
|
let teamStatus = this.teamMap.get(teamCode);
|
||||||
if (!teamStatus || !teamStatus.roleIds || teamStatus.roleIds.indexOf(roleId) === -1) return resResult(STATUS.COM_BATTLE_TEAM_INVALID);
|
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);
|
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);
|
if (totalHurtHp !== totalBossHurt) return resResult(STATUS.COM_BATTLE_HURT_NUM_ERR);
|
||||||
|
teamStatus.bossHpArr.forEach(boss => {
|
||||||
let curRoleSt = null;
|
bossHurts.forEach(bh => {
|
||||||
|
if (boss.dataId === bh.dataId) {
|
||||||
|
boss.curHp -= bh.hurtHp;
|
||||||
|
if (boss.curHp < 0) boss.curHp = 0;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
teamStatus.roleStatus.forEach(roleSt => {
|
teamStatus.roleStatus.forEach(roleSt => {
|
||||||
if (roleSt.roleId === roleId) {
|
if (roleSt.roleId === roleId) {
|
||||||
if (killed && killed.length) {
|
if (killed && killed.length) {
|
||||||
@@ -393,21 +402,33 @@ export class ComBattleHandler {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
roleSt.totalDmg += totalHurtHp;
|
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.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 channelService = this.app.get('channelService');
|
||||||
let channel = channelService.getChannel(teamCode, false);
|
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);
|
return resResult(STATUS.SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -514,8 +535,6 @@ export class ComBattleHandler {
|
|||||||
// return resResult(STATUS.SUCCESS, { bossCurHp: this.bossCurHp});
|
// return resResult(STATUS.SUCCESS, { bossCurHp: this.bossCurHp});
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async composeBlueprt(msg: {original: Array<{id: number, count: number}>}, session: BackendSession) {
|
async composeBlueprt(msg: {original: Array<{id: number, count: number}>}, session: BackendSession) {
|
||||||
const roleId = session.get('roleId');
|
const roleId = session.get('roleId');
|
||||||
const roleName = session.get('roleName');
|
const roleName = session.get('roleName');
|
||||||
|
|||||||
@@ -297,6 +297,12 @@ export const COM_BATTLE_ASSIST_TIME = 60 * 1000;
|
|||||||
export const COM_BATTLE_CAP_TIME = 60 * 1000;
|
export const COM_BATTLE_CAP_TIME = 60 * 1000;
|
||||||
// 人齐后队长开始时长倒计时
|
// 人齐后队长开始时长倒计时
|
||||||
export const COM_BATTLE_CAP_START_TIME = 60 * 1000;
|
export const COM_BATTLE_CAP_START_TIME = 60 * 1000;
|
||||||
|
// 机器人输出伤害的回合数
|
||||||
|
export const COM_BATTLE_ROBOT_ROUND_LMT = 10;
|
||||||
|
// 单个机器人输出总伤害占 boss 血量比重
|
||||||
|
export const COM_BATTLE_ROBOT_HURT_RATIO = 0.2;
|
||||||
|
// 机器人伤害上下浮动的比例
|
||||||
|
export const COM_BATTLE_ROBOT_HURT_CH_RATIO = 0.1;
|
||||||
|
|
||||||
// 机器人名字随机
|
// 机器人名字随机
|
||||||
export const COM_BATTLE_ROBOT_ID_NAME = [
|
export const COM_BATTLE_ROBOT_ID_NAME = [
|
||||||
|
|||||||
Reference in New Issue
Block a user