From dfdbfd69e7414821b922fda3983fcedec79c7f3c Mon Sep 17 00:00:00 2001 From: Vick Scarlet Date: Tue, 11 Aug 2026 14:10:52 +0800 Subject: [PATCH] fix: talent --- packages/core/src/talent.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/core/src/talent.ts b/packages/core/src/talent.ts index a28c04a..178d81c 100644 --- a/packages/core/src/talent.ts +++ b/packages/core/src/talent.ts @@ -69,8 +69,12 @@ export function pull( talentRateWithAddition(options.rate, profile).entries(), ) const result = [] - if (profile.lockedTalent) result.push(profile.lockedTalent) const map = new Map(Grades.map(g => [g, new Set(GradeMap.get(g))])) + if (profile.lockedTalent) { + result.push(profile.lockedTalent) + const { grade } = talents.get(profile.lockedTalent)! + map.get(grade)!.delete(profile.lockedTalent) + } for (let i = options.count - result.length; i > 0; i--) { const grade = pickWeight(rate, rng)! ?? 0 const set = map.get(grade)! @@ -105,12 +109,16 @@ function chainReplace(t: Talent['id'], ts: Set, rng?: RNG) { if (!r) return null let picked: Talent['id'] | null = null if (r.talent) { - const filtered = r.talent.filter(([id]) => exclude(id, ts) == null) + const filtered = r.talent.filter(([id]) => { + if (ts.has(id)) return false + return exclude(id, ts) == null + }) picked = pickWeight(filtered, rng) } else if (r.grade) { - const filtered = GradeMap.get(r.grade)!.filter( - id => exclude(id, ts) == null, - ) + const filtered = GradeMap.get(r.grade)!.filter(id => { + if (ts.has(id)) return false + return exclude(id, ts) == null + }) picked = pick(filtered, rng) } if (!picked) return null