From e8588ded767b00725ced4eaa26ee9521ec770132 Mon Sep 17 00:00:00 2001 From: walkpan Date: Wed, 4 Feb 2026 20:41:24 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=9C=B0=E5=9B=BE):=20=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E4=B8=BB=E8=A7=92=E5=B1=9E=E6=80=A7=E5=80=BE=E5=90=91=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E4=BB=BB=E5=8A=A1=E5=8D=A1=E7=89=8C=E6=9D=83=E9=87=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在获取任务卡牌选项时,查询主角已拥有的永久属性Buff,将对应属性的卡牌权重提高一倍,使卡牌选择更符合角色成长方向。 --- assets/script/game/common/config/CardSet.ts | 13 ++++++++++++- assets/script/game/map/MissionCardComp.ts | 14 +++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/assets/script/game/common/config/CardSet.ts b/assets/script/game/common/config/CardSet.ts index 038f373b..cd7174c9 100644 --- a/assets/script/game/common/config/CardSet.ts +++ b/assets/script/game/common/config/CardSet.ts @@ -248,8 +248,9 @@ function getDefaultPool(type: CardType, level: number = 1): IPoolItem[] { * @param count 选项数量 (默认3个) * @param excludeUuids 排除的卡牌UUID列表 (用于去重或排除已拥有) * @param forcedType 强制指定卡牌类型 (用于特殊获取,如商店、技能书等) + * @param preferredAttrs 偏好的属性类型列表 (用于增加权重) */ -export function getCardOptions(level: number, count: number = 3, excludeUuids: number[] = [], forcedType?: CardType): ICardInfo[] { +export function getCardOptions(level: number, count: number = 3, excludeUuids: number[] = [], forcedType?: CardType, preferredAttrs: number[] = []): ICardInfo[] { // 1. 确定类型:强制指定 > 默认为属性 const type = forcedType !== undefined ? forcedType : CardType.Attr; @@ -267,6 +268,16 @@ export function getCardOptions(level: number, count: number = 3, excludeUuids: n const info = getCardBaseInfo(type, item.id); if (info) { info.weight = item.weight; + + // 如果是属性卡,且该属性在偏好列表中,增加权重 + if (type === CardType.Attr && preferredAttrs.length > 0) { + // AttrCards 的 payload 就是 AttrInfo,包含 attr 字段 + if (info.payload && preferredAttrs.includes(info.payload.attr)) { + // 增加权重,这里设置为 2 倍 + info.weight *= 2; + } + } + candidates.push(info); } } diff --git a/assets/script/game/map/MissionCardComp.ts b/assets/script/game/map/MissionCardComp.ts index d2a8f9f9..78d2d44a 100644 --- a/assets/script/game/map/MissionCardComp.ts +++ b/assets/script/game/map/MissionCardComp.ts @@ -259,9 +259,21 @@ export class MissionCardComp extends CCComp { * @param forcedType 强制类型 (可选) */ fetchCards(level: number, forcedType?: CardType){ + // 获取主角已有的属性倾向 (已拥有的永久属性Buff) + let preferredAttrs: number[] = []; + // @ts-ignore + const entities = ecs.query(ecs.allOf(HeroMasterComp)); + if (entities.length > 0) { + const role = entities[0]; + const heroAttrs = role.get(HeroAttrsComp); + if (heroAttrs && heroAttrs.BUFFS) { + preferredAttrs = Object.keys(heroAttrs.BUFFS).map(Number); + } + } + // 使用 CardSet 的 getCardOptions 获取卡牌 // 这里我们要获取 4 张卡牌 - const options = getCardOptions(level, 4, [], forcedType); + const options = getCardOptions(level, 4, [], forcedType, preferredAttrs); mLogger.log(this.debugMode, 'MissionCard', `[MissionCard] 获取到的卡牌选项: ${JSON.stringify(options)}`); // 更新卡片数据 if (options.length > 0) this.updateCardData(1, options[0]);