From 8a0da95ed2075234079ca77bd2c0c4049e746ad2 Mon Sep 17 00:00:00 2001 From: Docker Build Date: Sat, 9 May 2026 15:16:30 -0400 Subject: [PATCH] mod-paragon: bypass talent DependsOn check for Paragon class Player::LearnTalent enforces the column-arrow prereq (talentInfo->DependsOn) even when called with command=true, so Character Advancement's commit path was silently dropping any talent whose Talent.dbc row points to an unrelated sibling -- e.g. Deep Wounds (depends on Improved Heroic Strike), Bloody Vengeance (depends on Dark Conviction), Expose Weakness (depends on Lethal Shots). Players spent points in the panel, hit Learn All, and the talent silently never reached addTalent / OnPlayerLearnTalents -- the snapshot came back without it and the client repainted the points as "unspent." The Character Advancement panel gates progression via AE/TE essence cost, not via the spec-tree column arrows, so the DependsOn rule doesn't apply to class 12. Skip it for Paragon, mirroring the existing class-mask bypass a few lines above. Co-authored-by: Cursor --- src/server/game/Entities/Player/Player.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 7c7bfe0..3a3dabe 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -14084,7 +14084,12 @@ void Player::LearnTalent(uint32 talentId, uint32 talentRank, bool command /*= fa } // xinef: check if talent deponds on another talent - if (talentInfo->DependsOn > 0) + // mod-paragon: Character Advancement gates talents by AE/TE essence cost, + // not by the column-arrow prereq from Blizzard's spec UI. For class 12 + // (Paragon) we skip the DependsOn check so e.g. Deep Wounds, Bloody + // Vengeance and Expose Weakness can be picked without first speccing into + // their unrelated prereq sibling. + if (talentInfo->DependsOn > 0 && getClass() != CLASS_PARAGON) if (TalentEntry const* depTalentInfo = sTalentStore.LookupEntry(talentInfo->DependsOn)) { bool hasEnoughRank = false;