diff options
-rwxr-xr-x | src/server/game/Miscellaneous/SharedDefines.h | 2 | ||||
-rwxr-xr-x | src/server/game/Spells/Spell.cpp | 7 |
2 files changed, 5 insertions, 4 deletions
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 714606a633a..0ffae2ac9dc 100755 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -497,7 +497,7 @@ enum SpellAttr6 SPELL_ATTR6_UNK15 = 0x00008000, // 15 not set in 3.0.3 SPELL_ATTR6_UNK16 = 0x00010000, // 16 SPELL_ATTR6_UNK17 = 0x00020000, // 17 - SPELL_ATTR6_ONLY_CAST_WHILE_POSSESSED = 0x00040000, // 18 client won't allow to cast these spells when unit is not possessed && charmer of caster will be original caster + SPELL_ATTR6_CAST_BY_CHARMER = 0x00040000, // 18 client won't allow to cast these spells when unit is not possessed && charmer of caster will be original caster SPELL_ATTR6_UNK19 = 0x00080000, // 19 SPELL_ATTR6_UNK20 = 0x00100000, // 20 SPELL_ATTR6_CLIENT_UI_TARGET_EFFECTS = 0x00200000, // 21 it's only client-side attribute diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index da16669367b..e86b3851b11 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -496,10 +496,11 @@ m_caster(caster), m_spellValue(new SpellValue(m_spellInfo)) if (Item* pItem = m_caster->ToPlayer()->GetWeaponForAttack(RANGED_ATTACK)) m_spellSchoolMask = SpellSchoolMask(1 << pItem->GetTemplate()->Damage[0].DamageType); + if (info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER) + const_cast<Unit*>(m_caster) = caster->GetCharmerOrOwner(); + if (originalCasterGUID) m_originalCasterGUID = originalCasterGUID; - else if (info->AttributesEx6 & SPELL_ATTR6_ONLY_CAST_WHILE_POSSESSED) - m_originalCasterGUID = m_caster->GetCharmerOrOwnerGUID(); else m_originalCasterGUID = m_caster->GetGUID(); @@ -4747,7 +4748,7 @@ SpellCastResult Spell::CheckCast(bool strict) } //! Client checks this already - if (m_spellInfo->AttributesEx6 & SPELL_ATTR6_ONLY_CAST_WHILE_POSSESSED && !m_caster->GetCharmerOrOwnerGUID()) + if (m_spellInfo->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && !m_caster->GetCharmerOrOwnerGUID()) return SPELL_FAILED_DONT_REPORT; Unit* target = m_targets.GetUnitTarget(); |