From fb3b9054dd3d06a7bfd591e38f3a723fa0a852ce Mon Sep 17 00:00:00 2001 From: panw Date: Tue, 28 Apr 2026 14:45:37 +0800 Subject: [PATCH] =?UTF-8?q?refactor(talents):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E5=A4=A9=E8=B5=8B=E6=95=B0=E5=80=BC=E4=B8=8E=E6=B6=88=E8=80=97?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 TalentInfo 中的 `valuePerLevel` 和 `getValue` 方法替换为显式的 `values` 数组 - 将全局的 `costPerLevel` 数组替换为每个天赋独立的 `costs` 数组 - 更新 TalentsComp 逻辑以使用新的配置结构 --- assets/script/game/common/config/TalentSet.ts | 51 +++++++++---------- assets/script/game/map/TalentsComp.ts | 11 ++-- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/assets/script/game/common/config/TalentSet.ts b/assets/script/game/common/config/TalentSet.ts index caa8954d..304f2667 100644 --- a/assets/script/game/common/config/TalentSet.ts +++ b/assets/script/game/common/config/TalentSet.ts @@ -14,10 +14,10 @@ export interface TalentInfo { desc: string; /** 最大等级 */ maxLevel: number; - /** 每级提升的数值 */ - valuePerLevel: number; - /** 获取指定等级下的实际加成数值 */ - getValue: (level: number) => number; + /** 每一级的加成数值,从第1级到最大级 */ + values: number[]; + /** 升到每一级所需的消耗点数,从第1级到最大级 */ + costs: number[]; } export const TalentConfig = { @@ -28,80 +28,77 @@ export const TalentConfig = { { maxLevel: 30, expPerLevel: 200 } ], - // 天赋升级消耗点数 (第1级到第5级消耗) - costPerLevel: [1, 1, 2, 2, 3], - // 天赋列表 talents: [ { id: 1, name: "攻击强化", icon: "⚔️", desc: "所有英雄 ATK +{value}%", maxLevel: 5, - valuePerLevel: 3, - getValue: (level: number) => level * 3 + values: [3, 6, 9, 12, 15], + costs: [1, 1, 2, 2, 3] }, { id: 2, name: "生命强化", icon: "❤️", desc: "所有英雄 HP +{value}%", maxLevel: 5, - valuePerLevel: 5, - getValue: (level: number) => level * 5 + values: [5, 10, 15, 20, 25], + costs: [1, 1, 2, 2, 3] }, { id: 3, name: "暴击强化", icon: "🔥", desc: "所有英雄暴击率 +{value}%", maxLevel: 5, - valuePerLevel: 2, - getValue: (level: number) => level * 2 + values: [2, 4, 6, 8, 10], + costs: [1, 1, 2, 2, 3] }, { id: 4, name: "风怒强化", icon: "⚡", desc: "所有英雄风怒率 +{value}%", maxLevel: 5, - valuePerLevel: 2, - getValue: (level: number) => level * 2 + values: [2, 4, 6, 8, 10], + costs: [1, 1, 2, 2, 3] }, { id: 5, name: "冰冻强化", icon: "❄️", desc: "所有英雄冰冻率 +{value}%", maxLevel: 5, - valuePerLevel: 2, - getValue: (level: number) => level * 2 + values: [2, 4, 6, 8, 10], + costs: [1, 1, 2, 2, 3] }, { id: 6, name: "穿刺强化", icon: "🗡️", desc: "所有英雄穿刺 +{value}", maxLevel: 5, - valuePerLevel: 0.2, - getValue: (level: number) => Number((level * 0.2).toFixed(1)) + values: [0.2, 0.4, 0.6, 0.8, 1.0], + costs: [1, 1, 2, 2, 3] }, { id: 7, name: "护盾强化", icon: "🛡️", desc: "所有护盾效果 +{value}%", maxLevel: 5, - valuePerLevel: 5, - getValue: (level: number) => level * 5 + values: [5, 10, 15, 20, 25], + costs: [1, 1, 2, 2, 3] }, { id: 8, name: "采购优惠", icon: "🛒", desc: "购买英雄 -{value}金", maxLevel: 5, - valuePerLevel: 1, - getValue: (level: number) => level * 1 + values: [1, 2, 3, 4, 5], + costs: [1, 1, 2, 2, 3] }, { id: 9, name: "刷新优惠", icon: "🔄", desc: "刷新重抽 -{value}金", maxLevel: 5, - valuePerLevel: 0.5, - getValue: (level: number) => Number((level * 0.5).toFixed(1)) + values: [0.5, 1.0, 1.5, 2.0, 2.5], + costs: [1, 1, 2, 2, 3] }, { id: 10, name: "出售补贴", icon: "💰", desc: "出售英雄返还 +{value}%金币", maxLevel: 5, - valuePerLevel: 10, - getValue: (level: number) => level * 10 + values: [10, 20, 30, 40, 50], + costs: [1, 1, 2, 2, 3] } ] as TalentInfo[] }; diff --git a/assets/script/game/map/TalentsComp.ts b/assets/script/game/map/TalentsComp.ts index c6e3c969..8819602e 100644 --- a/assets/script/game/map/TalentsComp.ts +++ b/assets/script/game/map/TalentsComp.ts @@ -172,14 +172,14 @@ export class TalentsComp extends CCComp { } if (lblDesc) { - let currentVal = talentInfo.getValue(currentLevel); + let currentVal = currentLevel === 0 ? 0 : talentInfo.values[currentLevel - 1]; lblDesc.string = talentInfo.desc.replace('{value}', currentVal.toString()); } if (lblLevel) lblLevel.string = `Lv.${currentLevel}`; let isMax = currentLevel >= talentInfo.maxLevel; - let cost = isMax ? 0 : TalentConfig.costPerLevel[currentLevel]; + let cost = isMax ? 0 : talentInfo.costs[currentLevel]; let points = smc.collection.talent_points || 0; if (lblCost) { @@ -229,8 +229,11 @@ export class TalentsComp extends CCComp { let refundedPoints = 0; for (let id in collection.talents) { let level = collection.talents[id]; - for (let i = 0; i < level; i++) { - refundedPoints += TalentConfig.costPerLevel[i]; + let talentInfo = TalentConfig.talents.find(t => t.id === Number(id)); + if (talentInfo) { + for (let i = 0; i < level; i++) { + refundedPoints += talentInfo.costs[i]; + } } }