Skip to content

Commit

Permalink
Core/Creature: don't allow turning if spell would cancel due to turni…
Browse files Browse the repository at this point in the history
…ng to face target

Closes TrinityCore#18549
  • Loading branch information
ariel- committed Jan 22, 2017
1 parent 969bd53 commit 6b55fab
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions src/server/game/Entities/Creature/Creature.cpp
Expand Up @@ -2848,8 +2848,10 @@ void Creature::FocusTarget(Spell const* focusSpell, WorldObject const* target)
if (m_focusSpell)
return;

SpellInfo const* spellInfo = focusSpell->GetSpellInfo();

// don't use spell focus for vehicle spells
if (focusSpell->GetSpellInfo()->HasAura(SPELL_AURA_CONTROL_VEHICLE))
if (spellInfo->HasAura(SPELL_AURA_CONTROL_VEHICLE))
return;

if ((!target || target == this) && !focusSpell->GetCastTime()) // instant cast, untargeted (or self-targeted) spell doesn't need any facing updates
Expand All @@ -2872,15 +2874,15 @@ void Creature::FocusTarget(Spell const* focusSpell, WorldObject const* target)

if ( // here we determine if the (relatively expensive) forced update is worth it, or whether we can afford to wait until the scheduled update tick
( // only require instant update for spells that actually have a visual
focusSpell->GetSpellInfo()->SpellVisual[0] ||
focusSpell->GetSpellInfo()->SpellVisual[1]
spellInfo->SpellVisual[0] ||
spellInfo->SpellVisual[1]
) && (
!focusSpell->GetCastTime() || // if the spell is instant cast
focusSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR5_DONT_TURN_DURING_CAST) // client gets confused if we attempt to turn at the regularly scheduled update packet
spellInfo->HasAttribute(SPELL_ATTR5_DONT_TURN_DURING_CAST) // client gets confused if we attempt to turn at the regularly scheduled update packet
)
)
{
std::list<Player*> playersNearby;
std::vector<Player*> playersNearby;
GetPlayerListInGrid(playersNearby, GetVisibilityRange());
for (Player* player : playersNearby)
{
Expand All @@ -2891,7 +2893,7 @@ void Creature::FocusTarget(Spell const* focusSpell, WorldObject const* target)
}
}

bool canTurnDuringCast = !focusSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR5_DONT_TURN_DURING_CAST);
bool const canTurnDuringCast = !spellInfo->HasAttribute(SPELL_ATTR5_DONT_TURN_DURING_CAST) && !(spellInfo->ChannelInterruptFlags & AURA_INTERRUPT_FLAG_TURNING);
// Face the target - we need to do this before the unit state is modified for no-turn spells
if (target)
SetFacingToObject(target);
Expand Down

0 comments on commit 6b55fab

Please sign in to comment.