From c7a8c9ae9a444b62223280e90de6d40957e62d12 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 15 Feb 2026 15:14:42 -0300 Subject: [PATCH] fix(Core/Player): Fix skill rewarded spell learning to properly handle skill-rewarded spells with out-of-order IDs (#24581) Co-authored-by: Claude Haiku 4.5 Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/server/game/Entities/Player/Player.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 1414098af..d100bbc8b 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -11993,7 +11993,17 @@ void Player::learnSkillRewardedSpells(uint32 skill_id, uint32 skill_value) { uint32 raceMask = getRaceMask(); uint32 classMask = getClassMask(); - for (SkillLineAbilityEntry const* pAbility : GetSkillLineAbilitiesBySkillLine(skill_id)) + + // Get all abilities for this skill and sort by MinSkillLineRank (lowest to highest) + auto abilities = GetSkillLineAbilitiesBySkillLine(skill_id); + std::vector sortedAbilities(abilities.begin(), abilities.end()); + std::sort(sortedAbilities.begin(), sortedAbilities.end(), + [](SkillLineAbilityEntry const* a, SkillLineAbilityEntry const* b) + { + return a->MinSkillLineRank < b->MinSkillLineRank; + }); + + for (SkillLineAbilityEntry const* pAbility : sortedAbilities) { SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(pAbility->Spell); if (!spellInfo)