TrinityCore
AzeriteItem.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef AzeriteItem_h__
19#define AzeriteItem_h__
20
21#include "Item.h"
22
28
29class TC_GAME_API AzeriteItem final : public Item
30{
31public:
33
34 bool Create(ObjectGuid::LowType guidlow, uint32 itemId, ItemContext context, Player const* owner) override;
35
36 void SaveToDB(CharacterDatabaseTransaction trans) override;
37 void LoadAzeriteItemData(Player const* owner, AzeriteItemData& azeriteItem);
39 void DeleteFromDB(CharacterDatabaseTransaction trans) override;
40
41 uint32 GetLevel() const { return m_azeriteItemData->Level; }
43 {
44 uint32 level = m_azeriteItemData->AuraLevel;
45 if (!level)
46 level = m_azeriteItemData->Level;
47
48 return level;
49 }
50
51 // Gaining artifact power
52 static uint32 GetCurrentKnowledgeLevel();
53 static uint64 CalcTotalXPToNextLevel(uint32 level, uint32 knowledgeLevel);
54 void GiveXP(uint64 xp);
55
56 // Essences
57 // C_AzeriteEssence.CanOpenUI - checks PlayerCondition 69048 - HasAura(261912) || RewardedQuest(57010) || IsOnQuest(57010)
58 static GameObject const* FindHeartForge(Player const* owner);
59 bool CanUseEssences() const;
60 bool HasUnlockedEssenceSlot(uint8 slot) const;
61 bool HasUnlockedEssenceMilestone(uint32 azeriteItemMilestonePowerId) const { return m_azeriteItemData->UnlockedEssenceMilestones.FindIndex(azeriteItemMilestonePowerId) != -1; }
62 void AddUnlockedEssenceMilestone(uint32 azeriteItemMilestonePowerId)
63 {
65 .ModifyValue(&UF::AzeriteItemData::UnlockedEssenceMilestones)) = azeriteItemMilestonePowerId;
66 }
67
68 uint32 GetEssenceRank(uint32 azeriteEssenceId) const;
69 void SetEssenceRank(uint32 azeriteEssenceId, uint32 rank);
70
71 UF::SelectedAzeriteEssences const* GetSelectedAzeriteEssences() const;
72 void SetSelectedAzeriteEssences(uint32 specializationId);
73 void CreateSelectedAzeriteEssences(uint32 specializationId);
74 void SetSelectedAzeriteEssence(uint8 slot, uint32 azeriteEssenceId);
75
76protected:
77 void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
78 void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
79 void ClearUpdateMask(bool remove) override;
80
81public:
82 void BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
83 void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask, UF::ItemData::Mask const& requestedItemMask,
84 UF::AzeriteItemData::Mask const& requestedAzeriteItemMask, Player const* target) const;
85
86 struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer
87 {
88 explicit ValuesUpdateForPlayerWithMaskSender(AzeriteItem const* owner) : Owner(owner) { }
89
94
95 void operator()(Player const* player) const;
96 };
97
99
100private:
101 void UnlockDefaultMilestones();
102};
103
104#endif // AzeriteItem_h__
constexpr uint32 MAX_AZERITE_ITEM_LEVEL
Definition: AzeriteItem.h:24
constexpr uint32 SPELL_ID_HEART_ESSENCE_ACTION_BAR_OVERRIDE
Definition: AzeriteItem.h:27
constexpr uint32 PLAYER_CONDITION_ID_UNLOCKED_AZERITE_ESSENCES
Definition: AzeriteItem.h:26
constexpr uint32 ITEM_ID_HEART_OF_AZEROTH
Definition: AzeriteItem.h:23
constexpr uint32 MAX_AZERITE_ITEM_KNOWLEDGE_LEVEL
Definition: AzeriteItem.h:25
ItemContext
Definition: DBCEnums.h:1063
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
#define TC_GAME_API
Definition: Define.h:123
uint8_t uint8
Definition: Define.h:144
uint64_t uint64
Definition: Define.h:141
uint32_t uint32
Definition: Define.h:142
uint16 flags
Definition: DisableMgr.cpp:49
uint32 GetEffectiveLevel() const
Definition: AzeriteItem.h:42
UF::UpdateField< UF::AzeriteItemData, 0, TYPEID_AZERITE_ITEM > m_azeriteItemData
Definition: AzeriteItem.h:98
bool HasUnlockedEssenceMilestone(uint32 azeriteItemMilestonePowerId) const
Definition: AzeriteItem.h:61
void AddUnlockedEssenceMilestone(uint32 azeriteItemMilestonePowerId)
Definition: AzeriteItem.h:62
uint32 GetLevel() const
Definition: AzeriteItem.h:41
Definition: Item.h:170
virtual void SaveToDB(CharacterDatabaseTransaction trans)
Definition: Item.cpp:561
void BuildValuesUpdateWithFlag(ByteBuffer *data, UF::UpdateFieldFlag flags, Player const *target) const override
Definition: Item.cpp:1735
void BuildValuesUpdateForPlayerWithMask(UpdateData *data, UF::ObjectData::Mask const &requestedObjectMask, UF::ItemData::Mask const &requestedItemMask, Player const *target) const
Definition: Item.cpp:1751
void ClearUpdateMask(bool remove) override
Definition: Item.cpp:1791
void BuildValuesCreate(ByteBuffer *data, Player const *target) const override
Definition: Item.cpp:1708
virtual bool Create(ObjectGuid::LowType guidlow, uint32 itemId, ItemContext context, Player const *owner)
Definition: Item.cpp:468
void BuildValuesUpdate(ByteBuffer *data, Player const *target) const override
Definition: Item.cpp:1719
static void DeleteFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType itemGuid)
Definition: Item.cpp:1088
uint64 LowType
Definition: ObjectGuid.h:278
UF::DynamicUpdateFieldSetter< T >::insert_result AddDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter< T > setter)
Definition: Object.h:308
UpdateFieldFlag
Definition: UpdateField.h:34
ValuesUpdateForPlayerWithMaskSender(AzeriteItem const *owner)
Definition: AzeriteItem.h:88
DynamicUpdateField< uint32, 0, 4 > UnlockedEssenceMilestones
Definition: UpdateFields.h:198