aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/AzeriteHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers/AzeriteHandler.cpp')
-rw-r--r--src/server/game/Handlers/AzeriteHandler.cpp245
1 files changed, 0 insertions, 245 deletions
diff --git a/src/server/game/Handlers/AzeriteHandler.cpp b/src/server/game/Handlers/AzeriteHandler.cpp
deleted file mode 100644
index 015ec05e570..00000000000
--- a/src/server/game/Handlers/AzeriteHandler.cpp
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "WorldSession.h"
-#include "AzeriteEmpoweredItem.h"
-#include "AzeriteItem.h"
-#include "AzeritePackets.h"
-#include "DB2Stores.h"
-#include "NPCPackets.h"
-#include "Player.h"
-#include "SpellHistory.h"
-
-void WorldSession::HandleAzeriteEssenceUnlockMilestone(WorldPackets::Azerite::AzeriteEssenceUnlockMilestone& azeriteEssenceUnlockMilestone)
-{
- if (!AzeriteItem::FindHeartForge(_player))
- return;
-
- Item* item = _player->GetItemByEntry(ITEM_ID_HEART_OF_AZEROTH, ItemSearchLocation::Everywhere);
- if (!item)
- return;
-
- AzeriteItem* azeriteItem = item->ToAzeriteItem();
- if (!azeriteItem || !azeriteItem->CanUseEssences())
- return;
-
- AzeriteItemMilestonePowerEntry const* milestonePower = sAzeriteItemMilestonePowerStore.LookupEntry(azeriteEssenceUnlockMilestone.AzeriteItemMilestonePowerID);
- if (!milestonePower || milestonePower->RequiredLevel > int32(azeriteItem->GetLevel()))
- return;
-
- // check that all previous milestones are unlocked
- for (AzeriteItemMilestonePowerEntry const* previousMilestone : sDB2Manager.GetAzeriteItemMilestonePowers())
- {
- if (previousMilestone == milestonePower)
- break;
-
- if (!azeriteItem->HasUnlockedEssenceMilestone(previousMilestone->ID))
- return;
- }
-
- azeriteItem->AddUnlockedEssenceMilestone(milestonePower->ID);
- _player->ApplyAzeriteItemMilestonePower(azeriteItem, milestonePower, true);
- azeriteItem->SetState(ITEM_CHANGED, _player);
-}
-
-void WorldSession::HandleAzeriteEssenceActivateEssence(WorldPackets::Azerite::AzeriteEssenceActivateEssence& azeriteEssenceActivateEssence)
-{
- WorldPackets::Azerite::ActivateEssenceFailed activateEssenceResult;
- activateEssenceResult.AzeriteEssenceID = azeriteEssenceActivateEssence.AzeriteEssenceID;
- Item* item = _player->GetItemByEntry(ITEM_ID_HEART_OF_AZEROTH, ItemSearchLocation::Equipment);
- if (!item)
- {
- activateEssenceResult.Reason = AzeriteEssenceActivateResult::NotEquipped;
- activateEssenceResult.Slot = azeriteEssenceActivateEssence.Slot;
- SendPacket(activateEssenceResult.Write());
- return;
- }
-
- AzeriteItem* azeriteItem = item->ToAzeriteItem();
- if (!azeriteItem || !azeriteItem->CanUseEssences())
- {
- activateEssenceResult.Reason = AzeriteEssenceActivateResult::ConditionFailed;
- SendPacket(activateEssenceResult.Write());
- return;
- }
-
- if (azeriteEssenceActivateEssence.Slot >= MAX_AZERITE_ESSENCE_SLOT || !azeriteItem->HasUnlockedEssenceSlot(azeriteEssenceActivateEssence.Slot))
- {
- activateEssenceResult.Reason = AzeriteEssenceActivateResult::SlotLocked;
- SendPacket(activateEssenceResult.Write());
- return;
- }
-
- UF::SelectedAzeriteEssences const* selectedEssences = azeriteItem->GetSelectedAzeriteEssences();
- // essence is already in that slot, nothing to do
- if (selectedEssences && selectedEssences->AzeriteEssenceID[azeriteEssenceActivateEssence.Slot] == uint32(azeriteEssenceActivateEssence.AzeriteEssenceID))
- return;
-
- uint32 rank = azeriteItem->GetEssenceRank(azeriteEssenceActivateEssence.AzeriteEssenceID);
- if (!rank)
- {
- activateEssenceResult.Reason = AzeriteEssenceActivateResult::EssenceNotUnlocked;
- activateEssenceResult.Arg = azeriteEssenceActivateEssence.AzeriteEssenceID;
- SendPacket(activateEssenceResult.Write());
- return;
- }
-
- if (_player->IsInCombat())
- {
- activateEssenceResult.Reason = AzeriteEssenceActivateResult::AffectingCombat;
- activateEssenceResult.Slot = azeriteEssenceActivateEssence.Slot;
- SendPacket(activateEssenceResult.Write());
- return;
- }
-
- if (_player->isDead())
- {
- activateEssenceResult.Reason = AzeriteEssenceActivateResult::CantDoThatRightNow;
- activateEssenceResult.Slot = azeriteEssenceActivateEssence.Slot;
- SendPacket(activateEssenceResult.Write());
- return;
- }
-
- if (!_player->HasPlayerFlag(PLAYER_FLAGS_RESTING) && !_player->HasUnitFlag2(UNIT_FLAG2_ALLOW_CHANGING_TALENTS))
- {
- activateEssenceResult.Reason = AzeriteEssenceActivateResult::NotInRestArea;
- activateEssenceResult.Slot = azeriteEssenceActivateEssence.Slot;
- SendPacket(activateEssenceResult.Write());
- return;
- }
-
- if (selectedEssences)
- {
- // need to remove selected essence from another slot if selected
- int32 removeEssenceFromSlot = -1;
- for (int32 slot = 0; slot < MAX_AZERITE_ESSENCE_SLOT; ++slot)
- if (azeriteEssenceActivateEssence.Slot != uint8(slot) && selectedEssences->AzeriteEssenceID[slot] == uint32(azeriteEssenceActivateEssence.AzeriteEssenceID))
- removeEssenceFromSlot = slot;
-
- // check cooldown of major essence slot
- if (selectedEssences->AzeriteEssenceID[0] && (azeriteEssenceActivateEssence.Slot == 0 || removeEssenceFromSlot == 0))
- {
- for (uint32 essenceRank = 1; essenceRank <= rank; ++essenceRank)
- {
- AzeriteEssencePowerEntry const* azeriteEssencePower = ASSERT_NOTNULL(sDB2Manager.GetAzeriteEssencePower(selectedEssences->AzeriteEssenceID[0], essenceRank));
- if (_player->GetSpellHistory()->HasCooldown(azeriteEssencePower->MajorPowerDescription))
- {
- activateEssenceResult.Reason = AzeriteEssenceActivateResult::CantRemoveEssence;
- activateEssenceResult.Arg = azeriteEssencePower->MajorPowerDescription;
- activateEssenceResult.Slot = azeriteEssenceActivateEssence.Slot;
- SendPacket(activateEssenceResult.Write());
- return;
- }
- }
- }
-
- if (removeEssenceFromSlot != -1)
- {
- _player->ApplyAzeriteEssence(azeriteItem, selectedEssences->AzeriteEssenceID[removeEssenceFromSlot], MAX_AZERITE_ESSENCE_RANK,
- AzeriteItemMilestoneType(sDB2Manager.GetAzeriteItemMilestonePower(removeEssenceFromSlot)->Type) == AzeriteItemMilestoneType::MajorEssence, false);
- azeriteItem->SetSelectedAzeriteEssence(removeEssenceFromSlot, 0);
- }
-
- if (selectedEssences->AzeriteEssenceID[azeriteEssenceActivateEssence.Slot])
- {
- _player->ApplyAzeriteEssence(azeriteItem, selectedEssences->AzeriteEssenceID[azeriteEssenceActivateEssence.Slot], MAX_AZERITE_ESSENCE_RANK,
- AzeriteItemMilestoneType(sDB2Manager.GetAzeriteItemMilestonePower(azeriteEssenceActivateEssence.Slot)->Type) == AzeriteItemMilestoneType::MajorEssence, false);
- }
- }
- else
- azeriteItem->CreateSelectedAzeriteEssences(AsUnderlyingType(_player->GetPrimarySpecialization()));
-
- azeriteItem->SetSelectedAzeriteEssence(azeriteEssenceActivateEssence.Slot, azeriteEssenceActivateEssence.AzeriteEssenceID);
-
- _player->ApplyAzeriteEssence(azeriteItem, azeriteEssenceActivateEssence.AzeriteEssenceID, rank,
- AzeriteItemMilestoneType(sDB2Manager.GetAzeriteItemMilestonePower(azeriteEssenceActivateEssence.Slot)->Type) == AzeriteItemMilestoneType::MajorEssence, true);
-
- azeriteItem->SetState(ITEM_CHANGED, _player);
-}
-
-void WorldSession::HandleAzeriteEmpoweredItemViewed(WorldPackets::Azerite::AzeriteEmpoweredItemViewed& azeriteEmpoweredItemViewed)
-{
- Item* item = _player->GetItemByGuid(azeriteEmpoweredItemViewed.ItemGUID);
- if (!item || !item->IsAzeriteEmpoweredItem())
- return;
-
- item->SetItemFlag(ITEM_FIELD_FLAG_AZERITE_EMPOWERED_ITEM_VIEWED);
- item->SetState(ITEM_CHANGED, _player);
-}
-
-void WorldSession::HandleAzeriteEmpoweredItemSelectPower(WorldPackets::Azerite::AzeriteEmpoweredItemSelectPower& azeriteEmpoweredItemSelectPower)
-{
- Item* item = _player->GetItemByPos(azeriteEmpoweredItemSelectPower.ContainerSlot, azeriteEmpoweredItemSelectPower.Slot);
- if (!item)
- return;
-
- AzeritePowerEntry const* azeritePower = sAzeritePowerStore.LookupEntry(azeriteEmpoweredItemSelectPower.AzeritePowerID);
- if (!azeritePower)
- return;
-
- AzeriteEmpoweredItem* azeriteEmpoweredItem = item->ToAzeriteEmpoweredItem();
- if (!azeriteEmpoweredItem)
- return;
-
- // Validate tier
- int32 actualTier = azeriteEmpoweredItem->GetTierForAzeritePower(Classes(_player->GetClass()), azeriteEmpoweredItemSelectPower.AzeritePowerID);
- if (azeriteEmpoweredItemSelectPower.Tier > MAX_AZERITE_EMPOWERED_TIER || azeriteEmpoweredItemSelectPower.Tier != actualTier)
- return;
-
- uint32 azeriteLevel = 0;
- Item const* heartOfAzeroth = _player->GetItemByEntry(ITEM_ID_HEART_OF_AZEROTH, ItemSearchLocation::Everywhere);
- if (!heartOfAzeroth)
- return;
-
- if (AzeriteItem const* azeriteItem = heartOfAzeroth->ToAzeriteItem())
- azeriteLevel = azeriteItem->GetEffectiveLevel();
-
- // Check required heart of azeroth level
- if (azeriteLevel < azeriteEmpoweredItem->GetRequiredAzeriteLevelForTier(uint32(actualTier)))
- return;
-
- // tiers are ordered backwards, you first select the highest one
- for (int32 i = actualTier + 1; i < azeriteEmpoweredItem->GetMaxAzeritePowerTier(); ++i)
- if (!azeriteEmpoweredItem->GetSelectedAzeritePower(i))
- return;
-
- bool activateAzeritePower = azeriteEmpoweredItem->IsEquipped() && heartOfAzeroth->IsEquipped();
- if (azeritePower->ItemBonusListID && activateAzeritePower)
- _player->_ApplyItemMods(azeriteEmpoweredItem, azeriteEmpoweredItem->GetSlot(), false);
-
- azeriteEmpoweredItem->SetSelectedAzeritePower(actualTier, azeriteEmpoweredItemSelectPower.AzeritePowerID);
-
- if (activateAzeritePower)
- {
- // apply all item mods when azerite power grants a bonus, item level changes and that affects stats and auras that scale with item level
- if (azeritePower->ItemBonusListID)
- _player->_ApplyItemMods(azeriteEmpoweredItem, azeriteEmpoweredItem->GetSlot(), true);
- else
- _player->ApplyAzeritePower(azeriteEmpoweredItem, azeritePower, true);
- }
-
- azeriteEmpoweredItem->SetState(ITEM_CHANGED, _player);
-}
-
-void WorldSession::SendAzeriteRespecNPC(ObjectGuid npc)
-{
- WorldPackets::NPC::NPCInteractionOpenResult npcInteraction;
- npcInteraction.Npc = npc;
- npcInteraction.InteractionType = PlayerInteractionType::AzeriteRespec;
- npcInteraction.Success = true;
- SendPacket(npcInteraction.Write());
-}