寻宝:修改寻宝中类型的使用

This commit is contained in:
liangtongchuan
2021-02-19 14:48:29 +08:00
parent 5cda61fc7c
commit a057da5c13
4 changed files with 40 additions and 62 deletions

View File

@@ -1,3 +1,4 @@
import { MemComBtlTeam } from './../../../domain/battleField/ComBattleTeamField';
import { difference } from 'underscore'; import { difference } from 'underscore';
/* /*
* @Author: 梁桐川 * @Author: 梁桐川
@@ -7,79 +8,26 @@ import { difference } from 'underscore';
*/ */
import { IT_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, COM_TEAM_STATUS, COM_BTL_CONST, CONSUME_TYPE, COM_BTL_QUALITY } from './../../../consts'; import { IT_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, COM_TEAM_STATUS, COM_BTL_CONST, CONSUME_TYPE, COM_BTL_QUALITY } from './../../../consts';
import { getGoodById, getBossHpByBlueprtId, getBlueprtComposeByQuality, getBluePrtByQuality, getWarById, getWarIdByBlueprtId, comBtlRangeByLv } from '../../../pubUtils/gamedata'; import { getGoodById, getBossHpByBlueprtId, getBlueprtComposeByQuality, getBluePrtByQuality, getWarById, getWarIdByBlueprtId, comBtlRangeByLv } from '../../../pubUtils/gamedata';
import { ComBattleTeamModel, BossHp, ComBattleTeamType } from '../../../db/ComBattleTeam';
import Role, { RoleModel } from '../../../db/Role'; import Role, { RoleModel } from '../../../db/Role';
import { STATUS } from '../../../consts/statusCode'; import { STATUS } from '../../../consts/statusCode';
import { Application, BackendSession } from 'pinus'; import { Application, BackendSession } from 'pinus';
import { resResult, getRandomByLen, reduceCe, getRandValueByMinMax } from '../../../pubUtils/util'; import { resResult, getRandomByLen, reduceCe, getRandValueByMinMax } from '../../../pubUtils/util';
import { RoleStatus } from '../../../db/ComBattleTeam'; import { RoleStatus, ComBattleTeamModel, ComBattleTeamType } from '../../../db/ComBattleTeam';
import { ItemModel } from '../../../db/Item'; import { ItemModel } from '../../../db/Item';
import { handleFixedReward, addItems, handleCost } from '../../../services/rewardService'; import { handleFixedReward, addItems, handleCost } from '../../../services/rewardService';
import { checkRoleInQueue, getTeamSearchByQuality, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService'; import { checkRoleInQueue, getTeamSearchByQuality, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService';
import { transBossHpArr } from '../../../services/battleService'; import { transBossHpArr } from '../../../services/battleService';
import { getRandBlueprtId, getRandComBtlRobots, clearComBtlTimer, getAssistTimesByQuality, getFrd, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, incEquipPrintDrop, randEquipPrintId, handleComBtlProgress, getComBattleFriendAdd, getValidTeammateRoleSt, teammateInBlackList, blueprtIdValid } from '../../../services/comBattleService'; import { getRandBlueprtId, getRandComBtlRobots, clearComBtlTimer, getAssistTimesByQuality, getFrd, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, incEquipPrintDrop, randEquipPrintId, handleComBtlProgress, getComBattleFriendAdd, getValidTeammateRoleSt, teammateInBlackList, blueprtIdValid, createComTeamData } from '../../../services/comBattleService';
import { setAp } from '../../../services/actionPointService'; import { setAp } from '../../../services/actionPointService';
import { roleLevelup } from '../../../services/normalBattleService'; import { roleLevelup } from '../../../services/normalBattleService';
export default function(app: Application) { export default function(app: Application) {
return new ComBattleHandler(app); return new ComBattleHandler(app);
} }
class ComTeam {
// 队伍唯一编号
teamCode: string;
// 玩家列表
roleIds: Array<string>
// 队伍是否开放加入
pub: boolean;
// 对应藏宝图 Id
blueprtId: number;
// 战斗状态 0未开始1已开始2胜利3失败
status: number;
// 玩家状态
roleStatus: Array<RoleStatus>;
// 队长 roleId
capId: string;
// 战力限制
ceLimit: number;
// boss 总血量
bossHp: number;
// boss 当前血量
bossCurHp: number;
// 单个 boss 血量状态
bossHpArr: Array<BossHp>;
// 品质
quality: number;
// 当前回合
curRnd: number;
// 队伍中人数
roleCnt: number;
// 藏宝图等级所处范围,用来匹配
lvRange: number;
// 队伍是否开放加入
timeout: boolean;
constructor(teamCode: string, pub: boolean, blueprtId: number, status: number, capId: string, ceLimit: number, bossHp: number, quality: number, bossHpArr:Array<BossHp> ) {
this.teamCode = teamCode;
this.pub = pub;
this.blueprtId = blueprtId;
this.status = status;
this.capId = capId;
this.ceLimit = ceLimit;
this.bossHp = bossHp;
this.bossCurHp = bossHp;
this.quality = quality;
this.bossHpArr = bossHpArr;
this.curRnd = 0;
this.roleCnt = 1;
this.timeout = false;
let { lvLimited } = getGoodById(blueprtId);
this.lvRange = comBtlRangeByLv(lvLimited);
}
}
export class ComBattleHandler { export class ComBattleHandler {
constructor(private app: Application) { constructor(private app: Application) {
} }
private teamMap: Map<string, ComTeam> = new Map(); private teamMap: Map<string, MemComBtlTeam> = new Map();
private teamDisTimer: Map<string, NodeJS.Timer> = new Map(); private teamDisTimer: Map<string, NodeJS.Timer> = new Map();
private robotHurtTimer: Map<string, NodeJS.Timer> = new Map(); private robotHurtTimer: Map<string, NodeJS.Timer> = new Map();
@@ -134,7 +82,7 @@ export class ComBattleHandler {
} }
let { bossHpSum, bossHpArr } = getBossHpByBlueprtId(blueprtId); let { bossHpSum, bossHpArr } = getBossHpByBlueprtId(blueprtId);
// 创建队伍数据结构 // 创建队伍数据结构
let comTeam = new ComTeam(teamCode, pub, blueprtId, COM_TEAM_STATUS.DEFAULT, roleId, ceLimit, bossHpSum || 10000, goodData.quality, transBossHpArr(bossHpArr)); let comTeam: MemComBtlTeam = createComTeamData(teamCode, pub, blueprtId, COM_TEAM_STATUS.DEFAULT, roleId, ceLimit, bossHpSum || 10000, goodData.quality, transBossHpArr(bossHpArr));
comTeam.roleStatus = roleStatus; comTeam.roleStatus = roleStatus;
comTeam.roleIds = roleIds; comTeam.roleIds = roleIds;
@@ -242,7 +190,7 @@ export class ComBattleHandler {
let blueprtId = getRandBlueprtId(qualityArr).pop(); let blueprtId = getRandBlueprtId(qualityArr).pop();
let { quality } = getGoodById(blueprtId); let { quality } = getGoodById(blueprtId);
let { bossHpSum, bossHpArr } = getBossHpByBlueprtId(blueprtId); let { bossHpSum, bossHpArr } = getBossHpByBlueprtId(blueprtId);
let comTeam = new ComTeam(teamCode, false, blueprtId, COM_TEAM_STATUS.DEFAULT, 'robot', 0, bossHpSum || 10000, quality, transBossHpArr(bossHpArr)); let comTeam: MemComBtlTeam = createComTeamData(teamCode, false, blueprtId, COM_TEAM_STATUS.DEFAULT, 'robot', 0, bossHpSum || 10000, quality, transBossHpArr(bossHpArr))
let isFrd = await getFrd(roleId, quality); let isFrd = await getFrd(roleId, quality);
// 将玩家加入队伍 // 将玩家加入队伍

View File

@@ -6,8 +6,8 @@ import { EquipPrintDropType, EquipPrintDropModel } from './../db/EquipPrintDrop'
import { FriendPointModel } from './../db/FriendPoint'; import { FriendPointModel } from './../db/FriendPoint';
import { STATUS } from './../consts/statusCode'; import { STATUS } from './../consts/statusCode';
import { COM_TEAM_STATUS, CURRENCY_BY_TYPE, CURRENCY_TYPE, FRIEND_DROP_TYPE, COM_BTL_CONST, FRIEND_DROP_MAX } from './../consts'; import { COM_TEAM_STATUS, CURRENCY_BY_TYPE, CURRENCY_TYPE, FRIEND_DROP_TYPE, COM_BTL_CONST, FRIEND_DROP_MAX } from './../consts';
import { RoleStatus, ComBattleTeamModel } from './../db/ComBattleTeam'; import { RoleStatus, ComBattleTeamModel, BossHp } from './../db/ComBattleTeam';
import { getBluePrtByQuality, getComBtlSetByQuality, getRewardByBlueprtId, getWarById, getWarIdByBlueprtId, comBtlRangeInfo, getGoodById } from "../pubUtils/gamedata"; import { getBluePrtByQuality, getComBtlSetByQuality, getRewardByBlueprtId, getWarById, getWarIdByBlueprtId, comBtlRangeInfo, getGoodById, comBtlRangeByLv } from "../pubUtils/gamedata";
import { getRandEelm, getRandValue, resResult, ratioReward, getRandValueByMinMax, getRandomWithWeight, decodeStr, getRobotInfo, reduceCe } from "../pubUtils/util"; import { getRandEelm, getRandValue, resResult, ratioReward, getRandValueByMinMax, getRandomWithWeight, decodeStr, getRobotInfo, reduceCe } from "../pubUtils/util";
import { getRandRobot } from "./battleService"; import { getRandRobot } from "./battleService";
import { difference, omit } from 'underscore'; import { difference, omit } from 'underscore';
@@ -17,6 +17,7 @@ import { decreaseItems } from './rewardService';
import { getFriendLvAdd } from './friendService'; import { getFriendLvAdd } from './friendService';
import { getRoleIds } from '../pubUtils/friendUtil'; import { getRoleIds } from '../pubUtils/friendUtil';
/** /**
* 在给定的品质列表中随机返回一定数量的藏宝图Id * 在给定的品质列表中随机返回一定数量的藏宝图Id
* @param qualityArr 品质数组在所有给定品质的藏宝图中筛选1 * @param qualityArr 品质数组在所有给定品质的藏宝图中筛选1
@@ -513,4 +514,30 @@ export async function teammateInBlackList(roleId: string, roleIds: Array<string>
export function blueprtIdValid(id: number) { export function blueprtIdValid(id: number) {
const goodData = getGoodById(id); const goodData = getGoodById(id);
return goodData && goodData.itid === IT_TYPE.BLUEPRT && COM_BTL_QUALITY.indexOf(goodData.quality) !== -1; return goodData && goodData.itid === IT_TYPE.BLUEPRT && COM_BTL_QUALITY.indexOf(goodData.quality) !== -1;
}
/**
* @description 创建 ComBattleTeam 的数据结构
* @export
* @param {string} teamCode
* @param {boolean} pub
* @param {number} blueprtId
* @param {number} status
* @param {string} capId
* @param {number} ceLimit
* @param {number} bossHp
* @param {number} quality
* @param {Array<BossHp>} bossHpArr
* @returns
*/
export function createComTeamData(teamCode: string, pub: boolean, blueprtId: number, status: number, capId: string, ceLimit: number, bossHp: number, quality: number, bossHpArr:Array<BossHp>) {
const { lvLimited } = getGoodById(blueprtId);
const lvRange = comBtlRangeByLv(lvLimited);
const curRnd = 0;
const roleCnt = 1;
const timeout = false;
const bossCurHp = bossHp;
return {
teamCode, pub, blueprtId, status, capId, ceLimit, bossHp, bossCurHp, quality, bossHpArr, curRnd, roleCnt, timeout, lvRange
};
} }

View File

@@ -144,7 +144,7 @@ export default class ComBattleTeam extends BaseModel {
@prop({ required: true, default: false }) @prop({ required: true, default: false })
timeout: boolean; timeout: boolean;
public static async createTeam(teamData: {teamCode: string, roleIds: Array<string>, pub: boolean, blueprtId: number, quality: number, status: number, roleStatus: Array<RoleStatus>, capId: string, ceLimit: number}, lean = true) { public static async createTeam(teamData: ComBattleTeamParam, lean = true) {
const team: ComBattleTeamType = await ComBattleTeamModel.findOneAndUpdate({ teamCode: teamData.teamCode }, {$set :{...teamData, roleCnt: teamData.roleIds.length}}, {upsert: true, new: true}).lean(lean); const team: ComBattleTeamType = await ComBattleTeamModel.findOneAndUpdate({ teamCode: teamData.teamCode }, {$set :{...teamData, roleCnt: teamData.roleIds.length}}, {upsert: true, new: true}).lean(lean);
return team; return team;
} }
@@ -291,4 +291,5 @@ export default class ComBattleTeam extends BaseModel {
export const ComBattleTeamModel = getModelForClass(ComBattleTeam); export const ComBattleTeamModel = getModelForClass(ComBattleTeam);
export interface ComBattleTeamType extends Pick<DocumentType<ComBattleTeam>, keyof ComBattleTeam>{}; export interface ComBattleTeamType extends Pick<DocumentType<ComBattleTeam>, keyof ComBattleTeam>{};
export type ComBattleTeamParam = Partial<ComBattleTeamType>;

View File

@@ -0,0 +1,2 @@
import { ComBattleTeamParam } from './../../db/ComBattleTeam';
export type MemComBtlTeam = ComBattleTeamParam & { bossCurHp: number; curRnd: number };