From 541fc7273140b6adc3118dbaa9580d15cc509d23 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Wed, 28 Mar 2018 11:10:03 -0400 Subject: [PATCH] Core/Players: Fixed learning talents available for multiple specs but in different row/column --- Source/Framework/Constants/CreatureConst.cs | 1 + Source/Game/Entities/Player/Player.Talents.cs | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Source/Framework/Constants/CreatureConst.cs b/Source/Framework/Constants/CreatureConst.cs index c19814613..0e2f14274 100644 --- a/Source/Framework/Constants/CreatureConst.cs +++ b/Source/Framework/Constants/CreatureConst.cs @@ -92,6 +92,7 @@ namespace Framework.Constants ForceMove = 0x40, DisarmOffhand = 0x80, DisablePredStats = 0x100, + AllowChangingTalents = 0x200, DisarmRanged = 0x400, RegeneratePower = 0x800, RestrictPartyInteraction = 0x1000, diff --git a/Source/Game/Entities/Player/Player.Talents.cs b/Source/Game/Entities/Player/Player.Talents.cs index 9db9b342c..ca097d10b 100644 --- a/Source/Game/Entities/Player/Player.Talents.cs +++ b/Source/Game/Entities/Player/Player.Talents.cs @@ -109,7 +109,7 @@ namespace Game.Entities if (IsInCombat()) return TalentLearnResult.FailedAffectingCombat; - if (IsDead() || GetMap().IsBattlegroundOrArena()) + if (IsDead()) return TalentLearnResult.FailedCantDoThatRightNow; if (GetUInt32Value(PlayerFields.CurrentSpecId) == 0) @@ -143,6 +143,7 @@ namespace Game.Entities { if (talent.SpecID == 0) bestSlotMatch = talent; + else if (talent.SpecID == GetUInt32Value(PlayerFields.CurrentSpecId)) { bestSlotMatch = talent; @@ -161,7 +162,10 @@ namespace Game.Entities if (talent.SpecID != 0 && talent.SpecID != GetUInt32Value(PlayerFields.CurrentSpecId)) continue; - if (HasTalent(talent.Id, GetActiveTalentGroup()) && !HasFlag(PlayerFields.Flags, PlayerFlags.Resting) && HasFlag(UnitFields.Flags, UnitFlags.ImmuneToNpc)) + if (!HasTalent(talent.Id, GetActiveTalentGroup())) + continue; + + if (!HasFlag(PlayerFields.Flags, PlayerFlags.Resting) && HasFlag(UnitFields.Flags2, UnitFlags2.AllowChangingTalents)) return TalentLearnResult.FailedRestArea; if (GetSpellHistory().HasCooldown(talent.SpellID))