52 return traitEntry.TraitNodeID == traitNodeId && traitEntry.TraitNodeEntryID == traitNodeEntryId;
54 return entryItr != config.
Entries.end() ? &*entryItr :
nullptr;
57 bool hasRemovedEntries =
false;
62 if (traitEntry && traitEntry->
Rank > newEntry.
Rank)
110 hasRemovedEntries =
true;
120 return traitEntry.TraitNodeID == newEntry.TraitNodeID && traitEntry.TraitNodeEntryID == newEntry.TraitNodeEntryID;
121 }), newConfigState.
Entries.end());
124 newConfigState.
Entries.emplace_back() = newEntry;
154 return static_cast<TraitConfigType>(*traitConfig.Type) == TraitConfigType::Combat
155 && (static_cast<TraitCombatConfigFlags>(*traitConfig.CombatConfigFlags) & TraitCombatConfigFlags::ActiveForSpec) == TraitCombatConfigFlags::None;
160 auto findFreeLocalIdentifier = [&]()
165 return static_cast<TraitConfigType>(*traitConfig.Type) == TraitConfigType::Combat
166 && traitConfig.ChrSpecializationID == int32(_player->GetPrimarySpecialization())
167 && traitConfig.LocalIdentifier == index;
179 auto entryItr = std::find_if(classTalentsRequestNewConfig.
Config.
Entries.begin(), classTalentsRequestNewConfig.
Config.
Entries.end(),
180 [&](
WorldPackets::Traits::TraitEntry const& entry) { return entry.TraitNodeID == grantedEntry.TraitNodeID && entry.TraitNodeEntryID == grantedEntry.TraitNodeEntryID; });
185 newEntry.
Rank = grantedEntry.Rank;
189 newEntry.
Rank = std::max(0, traitNodeEntry->MaxRanks - newEntry.
GrantedRanks);
221 if (classTalentsSetStarterBuildActive.
Active)
225 auto findFreeLocalIdentifier = [&]()
230 return static_cast<TraitConfigType>(*traitConfig.Type) == TraitConfigType::Combat
231 && traitConfig.ChrSpecializationID == int32(_player->GetPrimarySpecialization())
232 && traitConfig.LocalIdentifier == index;
DB2Storage< TraitNodeEntry > sTraitNodeStore("TraitNode.db2", &TraitNodeLoadInfo::Instance)
DB2Storage< TraitTreeEntry > sTraitTreeStore("TraitTree.db2", &TraitTreeLoadInfo::Instance)
DB2Storage< TraitNodeEntryEntry > sTraitNodeEntryStore("TraitNodeEntry.db2", &TraitNodeEntryLoadInfo::Instance)
DB2Storage< TraitDefinitionEntry > sTraitDefinitionStore("TraitDefinition.db2", &TraitDefinitionLoadInfo::Instance)
@ TALENT_FAILED_AFFECTING_COMBAT
@ TALENT_FAILED_CANT_REMOVE_TALENT
@ TALENT_FAILED_IN_PVP_MATCH
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
BattlegroundStatus GetStatus() const
constexpr bool HasFlag(T flag) const
ChrSpecialization GetPrimarySpecialization() const
void SetTraitConfigUseStarterBuild(int32 traitConfigId, bool useStarterBuild)
void SetTraitConfigUseSharedActionBars(int32 traitConfigId, bool usesSharedActionBars, bool isLastSelectedSavedConfig)
UF::TraitConfig const * GetTraitConfig(int32 configId) const
void DeleteTraitConfig(int32 deletedConfigId)
void UpdateTraitConfig(WorldPackets::Traits::TraitConfig &&newConfig, int32 savedConfigId, bool withCastTime)
Battleground * GetBattleground() const
UF::UpdateField< UF::ActivePlayerData, 0, TYPEID_ACTIVE_PLAYER > m_activePlayerData
void CreateTraitConfig(WorldPackets::Traits::TraitConfig &traitConfig)
void RenameTraitConfig(int32 editedConfigId, std::string &&newName)
bool HasCooldown(SpellInfo const *spellInfo, uint32 itemId=0) const
SpellHistory * GetSpellHistory()
bool IsLastSelectedSavedConfig
WorldPacket const * Write() override
int32 SavedLocalIdentifier
void HandleClassTalentsSetUsesSharedActionBars(WorldPackets::Traits::ClassTalentsSetUsesSharedActionBars const &classTalentsSetUsesSharedActionBars)
void HandleClassTalentsSetStarterBuildActive(WorldPackets::Traits::ClassTalentsSetStarterBuildActive const &classTalentsSetStarterBuildActive)
void HandleClassTalentsRequestNewConfig(WorldPackets::Traits::ClassTalentsRequestNewConfig &classTalentsRequestNewConfig)
void HandleClassTalentsDeleteConfig(WorldPackets::Traits::ClassTalentsDeleteConfig const &classTalentsDeleteConfig)
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
void HandleClassTalentsRenameConfig(WorldPackets::Traits::ClassTalentsRenameConfig &classTalentsRenameConfig)
void HandleTraitsCommitConfig(WorldPackets::Traits::TraitsCommitConfig const &traitsCommitConfig)
constexpr uint32 MAX_COMBAT_TRAIT_CONFIGS
void InitializeStarterBuildTraitConfig(WorldPackets::Traits::TraitConfig &traitConfig, PlayerDataAccessor player)
LearnResult ValidateConfig(WorldPackets::Traits::TraitConfig const &traitConfig, PlayerDataAccessor player, bool requireSpendingAllCurrencies)
std::vector< UF::TraitEntry > GetGrantedTraitEntriesForConfig(WorldPackets::Traits::TraitConfig const &traitConfig, PlayerDataAccessor player)
EnumFlag< TraitTreeFlag > GetFlags() const
UpdateField< int32, 4, 5 > Type
UpdateField< int32, 8, 9 > CombatConfigFlags
int32 ChrSpecializationID
TraitCombatConfigFlags CombatConfigFlags
std::vector< TraitEntry > Entries