寻宝:创建队伍超时匹配机器人;战斗超时判负;优化代码并修复部分bug
This commit is contained in:
@@ -1,12 +1,15 @@
|
||||
import { COM_BATTLE_ROBOT_ID_NAME, COM_BATTLE_ROBOT_CE_RATIO, COM_BATTLE_ROBOT_ROUND_LMT, COM_BATTLE_ROBOT_HURT_RATIO, COM_BATTLE_ROBOT_HURT_CH_RATIO, COM_TEAM_STATUS } from './../consts/consts';
|
||||
import { RoleStatus } from './../db/ComBattleTeam';
|
||||
import { getBluePrtByQuality } from "../pubUtils/gamedata";
|
||||
import { getRandEelm } from "../pubUtils/util";
|
||||
import { getRandEelm, getRandValue } from "../pubUtils/util";
|
||||
import { getRandRobot } from "./battleService";
|
||||
|
||||
/**
|
||||
* 在给定的品质列表中随机返回一定数量的藏宝图Id
|
||||
* @param qualityArr 品质数组,在所有给定品质的藏宝图中筛选1
|
||||
* @param cnt 返回藏宝图数量
|
||||
*/
|
||||
export async function getRandBlueprtId(qualityArr: Array<number>, cnt = 1) {
|
||||
export function getRandBlueprtId(qualityArr: Array<number>, cnt = 1) {
|
||||
if (!qualityArr || !qualityArr.length) return null;
|
||||
let blueprtIdArr = [];
|
||||
for (let q of qualityArr) {
|
||||
@@ -16,3 +19,55 @@ export async function getRandBlueprtId(qualityArr: Array<number>, cnt = 1) {
|
||||
const res = getRandEelm(blueprtIdArr, cnt);
|
||||
return res;
|
||||
}
|
||||
|
||||
export function getRandComBtlRobots(topFiveCe: number, lv: number, cnt: number) {
|
||||
let robotHeroes = getRandRobot(cnt); // 随机两个阵容
|
||||
// 创建并添加机器人
|
||||
let robotStArr = [], robotIdArr = [];
|
||||
for (let robot of robotHeroes) {
|
||||
const robotCe = getRandValue(topFiveCe, COM_BATTLE_ROBOT_CE_RATIO, 0);
|
||||
const robotLv = getRandValue(lv, COM_BATTLE_ROBOT_CE_RATIO, 0);
|
||||
const imgHid = robot[Math.floor(Math.random() * robot.length)];
|
||||
const { robotRoleId, robotRoleName } = COM_BATTLE_ROBOT_ID_NAME[Math.floor(Math.random() * COM_BATTLE_ROBOT_ID_NAME.length)];
|
||||
let robotStatus = new RoleStatus(robotRoleId, robotRoleName, false, false, imgHid, imgHid, robotCe, robotLv, robot, true);
|
||||
robotStArr.push(robotStatus);
|
||||
robotIdArr.push(robotRoleId);
|
||||
}
|
||||
return {
|
||||
robotStArr, robotIdArr
|
||||
}
|
||||
}
|
||||
|
||||
export function checkComBattleResult(teamStatus) {
|
||||
if (teamStatus.bossCurHp === 0) {
|
||||
return COM_TEAM_STATUS.WIN;
|
||||
} else {
|
||||
let allPlayerKilled = true;
|
||||
let robotRestHurt = 0;
|
||||
// 看看是否还有活人
|
||||
teamStatus.roleStatus.forEach(st => {
|
||||
if (!st.isRobot && st.killed.length < st.heroes.length) {
|
||||
allPlayerKilled = false
|
||||
}
|
||||
});
|
||||
// 没有活人的话看看还有没有机器人没打完伤害
|
||||
if (allPlayerKilled && teamStatus.curRnd < COM_BATTLE_ROBOT_ROUND_LMT) {
|
||||
teamStatus.roleStatus.forEach(st => {
|
||||
if (st.isRobot) {
|
||||
const deltaRnd = COM_BATTLE_ROBOT_ROUND_LMT - teamStatus.curRnd;
|
||||
let hurtHp = getRandValue(teamStatus.bossHp / COM_BATTLE_ROBOT_ROUND_LMT * COM_BATTLE_ROBOT_HURT_RATIO, COM_BATTLE_ROBOT_HURT_CH_RATIO, 0) * deltaRnd; // 1 个机器人对 boss 造成的总伤害
|
||||
robotRestHurt += hurtHp;
|
||||
}
|
||||
})
|
||||
}
|
||||
if (allPlayerKilled) {
|
||||
// 没有活人且机器人剩余伤害打不死 boss,战败
|
||||
if (teamStatus.bossCurHp > robotRestHurt) {
|
||||
return COM_TEAM_STATUS.LOOSE;
|
||||
} else {
|
||||
return COM_TEAM_STATUS.WIN;
|
||||
}
|
||||
}
|
||||
}
|
||||
return COM_TEAM_STATUS.FIGHTING;
|
||||
}
|
||||
Reference in New Issue
Block a user