From 77d31d1d9bcf6997ace822328f7c1e58629b6c86 Mon Sep 17 00:00:00 2001 From: luying Date: Tue, 5 Sep 2023 19:56:51 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(=E9=95=87=E5=BF=B5=E5=A1=94):?= =?UTF-8?q?=20=E5=89=AF=E5=B0=86=E5=8A=A0=E5=85=A5=E9=94=81=E5=AE=9A?= =?UTF-8?q?=E6=AD=A6=E5=B0=86=205fb3cd768?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../battle/handler/normalBattleHandler.ts | 2 +- game-server/app/services/battleService.ts | 18 +++++++++++++----- .../app/services/normalBattleService.ts | 5 +++-- shared/db/BattleRecord.ts | 2 ++ shared/pubUtils/interface.ts | 1 + 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/game-server/app/servers/battle/handler/normalBattleHandler.ts b/game-server/app/servers/battle/handler/normalBattleHandler.ts index f9d58218d..26f07d4bb 100644 --- a/game-server/app/servers/battle/handler/normalBattleHandler.ts +++ b/game-server/app/servers/battle/handler/normalBattleHandler.ts @@ -212,7 +212,7 @@ export class NormalBattleHandler { // 记录事件状态 await setBattleStatus(session, roleId, battleId, isSuccess, battleCode); } else if (warInfo.warType == WAR_TYPE.TOWER) { - let towerEndResult = await towerBattleEnd(sid, roleId, serverId, battleCode, battleId, isSuccess, heroes); + let towerEndResult = await towerBattleEnd(sid, roleId, serverId, battleCode, battleId, isSuccess, dbHeroes, dbSeqIds, damageRecords); if (towerEndResult) { if (towerEndResult.status == -1) { return towerEndResult.resResult; diff --git a/game-server/app/services/battleService.ts b/game-server/app/services/battleService.ts index 4cc820b50..66b8db10a 100644 --- a/game-server/app/services/battleService.ts +++ b/game-server/app/services/battleService.ts @@ -1,4 +1,4 @@ -import { HeroType } from './../db/Hero'; +import { HeroModel, HeroType } from './../db/Hero'; import { HangUpRecordModel } from './../db/HangUpRecord'; import { HANG_UP_CONSTS, REDIS_KEY, TASK_TYPE, TOWER_FORBIDDEN_CHARA_TYPE, TOWER_TASK_STATUS, MAIL_TYPE, MSG_SOURCE, POP_UP_SHOP_CONDITION_TYPE } from './../consts'; import { BattleRecordModel } from './../db/BattleRecord'; @@ -11,7 +11,7 @@ import { TaskHero, TowerTaskRecModel, TowerTaskRecType } from '../db/TowerTaskRe import { Rank } from './rankService'; import { checkTask } from './task/taskService'; import { getRandExpedition, gameData } from '../pubUtils/data'; -import { ItemInter, RewardInter } from '../pubUtils/interface'; +import { ItemInter, RewardInter, pvpEndParamInter } from '../pubUtils/interface'; import { getTimeFunM } from '../pubUtils/timeUtil'; import { ComRoleStatusHero } from '../db/ComBattleTeam'; import { sendMailByContent } from './mailService'; @@ -245,7 +245,7 @@ export function checkForbiddenChar(hid: number, job: number, fobiddenCharactor: return flag; } -export async function towerBattleEnd(sid: string, roleId: string, serverId: number, battleCode: string, battleId: number, succeed: boolean, heroes: Array) { +export async function towerBattleEnd(sid: string, roleId: string, serverId: number, battleCode: string, battleId: number, succeed: boolean, dbHeroes: number[], dbSeqIds: number[], damageRecords: pvpEndParamInter[]) { if (succeed) { let battleRec = await BattleRecordModel.getBattleRecordByCode(battleCode); if (battleRec.battleId != battleId) { @@ -255,7 +255,7 @@ export async function towerBattleEnd(sid: string, roleId: string, serverId: numb let { towerLv, roleName } = await RoleModel.findByRoleId(roleId); let { warStatus, heroes: recHeroes } = await TowerRecordModel.getRecordByLv(roleId, towerLv); // console.log('*******', towerLv, heroes.join(), recHeroes.join()) - for (let hid of heroes) { + for (let hid of dbSeqIds) { if (recHeroes.indexOf(hid) !== -1) { return { status: -1, resResult: resResult(STATUS.TOWER_DUPLICATE_HERO) }; } @@ -272,7 +272,15 @@ export async function towerBattleEnd(sid: string, roleId: string, serverId: numb }); inc = wars.length == dicTower.warArray.length? 1: 0; } - let newRec = await TowerRecordModel.updateRecord(roleId, towerLv, battleCode, battleId, heroes, inc); + + let subHids: number[] = []; + for (let hid of dbHeroes) { + let damageRecord = damageRecords.find(cur => cur.hid == hid); + if (damageRecord && damageRecord.subHid > 0) subHids.push(damageRecord.subHid); + } + + const dbDamageSub = await HeroModel.findByHidsAndRole(roleId, subHids); + let newRec = await TowerRecordModel.updateRecord(roleId, towerLv, battleCode, battleId, [...dbSeqIds, ...dbDamageSub.map(cur => cur.seqId)], inc); let towerReward: RewardInter[] = []; if (inc === 1) { let role = await RoleModel.towerLvUp(roleId); diff --git a/game-server/app/services/normalBattleService.ts b/game-server/app/services/normalBattleService.ts index 6aff46d28..a0495270a 100644 --- a/game-server/app/services/normalBattleService.ts +++ b/game-server/app/services/normalBattleService.ts @@ -269,9 +269,10 @@ export function getBattleRecordParam(damageRecord: pvpEndParamInter[], round: nu let record = { 'record.heroes': [], 'record.damageRecord': [], 'record.round': 0 }; if(heroes && isArray(heroes)) record['record.heroes'] = heroes; if(damageRecord && isArray(damageRecord)) { - for(let { hid, damage, heal, underDamage } of damageRecord) { + for(let { hid, damage, heal, underDamage, subHid } of damageRecord) { + if (subHid && (!isNumber(subHid))) continue; if(isNumber(hid) && isNumber(damage) && isNumber(heal) && isNumber(underDamage)) { - record['record.damageRecord'].push({ hid, damage, heal, underDamage }); + record['record.damageRecord'].push({ hid, damage, heal, underDamage, subHid }); } } } diff --git a/shared/db/BattleRecord.ts b/shared/db/BattleRecord.ts index 7d4666c34..4a580f0c5 100644 --- a/shared/db/BattleRecord.ts +++ b/shared/db/BattleRecord.ts @@ -16,6 +16,8 @@ class DamageRecord { heal: number; @prop({ required: true }) underDamage: number; + @prop({ required: false }) + subHid?: number; } class RougeCharaRecord { diff --git a/shared/pubUtils/interface.ts b/shared/pubUtils/interface.ts index 0793e8116..0f0820327 100644 --- a/shared/pubUtils/interface.ts +++ b/shared/pubUtils/interface.ts @@ -40,6 +40,7 @@ export interface pvpEndParamInter { damage: number; heal: number; underDamage: number; + subHid?: number; } export interface RougeDamageInter {