From 0a6ab9ee24f50f0802d91e1c541f9e2f8df7e56a Mon Sep 17 00:00:00 2001 From: killerwife Date: Mon, 12 Sep 2016 23:28:14 +0200 Subject: [PATCH] Implement SPELL_ATTR_EX5_DONT_TURN_DURING_CAST --- src/game/SharedDefines.h | 2 +- src/game/Spell.cpp | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index a76628fb8b1..a8b852cc4e0 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -447,7 +447,7 @@ enum SpellAttributesEx5 SPELL_ATTR_EX5_UNK16 = 0x00010000,// 16 SPELL_ATTR_EX5_USABLE_WHILE_FEARED = 0x00020000,// 17 usable while feared SPELL_ATTR_EX5_USABLE_WHILE_CONFUSED = 0x00040000,// 18 usable while confused - SPELL_ATTR_EX5_UNK19 = 0x00080000,// 19 + SPELL_ATTR_EX5_DONT_TURN_DURING_CAST = 0x00080000,// 19 SPELL_ATTR_EX5_UNK20 = 0x00100000,// 20 SPELL_ATTR_EX5_UNK21 = 0x00200000,// 21 SPELL_ATTR_EX5_UNK22 = 0x00400000,// 22 diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 8617f1fdeb1..a48bb492ab4 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -3192,8 +3192,12 @@ void Spell::cast(bool skipCheck) return; } - if (m_caster->GetTypeId() != TYPEID_PLAYER && m_targets.getUnitTarget() && m_targets.getUnitTarget() != m_caster) - m_caster->SetInFront(m_targets.getUnitTarget()); + if (m_caster->GetTypeId() != TYPEID_PLAYER && m_targets.getUnitTarget() && m_targets.getUnitTarget() != m_caster && !m_spellInfo->HasAttribute(SPELL_ATTR_EX5_DONT_TURN_DURING_CAST)) + { + Unit* charmer = m_caster->GetCharmer(); + if (charmer && !(charmer->GetTypeId() == TYPEID_PLAYER && ((Player*)charmer)->GetCamera().GetBody() == m_caster)) // need to check if target doesnt have a player controlling it + m_caster->SetInFront(m_targets.getUnitTarget()); + } SpellCastResult castResult = CheckPower(); if (castResult != SPELL_CAST_OK)