27#include <boost/date_time/gregorian/gregorian_types.hpp>
28#include <boost/date_time/posix_time/conversion.hpp>
73 std::size_t specIndex = 0;
80 for (; specIndex < 4; ++specIndex)
84 stmt->
setUInt32(5 + specIndex * 5 + j, 0);
93 stmt->
setUInt32(1, azeriteItemMilestonePowerId);
117 bool needSave =
false;
121 azeriteItemData.
Xp = 0;
122 azeriteItemData.
Level = 1;
128 azeriteItemData.
Xp = 0;
139 azeriteItemData.
Xp =
uint64(azeriteItemData.
Xp /
double(oldMax) * newMax);
218 boost::gregorian::week_iterator itr(boost::gregorian::date(2020, boost::date_time::Jan, 14));
246 if (currentXP + remainingXP >= totalXp)
250 remainingXP -= totalXp - currentXP;
255 currentXP += remainingXP;
290 if (forge->GetGOInfo()->itemForge.ForgeType == 2)
330 if (!rank && index >= 0)
336 if (!
sDB2Manager.GetAzeriteEssencePower(azeriteEssenceId, rank))
344 unlockedEssence.
Rank = rank;
398 std::size_t sizePos = data->
wpos();
410 std::size_t sizePos = data->
wpos();
432 std::size_t sizePos = data->
wpos();
438 m_itemData->WriteUpdate(*data, mask,
true,
this, target);
452 if (requestedObjectMask.IsAnySet())
457 if (itemMask.IsAnySet())
462 if (azeriteItemMask.IsAnySet())
466 std::size_t sizePos = buffer.
wpos();
471 m_objectData->WriteUpdate(buffer, requestedObjectMask,
true,
this, target);
474 m_itemData->WriteUpdate(buffer, itemMask,
true,
this, target);
503 bool hasPreviousMilestone =
true;
506 if (!hasPreviousMilestone)
515 if (milestone->AutoUnlock)
518 hasPreviousMilestone =
true;
521 hasPreviousMilestone =
false;
constexpr uint32 MAX_AZERITE_ITEM_LEVEL
constexpr uint32 PLAYER_CONDITION_ID_UNLOCKED_AZERITE_ESSENCES
constexpr uint32 MAX_AZERITE_ITEM_KNOWLEDGE_LEVEL
@ CHAR_INS_ITEM_INSTANCE_AZERITE
@ CHAR_INS_ITEM_INSTANCE_AZERITE_MILESTONE_POWER
@ CHAR_UPD_ITEM_INSTANCE_AZERITE_ON_LOAD
@ CHAR_INS_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE
@ CHAR_DEL_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE
@ CHAR_DEL_ITEM_INSTANCE_AZERITE
@ CHAR_DEL_ITEM_INSTANCE_AZERITE_MILESTONE_POWER
DB2Storage< AzeriteKnowledgeMultiplierEntry > sAzeriteKnowledgeMultiplierStore("AzeriteKnowledgeMultiplier.db2", &AzeriteKnowledgeMultiplierLoadInfo::Instance)
DB2Storage< AzeriteLevelInfoEntry > sAzeriteLevelInfoStore("AzeriteLevelInfo.db2", &AzeriteLevelInfoLoadInfo::Instance)
DB2Storage< PlayerConditionEntry > sPlayerConditionStore("PlayerCondition.db2", &PlayerConditionLoadInfo::Instance)
#define MAX_AZERITE_ESSENCE_SLOT
@ EarnArtifactXPForAzeriteItem
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
@ GAMEOBJECT_TYPE_ITEM_FORGE
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
void BuildValuesUpdateWithFlag(ByteBuffer *data, UF::UpdateFieldFlag flags, Player const *target) const override
static uint64 CalcTotalXPToNextLevel(uint32 level, uint32 knowledgeLevel)
void BuildValuesUpdateForPlayerWithMask(UpdateData *data, UF::ObjectData::Mask const &requestedObjectMask, UF::ItemData::Mask const &requestedItemMask, UF::AzeriteItemData::Mask const &requestedAzeriteItemMask, Player const *target) const
UF::SelectedAzeriteEssences const * GetSelectedAzeriteEssences() const
void UnlockDefaultMilestones()
void SetSelectedAzeriteEssences(uint32 specializationId)
void LoadAzeriteItemData(Player const *owner, AzeriteItemData &azeriteItem)
static uint32 GetCurrentKnowledgeLevel()
UF::UpdateField< UF::AzeriteItemData, 0, TYPEID_AZERITE_ITEM > m_azeriteItemData
void SetSelectedAzeriteEssence(uint8 slot, uint32 azeriteEssenceId)
bool HasUnlockedEssenceSlot(uint8 slot) const
static GameObject const * FindHeartForge(Player const *owner)
bool HasUnlockedEssenceMilestone(uint32 azeriteItemMilestonePowerId) const
void ClearUpdateMask(bool remove) override
static void DeleteFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType itemGuid)
bool CanUseEssences() const
bool Create(ObjectGuid::LowType guidlow, uint32 itemId, ItemContext context, Player const *owner) override
void AddUnlockedEssenceMilestone(uint32 azeriteItemMilestonePowerId)
void CreateSelectedAzeriteEssences(uint32 specializationId)
void SetEssenceRank(uint32 azeriteEssenceId, uint32 rank)
uint32 GetEssenceRank(uint32 azeriteEssenceId) const
void SaveToDB(CharacterDatabaseTransaction trans) override
void BuildValuesUpdate(ByteBuffer *data, Player const *target) const override
void BuildValuesCreate(ByteBuffer *data, Player const *target) const override
void put(std::size_t pos, T value)
static bool IsPlayerMeetingCondition(Player const *player, PlayerConditionEntry const *condition)
void SetState(ItemUpdateState state, Player *forplayer=nullptr)
virtual void SaveToDB(CharacterDatabaseTransaction trans)
ItemUpdateState GetState() const
void ClearUpdateMask(bool remove) override
virtual bool Create(ObjectGuid::LowType guidlow, uint32 itemId, ItemContext context, Player const *owner)
Player * GetOwner() const
UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const *target) const override
static void DeleteFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType itemGuid)
UF::UpdateField< UF::ItemData, 0, TYPEID_ITEM > m_itemData
ObjectGuid const & GetGUID() const
UF::UpdateField< UF::ObjectData, 0, TYPEID_OBJECT > m_objectData
UF::DynamicUpdateFieldSetter< T >::insert_result AddDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter< T > setter)
void SetUpdateFieldValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type value)
UF::UpdateFieldHolder m_values
ByteBuffer & PrepareValuesUpdateBuffer(UpdateData *data) const
void RemoveDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter< T > setter, uint32 index)
ChrSpecialization GetPrimarySpecialization() const
void _ApplyItemBonuses(Item *item, uint8 slot, bool apply)
void SendDirectMessage(WorldPacket const *data) const
void UpdateCriteria(CriteriaType type, uint64 miscValue1=0, uint64 miscValue2=0, uint64 miscValue3=0, WorldObject *ref=nullptr)
void setUInt32(const uint8 index, const uint32 value)
void setUInt64(const uint8 index, const uint64 value)
Mask const & GetChangesMask() const
MutableFieldReference< T, false > ModifyValue(UpdateField< T, BlockBit, Bit >(Derived::*field))
void ClearChangesMask(UpdateField< T, BlockBit, Bit >(Derived::*field))
bool HasChanged(uint32 index) const
uint32 GetChangedObjectTypeMask() const
bool BuildPacket(WorldPacket *packet)
uint32 GetBlock(uint32 index) const
constexpr uint32 GetMapId() const
GameObject * FindNearestGameObjectOfType(GameobjectTypes type, float range) const
WorldPacket const * Write() override
std::vector< uint32 > AzeriteItemMilestonePowers
std::array< AzeriteItemSelectedEssencesData, 4 > SelectedAzeriteEssences
std::vector< AzeriteEssencePowerEntry const * > UnlockedAzeriteEssences
std::array< uint32, MAX_AZERITE_ESSENCE_SLOT > AzeriteEssenceId
UF::AzeriteItemData::Base AzeriteItemMask
void operator()(Player const *player) const
AzeriteItem const * Owner
UF::ItemData::Base ItemMask
UF::ObjectData::Base ObjectMask
uint64 BaseExperienceToNextLevel
uint64 MinimumExperienceToNextLevel
UpdateField< uint32, 0, 8 > KnowledgeLevel
UpdateField< uint64, 0, 5 > Xp
DynamicUpdateField< UF::SelectedAzeriteEssences, 0, 3 > SelectedEssences
DynamicUpdateField< UF::UnlockedAzeriteEssence, 0, 2 > UnlockedEssences
UpdateField< uint32, 0, 6 > Level
UpdateField< int32, 0, 9 > DEBUGknowledgeWeek
UpdateFieldArray< uint32, 4, 3, 4 > AzeriteEssenceID
UpdateField< bool, 0, 1 > Enabled
UpdateField< uint32, 0, 2 > SpecializationID