diff options
Diffstat (limited to 'src/game/Player.h')
-rw-r--r-- | src/game/Player.h | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/src/game/Player.h b/src/game/Player.h index 9196d9daad8..71cf1852b0b 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -94,6 +94,12 @@ struct PlayerSpell bool disabled : 1; // first rank has been learned in result talent learn but currently talent unlearned, save max learned ranks }; +struct PlayerTalent +{ + PlayerSpellState state : 8; + uint8 spec : 8; +}; + // Spell modifier (used for modify other spells) struct SpellModifier { @@ -107,6 +113,7 @@ struct SpellModifier Aura *const ownerAura; }; +typedef UNORDERED_MAP<uint32, PlayerTalent*> PlayerTalentMap; typedef UNORDERED_MAP<uint32, PlayerSpell*> PlayerSpellMap; typedef std::list<SpellModifier*> SpellModList; @@ -790,7 +797,9 @@ enum PlayerLoginQueryIndex PLAYER_LOGIN_QUERY_LOADCRITERIAPROGRESS = 19, PLAYER_LOGIN_QUERY_LOADEQUIPMENTSETS = 20, PLAYER_LOGIN_QUERY_LOADBGDATA = 21, - MAX_PLAYER_LOGIN_QUERY = 22 + PLAYER_LOGIN_QUERY_LOADGLYPHS = 22, + PLAYER_LOGIN_QUERY_LOADTALENTS = 23, + MAX_PLAYER_LOGIN_QUERY = 24 }; enum PlayerDelayedOperations @@ -1463,20 +1472,28 @@ class MANGOS_DLL_SPEC Player : public Unit void LearnTalent(uint32 talentId, uint32 talentRank); void LearnPetTalent(uint64 petGuid, uint32 talentId, uint32 talentRank); + bool AddTalent(uint32 spell, uint8 spec, bool learning); + bool HasTalent(uint32 spell_id, uint8 spec) const; + uint32 CalculateTalentsPoints() const; // Dual Spec + void UpdateSpecCount(uint8 count); uint32 GetActiveSpec() { return m_activeSpec; } - void SetActiveSpec(uint32 spec) { m_activeSpec = spec; } - uint32 GetSpecsCount() { return m_specsCount; } - void SetSpecsCount(uint32 count) { m_specsCount = count; } - void ActivateSpec(uint32 specNum); + void SetActiveSpec(uint8 spec) { m_activeSpec = spec; } + uint8 GetSpecsCount() { return m_specsCount; } + void SetSpecsCount(uint8 count) { m_specsCount = count; } + void ActivateSpec(uint8 spec); void InitGlyphsForLevel(); void SetGlyphSlot(uint8 slot, uint32 slottype) { SetUInt32Value(PLAYER_FIELD_GLYPH_SLOTS_1 + slot, slottype); } uint32 GetGlyphSlot(uint8 slot) { return GetUInt32Value(PLAYER_FIELD_GLYPH_SLOTS_1 + slot); } - void SetGlyph(uint8 slot, uint32 glyph) { SetUInt32Value(PLAYER_FIELD_GLYPHS_1 + slot, glyph); } - uint32 GetGlyph(uint8 slot) { return GetUInt32Value(PLAYER_FIELD_GLYPHS_1 + slot); } + void SetGlyph(uint8 slot, uint32 glyph) + { + m_Glyphs[m_activeSpec][slot] = glyph; + SetUInt32Value(PLAYER_FIELD_GLYPHS_1 + slot, glyph); + } + uint32 GetGlyph(uint8 slot) { return m_Glyphs[m_activeSpec][slot]; } uint32 GetFreePrimaryProfessionPoints() const { return GetUInt32Value(PLAYER_CHARACTER_POINTS2); } void SetFreePrimaryProfessions(uint16 profs) { SetUInt32Value(PLAYER_CHARACTER_POINTS2, profs); } @@ -1550,7 +1567,8 @@ class MANGOS_DLL_SPEC Player : public Unit ActionButton* addActionButton(uint8 button, uint32 action, uint8 type); void removeActionButton(uint8 button); - void SendInitialActionButtons() const; + void SendInitialActionButtons() const { SendActionButtons(0); } + void SendActionButtons(uint32 spec) const; PvPInfo pvpInfo; void UpdatePvPState(bool onlyFFA = false); @@ -2238,6 +2256,8 @@ class MANGOS_DLL_SPEC Player : public Unit void _LoadArenaTeamInfo(QueryResult *result); void _LoadEquipmentSets(QueryResult *result); void _LoadBGData(QueryResult* result); + void _LoadGlyphs(QueryResult *result); + void _LoadTalents(QueryResult *result); /*********************************************************/ /*** SAVE SYSTEM ***/ @@ -2252,6 +2272,8 @@ class MANGOS_DLL_SPEC Player : public Unit void _SaveSpells(); void _SaveEquipmentSets(); void _SaveBGData(); + void _SaveGlyphs(); + void _SaveTalents(); void _SetCreateBits(UpdateMask *updateMask, Player *target) const; void _SetUpdateBits(UpdateMask *updateMask, Player *target) const; @@ -2300,11 +2322,14 @@ class MANGOS_DLL_SPEC Player : public Unit PlayerMails m_mail; PlayerSpellMap m_spells; + PlayerTalentMap *m_talents[MAX_TALENT_SPECS]; uint32 m_lastPotionId; // last used health/mana potion in combat, that block next potion use uint32 m_activeSpec; uint32 m_specsCount; + uint32 m_Glyphs[MAX_TALENT_SPECS][MAX_GLYPH_SLOT_INDEX]; + ActionButtonList m_actionButtons; float m_auraBaseMod[BASEMOD_END][MOD_END]; |