diff --git a/data/sql/updates/pending_db_world/rev_1689538830419766600.sql b/data/sql/updates/pending_db_world/rev_1689538830419766600.sql new file mode 100644 index 000000000..8284eeebf --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1689538830419766600.sql @@ -0,0 +1,2 @@ +-- +UPDATE `spell_enchant_proc_data` SET `attributeMask` = 0x2 WHERE `entry` = 2675; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 37acf9308..b6044f556 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -7224,6 +7224,9 @@ void Player::CastItemCombatSpell(Unit* target, WeaponAttackType attType, uint32 continue; } + if (entry && (entry->attributeMask & ENCHANT_PROC_ATTR_WHITE_HIT) && (procVictim & SPELL_PROC_FLAG_MASK)) + continue; + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(pEnchant->spellid[s]); if (!spellInfo) { @@ -7272,10 +7275,8 @@ void Player::CastItemCombatSpell(Unit* target, WeaponAttackType attType, uint32 item->SetEnchantmentCharges(EnchantmentSlot(e_slot), charges); } - if (spellInfo->IsPositive()) - CastSpell(this, spellInfo, TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD), item); - else - CastSpell(target, spellInfo, TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD), item); + Unit* unitTarget = spellInfo->IsPositive() ? this : target; + CastSpell(unitTarget, spellInfo, TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD), item); } } } diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h index 80eae7fc2..3a9700b6d 100644 --- a/src/server/game/Spells/SpellMgr.h +++ b/src/server/game/Spells/SpellMgr.h @@ -306,7 +306,8 @@ typedef std::unordered_map SpellProcMap; enum EnchantProcAttributes { - ENCHANT_PROC_ATTR_EXCLUSIVE = 0x1 // Only one instance of that effect can be active + ENCHANT_PROC_ATTR_EXCLUSIVE = 0x1, // Only one instance of that effect can be active + ENCHANT_PROC_ATTR_WHITE_HIT = 0x2 // Enchant shall only proc off white hits (not abilities) }; struct SpellEnchantProcEntry