diff options
author | Machiavelli <machiavelli.trinity@gmail.com> | 2011-08-18 20:24:46 +0200 |
---|---|---|
committer | Machiavelli <machiavelli.trinity@gmail.com> | 2011-08-18 20:28:07 +0200 |
commit | 917ffdffacde2e937be21d6659a66ee7ba312f7b (patch) | |
tree | 81bcdbf53351682845c46defc988d798a4fd5f7c /src/server/game/Spells/Spell.cpp | |
parent | b4ee9ebfc8149f0dcbfd3f741059d420bf61a46a (diff) |
Core/Spells: More research on SPELL_ATTR6_ONLY_CAST_WHILE_POSSESSED and implement new research (original caster should be charmer or owner) and implement QAston's earlier research (only castable while possessed).
Diffstat (limited to 'src/server/game/Spells/Spell.cpp')
-rwxr-xr-x | src/server/game/Spells/Spell.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 4b3f0ed73df..e29e0ced1e6 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -498,6 +498,8 @@ m_caster(caster), m_spellValue(new SpellValue(m_spellInfo)) 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(); @@ -506,7 +508,8 @@ m_caster(caster), m_spellValue(new SpellValue(m_spellInfo)) else { m_originalCaster = ObjectAccessor::GetUnit(*m_caster, m_originalCasterGUID); - if (m_originalCaster && !m_originalCaster->IsInWorld()) m_originalCaster = NULL; + if (m_originalCaster && !m_originalCaster->IsInWorld()) + m_originalCaster = NULL; } m_spellState = SPELL_STATE_NULL; @@ -4743,6 +4746,11 @@ SpellCastResult Spell::CheckCast(bool strict) return SPELL_FAILED_DONT_REPORT; } + //! Client checks this already + if (m_spellInfo->AttributesEx6 & SPELL_ATTR6_ONLY_CAST_WHILE_POSSESSED && !m_caster->GetCharmerOrOwnerGUID()) + return SPELL_FAILED_DONT_REPORT; + + Unit* target = m_targets.GetUnitTarget(); // In pure self-cast spells, the client won't send any unit target if (!target && (m_targets.GetTargetMask() == TARGET_FLAG_SELF || m_targets.GetTargetMask() & TARGET_FLAG_UNIT_ALLY)) // TARGET_FLAG_SELF == 0, remember! |