From a057da5c13e0f067a7323a6f8dc0f5edad09e081 Mon Sep 17 00:00:00 2001 From: liangtongchuan Date: Fri, 19 Feb 2021 14:48:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BB=E5=AE=9D=EF=BC=9A=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=AF=BB=E5=AE=9D=E4=B8=AD=E7=B1=BB=E5=9E=8B=E7=9A=84=E4=BD=BF?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../battle/handler/comBattleHandler.ts | 64 ++----------------- game-server/app/services/comBattleService.ts | 31 ++++++++- shared/db/ComBattleTeam.ts | 5 +- .../domain/battleField/ComBattleTeamField.ts | 2 + 4 files changed, 40 insertions(+), 62 deletions(-) create mode 100644 shared/domain/battleField/ComBattleTeamField.ts diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index 3d9d41b98..5a29a4d1c 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -1,3 +1,4 @@ +import { MemComBtlTeam } from './../../../domain/battleField/ComBattleTeamField'; import { difference } from 'underscore'; /* * @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 { getGoodById, getBossHpByBlueprtId, getBlueprtComposeByQuality, getBluePrtByQuality, getWarById, getWarIdByBlueprtId, comBtlRangeByLv } from '../../../pubUtils/gamedata'; -import { ComBattleTeamModel, BossHp, ComBattleTeamType } from '../../../db/ComBattleTeam'; import Role, { RoleModel } from '../../../db/Role'; import { STATUS } from '../../../consts/statusCode'; import { Application, BackendSession } from 'pinus'; 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 { handleFixedReward, addItems, handleCost } from '../../../services/rewardService'; import { checkRoleInQueue, getTeamSearchByQuality, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService'; 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 { roleLevelup } from '../../../services/normalBattleService'; export default function(app: Application) { return new ComBattleHandler(app); } - -class ComTeam { - // 队伍唯一编号 - teamCode: string; - // 玩家列表 - roleIds: Array - // 队伍是否开放加入 - pub: boolean; - // 对应藏宝图 Id - blueprtId: number; - // 战斗状态 0:未开始,1:已开始,2:胜利,3:失败 - status: number; - // 玩家状态 - roleStatus: Array; - // 队长 roleId - capId: string; - // 战力限制 - ceLimit: number; - // boss 总血量 - bossHp: number; - // boss 当前血量 - bossCurHp: number; - // 单个 boss 血量状态 - bossHpArr: Array; - // 品质 - 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 ) { - 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 { constructor(private app: Application) { } - private teamMap: Map = new Map(); + private teamMap: Map = new Map(); private teamDisTimer: Map = new Map(); private robotHurtTimer: Map = new Map(); @@ -134,7 +82,7 @@ export class ComBattleHandler { } 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.roleIds = roleIds; @@ -242,7 +190,7 @@ export class ComBattleHandler { let blueprtId = getRandBlueprtId(qualityArr).pop(); let { quality } = getGoodById(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); // 将玩家加入队伍 diff --git a/game-server/app/services/comBattleService.ts b/game-server/app/services/comBattleService.ts index d851baf99..7c26c2353 100644 --- a/game-server/app/services/comBattleService.ts +++ b/game-server/app/services/comBattleService.ts @@ -6,8 +6,8 @@ import { EquipPrintDropType, EquipPrintDropModel } from './../db/EquipPrintDrop' import { FriendPointModel } from './../db/FriendPoint'; 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 { RoleStatus, ComBattleTeamModel } from './../db/ComBattleTeam'; -import { getBluePrtByQuality, getComBtlSetByQuality, getRewardByBlueprtId, getWarById, getWarIdByBlueprtId, comBtlRangeInfo, getGoodById } from "../pubUtils/gamedata"; +import { RoleStatus, ComBattleTeamModel, BossHp } from './../db/ComBattleTeam'; +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 { getRandRobot } from "./battleService"; import { difference, omit } from 'underscore'; @@ -17,6 +17,7 @@ import { decreaseItems } from './rewardService'; import { getFriendLvAdd } from './friendService'; import { getRoleIds } from '../pubUtils/friendUtil'; + /** * 在给定的品质列表中随机返回一定数量的藏宝图Id * @param qualityArr 品质数组,在所有给定品质的藏宝图中筛选1 @@ -513,4 +514,30 @@ export async function teammateInBlackList(roleId: string, roleIds: Array export function blueprtIdValid(id: number) { const goodData = getGoodById(id); 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} bossHpArr + * @returns + */ +export function createComTeamData(teamCode: string, pub: boolean, blueprtId: number, status: number, capId: string, ceLimit: number, bossHp: number, quality: number, bossHpArr:Array) { + 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 + }; } \ No newline at end of file diff --git a/shared/db/ComBattleTeam.ts b/shared/db/ComBattleTeam.ts index 4af1b5124..058614cb1 100644 --- a/shared/db/ComBattleTeam.ts +++ b/shared/db/ComBattleTeam.ts @@ -144,7 +144,7 @@ export default class ComBattleTeam extends BaseModel { @prop({ required: true, default: false }) timeout: boolean; - public static async createTeam(teamData: {teamCode: string, roleIds: Array, pub: boolean, blueprtId: number, quality: number, status: number, roleStatus: Array, 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); return team; } @@ -291,4 +291,5 @@ export default class ComBattleTeam extends BaseModel { export const ComBattleTeamModel = getModelForClass(ComBattleTeam); -export interface ComBattleTeamType extends Pick, keyof ComBattleTeam>{}; \ No newline at end of file +export interface ComBattleTeamType extends Pick, keyof ComBattleTeam>{}; +export type ComBattleTeamParam = Partial; \ No newline at end of file diff --git a/shared/domain/battleField/ComBattleTeamField.ts b/shared/domain/battleField/ComBattleTeamField.ts new file mode 100644 index 000000000..0de16edc9 --- /dev/null +++ b/shared/domain/battleField/ComBattleTeamField.ts @@ -0,0 +1,2 @@ +import { ComBattleTeamParam } from './../../db/ComBattleTeam'; +export type MemComBtlTeam = ComBattleTeamParam & { bossCurHp: number; curRnd: number };