aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/Spell.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-01-26 12:58:06 +0100
committerOvahlord <dreadkiller@gmx.de>2025-01-26 12:59:30 +0100
commit3eb4ccc9a0b3d315d53c566455a748c7cf795ac2 (patch)
tree1c2fd22fde7bf967a35cebe6cb6ff78672a1856d /src/server/game/Spells/Spell.cpp
parentb61960c1a952b929c95a80b1269800ef30878e3d (diff)
Core/Items: Fixed item spell charge slot indexing
Closes #30585 (cherry picked from commit c85d12fc3f0576163d4ffa91bb38f66894305349) # Conflicts: # src/server/game/Entities/Item/Item.h # src/server/game/Globals/ObjectMgr.cpp
Diffstat (limited to 'src/server/game/Spells/Spell.cpp')
-rw-r--r--src/server/game/Spells/Spell.cpp32
1 files changed, 12 insertions, 20 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index ed72a1d3366..c830fedee22 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -5346,23 +5346,24 @@ void Spell::TakeCastItem()
for (ItemEffectEntry const* itemEffect : m_CastItem->GetEffects())
{
- if (itemEffect->LegacySlotIndex >= m_CastItem->m_itemData->SpellCharges.size())
- continue;
-
// item has limited charges
if (itemEffect->Charges)
{
if (itemEffect->Charges < 0)
expendable = true;
- int32 charges = m_CastItem->GetSpellCharges(itemEffect->LegacySlotIndex);
+ int32 charges = m_CastItem->GetSpellCharges(itemEffect);
// item has charges left for this slot
if (charges && itemEffect->SpellID == int32(m_spellInfo->Id))
{
- (charges > 0) ? --charges : ++charges; // abs(charges) less at 1 after use
+ if (charges > 0)
+ --charges;
+ else
+ ++charges;
+
if (proto->GetMaxStackSize() == 1)
- m_CastItem->SetSpellCharges(itemEffect->LegacySlotIndex, charges);
+ m_CastItem->SetSpellCharges(itemEffect, charges);
m_CastItem->SetState(ITEM_CHANGED, player);
}
@@ -5607,11 +5608,8 @@ void Spell::TakeReagents()
{
for (ItemEffectEntry const* itemEffect : m_CastItem->GetEffects())
{
- if (itemEffect->LegacySlotIndex >= m_CastItem->m_itemData->SpellCharges.size())
- continue;
-
// CastItem will be used up and does not count as reagent
- int32 charges = m_CastItem->GetSpellCharges(itemEffect->LegacySlotIndex);
+ int32 charges = m_CastItem->GetSpellCharges(itemEffect);
if (itemEffect->Charges < 0 && abs(charges) < 2)
{
++itemcount;
@@ -7310,9 +7308,8 @@ SpellCastResult Spell::CheckItems(int32* param1 /*= nullptr*/, int32* param2 /*=
return SPELL_FAILED_ITEM_NOT_READY;
for (ItemEffectEntry const* itemEffect : m_CastItem->GetEffects())
- if (itemEffect->LegacySlotIndex < m_CastItem->m_itemData->SpellCharges.size() && itemEffect->Charges)
- if (m_CastItem->GetSpellCharges(itemEffect->LegacySlotIndex) == 0)
- return SPELL_FAILED_NO_CHARGES_REMAIN;
+ if (itemEffect->Charges && m_CastItem->GetSpellCharges(itemEffect) == 0)
+ return SPELL_FAILED_NO_CHARGES_REMAIN;
// consumable cast item checks
if (proto->GetClass() == ITEM_CLASS_CONSUMABLE && m_targets.GetUnitTarget())
@@ -7414,11 +7411,8 @@ SpellCastResult Spell::CheckItems(int32* param1 /*= nullptr*/, int32* param2 /*=
for (ItemEffectEntry const* itemEffect : m_CastItem->GetEffects())
{
- if (itemEffect->LegacySlotIndex >= m_CastItem->m_itemData->SpellCharges.size())
- continue;
-
// CastItem will be used up and does not count as reagent
- int32 charges = m_CastItem->GetSpellCharges(itemEffect->LegacySlotIndex);
+ int32 charges = m_CastItem->GetSpellCharges(itemEffect);
if (itemEffect->Charges < 0 && abs(charges) < 2)
{
++itemcount;
@@ -7757,9 +7751,7 @@ SpellCastResult Spell::CheckItems(int32* param1 /*= nullptr*/, int32* param2 /*=
if (Item* item = player->GetItemByEntry(itemId))
for (ItemEffectEntry const* itemEffect : item->GetEffects())
- if (itemEffect->LegacySlotIndex <= item->m_itemData->SpellCharges.size()
- && itemEffect->Charges != 0
- && item->GetSpellCharges(itemEffect->LegacySlotIndex) == itemEffect->Charges)
+ if (itemEffect->Charges != 0 && item->GetSpellCharges(itemEffect) == itemEffect->Charges)
return SPELL_FAILED_ITEM_AT_MAX_CHARGES;
break;
}