diff options
| author | Shauren <shauren.trinity@gmail.com> | 2022-01-09 16:31:12 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-01-09 16:31:12 +0100 |
| commit | 241193cd0287c3d7a2cbaf7f2c5775d414b4d0b3 (patch) | |
| tree | 01b863fd5bf6bbfdc048293f4d7c181315f2ae11 /src/server/game/Spells | |
| parent | 6df3cb0995d6bcb28998ca14fd39c9afe9d939b2 (diff) | |
Core/Items: Implemented many new enchantment flags
Diffstat (limited to 'src/server/game/Spells')
| -rw-r--r-- | src/server/game/Spells/Spell.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 41 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellMgr.h | 4 |
3 files changed, 8 insertions, 45 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 8a3c26bd7b2..ad8e6d3191f 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -7087,7 +7087,7 @@ SpellCastResult Spell::CheckItems(int32* param1 /*= nullptr*/, int32* param2 /*= { if (!enchantEntry) return SPELL_FAILED_ERROR; - if (enchantEntry->Flags & ENCHANTMENT_CAN_SOULBOUND) + if (enchantEntry->GetFlags().HasFlag(SpellItemEnchantmentFlags::Soulbound)) return SPELL_FAILED_NOT_TRADEABLE; } break; @@ -7101,10 +7101,10 @@ SpellCastResult Spell::CheckItems(int32* param1 /*= nullptr*/, int32* param2 /*= if (item->GetOwner() != player) { uint32 enchant_id = spellEffectInfo.MiscValue; - SpellItemEnchantmentEntry const* pEnchant = sSpellItemEnchantmentStore.LookupEntry(enchant_id); - if (!pEnchant) + SpellItemEnchantmentEntry const* enchantEntry = sSpellItemEnchantmentStore.LookupEntry(enchant_id); + if (!enchantEntry) return SPELL_FAILED_ERROR; - if (pEnchant->Flags & ENCHANTMENT_CAN_SOULBOUND) + if (enchantEntry->GetFlags().HasFlag(SpellItemEnchantmentFlags::Soulbound)) return SPELL_FAILED_NOT_TRADEABLE; } diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index e3b2e9b00d4..5599e0cea39 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -634,7 +634,10 @@ SpellEnchantProcEntry const* SpellMgr::GetSpellEnchantProcEvent(uint32 enchId) c bool SpellMgr::IsArenaAllowedEnchancment(uint32 ench_id) const { - return mEnchantCustomAttr[ench_id]; + if (SpellItemEnchantmentEntry const* enchantment = sSpellItemEnchantmentStore.LookupEntry(ench_id)) + return enchantment->GetFlags().HasFlag(SpellItemEnchantmentFlags::AllowEnteringArena); + + return false; } std::vector<int32> const* SpellMgr::GetSpellLinked(int32 spell_id) const @@ -1988,42 +1991,6 @@ void SpellMgr::LoadSpellPetAuras() TC_LOG_INFO("server.loading", ">> Loaded %u spell pet auras in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } -// Fill custom data about enchancments -void SpellMgr::LoadEnchantCustomAttr() -{ - uint32 oldMSTime = getMSTime(); - - uint32 size = sSpellItemEnchantmentStore.GetNumRows(); - mEnchantCustomAttr.resize(size); - - for (uint32 i = 0; i < size; ++i) - mEnchantCustomAttr[i] = false; - - uint32 count = 0; - for (SpellInfo const& spellInfo : mSpellInfoMap) - { - /// @todo find a better check - if (!spellInfo.HasAttribute(SPELL_ATTR2_PRESERVE_ENCHANT_IN_ARENA) || !spellInfo.HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFT)) - continue; - - for (SpellEffectInfo const& spellEffectInfo : spellInfo.GetEffects()) - { - if (spellEffectInfo.Effect == SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY) - { - uint32 enchId = spellEffectInfo.MiscValue; - SpellItemEnchantmentEntry const* ench = sSpellItemEnchantmentStore.LookupEntry(enchId); - if (!ench) - continue; - mEnchantCustomAttr[enchId] = true; - ++count; - break; - } - } - } - - TC_LOG_INFO("server.loading", ">> Loaded %u custom enchant attributes in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); -} - void SpellMgr::LoadSpellEnchantProcData() { uint32 oldMSTime = getMSTime(); diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h index ee5399ab202..00b93cb18fd 100644 --- a/src/server/game/Spells/SpellMgr.h +++ b/src/server/game/Spells/SpellMgr.h @@ -578,8 +578,6 @@ struct PetDefaultSpellsEntry // < 0 for petspelldata id, > 0 for creature_id typedef std::map<int32, PetDefaultSpellsEntry> PetDefaultSpellsMap; -typedef std::vector<bool> EnchantCustomAttribute; - typedef std::unordered_map<int32, std::vector<int32>> SpellLinkedMap; bool IsPrimaryProfessionSkill(uint32 skill); @@ -739,7 +737,6 @@ class TC_GAME_API SpellMgr void LoadSpellThreats(); void LoadSkillLineAbilityMap(); void LoadSpellPetAuras(); - void LoadEnchantCustomAttr(); void LoadSpellEnchantProcData(); void LoadSpellLinked(); void LoadPetLevelupSpellMap(); @@ -772,7 +769,6 @@ class TC_GAME_API SpellMgr SpellPetAuraMap mSpellPetAuraMap; SpellLinkedMap mSpellLinkedMap; SpellEnchantProcEventMap mSpellEnchantProcEventMap; - EnchantCustomAttribute mEnchantCustomAttr; SpellAreaMap mSpellAreaMap; SpellAreaForQuestMap mSpellAreaForQuestMap; SpellAreaForQuestMap mSpellAreaForQuestEndMap; |
