寻宝:仅匹配特定等级区间;修复机器人武将不阵亡 bug

This commit is contained in:
liangtongchuan
2021-01-20 13:36:16 +08:00
parent 58b8d1c05d
commit d0cd3faab5
7 changed files with 104 additions and 38 deletions

View File

@@ -147,6 +147,16 @@ export const COM_BTL_CONST = {
ASSIST_REWARD_RATIO: 0.5, // 队员奖励比例
}
// 寻宝等级区间
export const COM_BTL_LV_RANGE = [
{id: 1, minLv: 1, maxLv: 19},
{id: 2, minLv: 20, maxLv: 39},
{id: 3, minLv: 40, maxLv: 59},
{id: 4, minLv: 60, maxLv: 79},
{id: 5, minLv: 80, maxLv: 99},
{id: 6, minLv: 100, maxLv: 100},
];
// 机器人名字随机
export const COM_BATTLE_ROBOT_ID_NAME = [
{robotRoleId: 'cd9h0iy8', robotRoleName: '徐埋农'},

View File

@@ -121,6 +121,10 @@ export default class ComBattleTeam extends BaseModel {
@prop({ required: true, default: 1 })
roleCnt: number;
// 藏宝图等级所处范围,用来匹配
@prop({ required: true, default: 1 })
lvRange: number;
// 单个 boss 血量状态
@prop({ required: false, type: BossHp, default: [] })
bossHpArr: Array<BossHp>;
@@ -218,9 +222,9 @@ export default class ComBattleTeam extends BaseModel {
return team;
}
public static async getOtherTeamByQualityAndSt(roleId: string, qualityArr: Array<number>, status: number, ce = 0, pub = true, cntLmt = 2, lean = true) {
public static async getOtherTeamByQualityAndSt(roleId: string, qualityArr: Array<number>, status: number, lvRange: number, ce = 0, pub = true, cntLmt = 2, lean = true) {
const curTime = new Date(Date.now() - 10 * 60 * 1000); // 10分钟之前
const team: ComBattleTeamType = await ComBattleTeamModel.findOne({quality: {$in: qualityArr}, status, ceLimit: {$lte: ce}, pub, roleCnt: {$lte: cntLmt}, roleIds: {$nin: [roleId]}, updatedAt: {$gte: curTime}}).lean(lean);
const team: ComBattleTeamType = await ComBattleTeamModel.findOne({quality: {$in: qualityArr}, status, lvRange, ceLimit: {$lte: ce}, pub, roleCnt: {$lte: cntLmt}, roleIds: {$nin: [roleId]}, updatedAt: {$gte: curTime}}).lean(lean);
return team;
}

View File

@@ -10,8 +10,8 @@ export interface DicXunbao {
readonly name: number;
// 协助次数
readonly assistanceTime: number;
// 最低协助等级
readonly assistanceLevel: number;
// ! 已删除。最低协助等级
// readonly assistanceLevel: number;
}
const str = readJsonFile(FILENAME.DIC_XUNBAO);

View File

@@ -1,6 +1,6 @@
import fs = require('fs');
import path = require('path');
import { ABI_TYPE, ABI_STAGE } from '../consts';
import { ABI_TYPE, ABI_STAGE, COM_BTL_LV_RANGE } from '../consts';
import { decodeIdCntArrayStr, getRandEelm } from './util';
import { IT_TYPE } from '../consts';
@@ -20,7 +20,7 @@ const heroSkillInfo = new Map<number, any>()
const seidInfo = new Map<number, any>();
const olySeidInfo = new Map<number, any>();
const expeditionInfo = new Map<number, any> ();
const comBtlInfo = new Map<number, {quality: number, name: string, assistanceTime: number, assistanceLevel: number}>();
const comBtlInfo = new Map<number, {quality: number, name: string, assistanceTime: number}>();
const btlBossHpSum = new Map<number, number>();
const btlBossHp = new Map<number, Array<{dataId: number, hp: number, actorId: number}>>();
const blueprtToWar = new Map<number, number>();
@@ -31,6 +31,7 @@ const fiendShips = new Map<string, any>();
const fashions = new Map<number, any>();
const fiendShipHidAandIds = new Map<number, {actorId: number, level:number}>();
const fiendShipLevelMaps = new Map<number, any>();
const comBtlLvRange = new Map<number, Array<number>>();
interface dicStar {
id: number;
@@ -241,6 +242,17 @@ function parseComBtlData() {
});
}
function parseComBtlLvRange() {
const lvRange = COM_BTL_LV_RANGE;
lvRange.forEach(range => {
const lvs = [];
for (let lv = range.minLv; lv <= range.maxLv; lv++) {
lvs.push(lv);
}
comBtlLvRange.set(range.id, lvs);
});
}
function parseGood() {
const file = 'dic_goods';
const data = gamedata['jsons'][file] || [];
@@ -402,6 +414,7 @@ function parseData() {
parseOlySeidList();
parseExpedition();
parseComBtlData();
parseComBtlLvRange();
parseGood();
parseBlueprtCompose();
parseFashions();
@@ -528,6 +541,22 @@ export function getComBtlSetByQuality(quality: number) {
return comBtlInfo.get(quality);
}
export function comBtlRangeInfo(range: number) {
return comBtlLvRange.get(range);
}
export function comBtlRangeByLv(lv: number) {
for (let [k, v] of comBtlLvRange) {
if (v.indexOf(lv) !== -1) {
return k;
}
}
}
export function comBtlRanges() {
return Array.from(comBtlLvRange.keys());
}
export function getBossHpByWarId(warId: number) {
let bossHpSum = btlBossHpSum.get(warId) || 0;
let bossHpArr = btlBossHp.get(warId) || [];