From fc8089cbabb66bdd3d0f502615b0b577cfb2fcdc Mon Sep 17 00:00:00 2001 From: zhangxk Date: Sat, 9 Sep 2023 14:22:19 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(=E7=A8=B7=E4=B8=8B=E5=AD=A6?= =?UTF-8?q?=E5=AE=AB):=20=E6=B7=BB=E5=8A=A0=E5=9C=A3=E7=89=A9=E6=95=88?= =?UTF-8?q?=E6=9E=9C=E5=8D=87=E7=BA=A7=E7=89=B9=E6=80=A7=E5=8D=A1=E6=8E=A8?= =?UTF-8?q?=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../services/battle/rougeCollectService.ts | 2 +- .../app/services/battle/rougeEffectService.ts | 39 ++++++++++++------- shared/consts/constModules/chatConst.ts | 1 + 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/game-server/app/services/battle/rougeCollectService.ts b/game-server/app/services/battle/rougeCollectService.ts index 7fb4f5218..12ba18580 100644 --- a/game-server/app/services/battle/rougeCollectService.ts +++ b/game-server/app/services/battle/rougeCollectService.ts @@ -152,7 +152,7 @@ export class HandleAddCard { let charasMap = (this.addCharas || []).reduce((result, cur) => { result.set(cur.charaCode, cur); return result; }, new Map()); let cardsMap = [...(this.addPassiveCards || []), ...(this.addHolyCards || [])].reduce((result, cur) => { result.set(cur.cardCode, cur); return result; }, new Map()); if ((this.addHolyCards || []).length > 0) { - let rougeEffect = new RougeEffect(this.roleId, this.gameCode); + let rougeEffect = new RougeEffect(this.roleId, this.gameCode, this.sid); let holyIds = clone(this.addHolyCards.map(cur => { return { cardCode: cur.cardCode, cardId: cur.cardId, useCount: cur.useCount } })); let { charas, cards } = await rougeEffect.getEffectImmediate(holyIds); diff --git a/game-server/app/services/battle/rougeEffectService.ts b/game-server/app/services/battle/rougeEffectService.ts index 46ebbb2f7..f40cc2f8f 100644 --- a/game-server/app/services/battle/rougeEffectService.ts +++ b/game-server/app/services/battle/rougeEffectService.ts @@ -1,5 +1,5 @@ import { ABI_TYPE } from "../../consts/constModules/abilityConst"; -import { ROUGELIKE_SKILLTYPE, ROUGE_EFFECT_TYPE, ROUGE_EFFECT_TYPE_KIND, ROUGE_LIKE_CARD_TYPE, ROUGE_SLOT_LIMIT } from "../../consts"; +import { PUSH_ROUTE, ROUGELIKE_SKILLTYPE, ROUGE_EFFECT_TYPE, ROUGE_EFFECT_TYPE_KIND, ROUGE_LIKE_CARD_TYPE, ROUGE_SLOT_LIMIT } from "../../consts"; import { RougelikeCardModel, RougelikeCardPara, RougelikeCardType } from "../../db/RougelikeCard"; import { Card, RougelikeCharaModel, RougelikeCharaPara, RougelikeCharaType } from "../../db/RougelikeChara"; import { RougelikeRecordModel } from "../../db/RougelikeRecord"; @@ -10,6 +10,7 @@ import { RougelikeTechModel } from "../../db/RougelikeTech"; import { getAuthorTypeCardNum } from "./rougeService"; import * as util from 'util'; import { DicRougePassiveCard } from "../../pubUtils/dictionary/DicRougePassiveCard"; +import { sendMessageToUserWithSuc } from "../pushService"; @@ -23,6 +24,7 @@ export class holyId { export class RougeEffect { roleId: string; gameCode: string; + sid: string; newEffect: { effectType: number, effectParam: number[], cardCode?: string }[] = []; holyMap = new Map(); updateHolyMap = new Map(); @@ -31,9 +33,10 @@ export class RougeEffect { dbCharas: RougelikeCharaType[] = []; dbCards: RougelikeCardType[] = []; - constructor(roleId: string, gameCode: string) { + constructor(roleId: string, gameCode: string, sid?: string) { this.roleId = roleId || ''; this.gameCode = gameCode || ''; + this.sid = sid || ''; } @@ -185,28 +188,33 @@ export class RougeEffect { // 随机升级X个已装备的特性 2006 private async getRandomCardLv() { - let cards: RougelikeCardType[] = []; - if (this.newEffect.length == 0 || this.dbCards.length == 0) return cards; + if (this.newEffect.length == 0 || this.dbCards.length == 0) return; + let pushCards: RougelikeCardType[] = []; for (const { effectParam, effectType, cardCode } of this.newEffect) { if (effectType != ROUGE_EFFECT_TYPE.HOLY_PASSIVE_UPDATE_RAND) continue; if (effectParam.length == 0) continue; if (!getHolyCardIsUse(this.holyMap.get(cardCode))) continue; const randomNum = effectParam[0] || 0; - let random = this.dbCards.filter(cur => cur.type == ROUGE_LIKE_CARD_TYPE.PASSIVE && cur.charaId && cur.charaId != 0 && cur.lv < (gameData.rougePassiveCard.get(cur.cardId)?.lv || 0)) - for (let cur of this.dbCards) { - if (cur.type != ROUGE_LIKE_CARD_TYPE.PASSIVE || cur.charaId == 0) continue; + let random = this.dbCards.filter(cur => cur.type == ROUGE_LIKE_CARD_TYPE.PASSIVE && cur.charaId && cur.charaId != 0); + let newRandom: RougelikeCardType[] = []; + for (let cur of random) { + // if (cur.type != ROUGE_LIKE_CARD_TYPE.PASSIVE || cur.charaId == 0) continue; let passiveCardDataMap = this.getPassiveData(cur.cardId); if (!passiveCardDataMap.has(cur.lv + 1)) continue; - random.push({ ...cur, cardId: passiveCardDataMap.get(cur.lv + 1).id, lv: cur.lv + 1 }) + newRandom.push({ ...cur, cardId: passiveCardDataMap.get(cur.lv + 1).id, lv: cur.lv + 1 }); } - if (random && random.length > 0) { - let cards = getRandEelm(random, randomNum); + if (newRandom && newRandom.length > 0) { + let cards = getRandEelm(newRandom, randomNum); cards.forEach(async cur => { this.updateCardMap.set(cur.cardCode, cur), await this.updateCharaCards(cur, cardCode, cur.cardId); }); + pushCards.push(...cards); this.updateHolyMapUseCount(this.holyMap.get(cardCode)); } } + if(pushCards.length > 0){ + await sendMessageToUserWithSuc(this.roleId, PUSH_ROUTE.ROUGE_PASSIVE_CARD_UP_LV, { upLvCards: pushCards }, this.sid); + } } private getPassiveData(cardId: number) { @@ -222,6 +230,7 @@ export class RougeEffect { // 获得该圣物时立即升级所有X星特性卡 2012 private async getPassiveLv() { if (this.newEffect.length == 0) return; + let pushCards: RougelikeCardType[] = []; for (const { effectParam, effectType, cardCode } of this.newEffect) { if (effectType != ROUGE_EFFECT_TYPE.HOLY_UPDATE_PASSIVE_BY_LV) continue; if (effectParam.length == 0) continue; @@ -235,6 +244,7 @@ export class RougeEffect { if (!passiveCardDataMap.has(lv + 1)) continue; let id = passiveCardDataMap.get(lv + 1).id; this.updateCardMap.set(cardCode, { ...val, lv: lv + 1, cardId: passiveCardDataMap.get(lv + 1).id }); + pushCards.push({ ...val, lv: lv + 1, cardId: passiveCardDataMap.get(lv + 1).id }); if (val.charaId && val.charaId > 0) { await this.updateCharaCards(val, cardCode, id); @@ -244,6 +254,9 @@ export class RougeEffect { } if (isUseCount) this.updateHolyMapUseCount(this.holyMap.get(cardCode)); } + if(pushCards.length > 0){ + await sendMessageToUserWithSuc(this.roleId, PUSH_ROUTE.ROUGE_PASSIVE_CARD_UP_LV, { upLvCards: pushCards }, this.sid); + } } private async updateCharaCards(val: RougelikeCardType, cardCode: string, id: number) { @@ -350,7 +363,7 @@ export class RougeEffect { this.updateHolyMapUseCount(this.holyMap.get(cardCode)); } - + return addRatio; } @@ -661,9 +674,9 @@ export async function checkCanReRandomReward(roleId: string, gameCode: string, r } -export function getHolyCardIsUse(holy: { cardId: number, useCount: number, cardCode:string}) { +export function getHolyCardIsUse(holy: { cardId: number, useCount: number, cardCode: string }) { const { useCount = 0, cardId, cardCode } = (holy || {}); - if(!cardCode) return true;//法阵不存在cardCode + if (!cardCode) return true;//法阵不存在cardCode if (!cardId) return; const holyCardData = gameData.rougeHolyCard.get(cardId) if (!holyCardData) return; diff --git a/shared/consts/constModules/chatConst.ts b/shared/consts/constModules/chatConst.ts index 838bf0b2d..d59b52b61 100644 --- a/shared/consts/constModules/chatConst.ts +++ b/shared/consts/constModules/chatConst.ts @@ -214,5 +214,6 @@ export const PUSH_ROUTE = { GVG_REC_ADD: 'onGVGRecAdd', // 动态更新 ROUGE_COLLECT_UPDATE: 'onRougeCollectUpdate', // 更新图鉴 ROUGE_CHALLENGE_UPDATE: 'onRougeChallengeUpdate', //更新学宫挑战进度 + ROUGE_PASSIVE_CARD_UP_LV:'onRougePassiveCardUpLv', // 升级特性卡 LADDER_OR_GVG_ICON_SHOW: 'onLadderOrGvgIconShow', //名将擂台icon提示 } \ No newline at end of file