diff options
author | Elimination <lorder222@Rambler.ru> | 2016-02-05 14:36:08 +0100 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2017-01-08 00:54:08 +0100 |
commit | 48b74f0f6ae21608e711229bec67cfbeda34ace8 (patch) | |
tree | b19adc45dd10e58c1ea496cf2d345e7d3ca44886 | |
parent | 7eb1eb1715ee4383d75bb6136475cf1c8094299d (diff) |
Core/Spells: Fix wrong totem placement
(cherry picked from commit 37b2f590b6d63f230c755f932c2dd356c265486f)
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index ae63cd19ebb..69e2369da39 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -1305,18 +1305,35 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffIndex effIndex, SpellImplici { if (SpellEffectInfo const* effect = GetEffect(effIndex)) { - float dist; + float dist = effect->CalcRadius(m_caster); float angle = targetType.CalcDirectionAngle(); float objSize = m_caster->GetObjectSize(); - if (targetType.GetTarget() == TARGET_DEST_CASTER_SUMMON) - dist = PET_FOLLOW_DIST; - else - dist = effect->CalcRadius(m_caster); + + switch (targetType.GetTarget()) + { + case TARGET_DEST_CASTER_SUMMON: + dist = PET_FOLLOW_DIST; + break; + case TARGET_DEST_CASTER_RANDOM: + if (dist > objSize) + dist = objSize + (dist - objSize) * float(rand_norm()); + break; + case TARGET_DEST_CASTER_FRONT_LEFT: + case TARGET_DEST_CASTER_BACK_LEFT: + case TARGET_DEST_CASTER_FRONT_RIGHT: + case TARGET_DEST_CASTER_BACK_RIGHT: + { + static float const DefaultTotemDistance = 3.0f; + if (!effect->HasRadius() && !effect->HasMaxRadius()) + dist = DefaultTotemDistance; + break; + } + default: + break; + } if (dist < objSize) dist = objSize; - else if (targetType.GetTarget() == TARGET_DEST_CASTER_RANDOM) - dist = objSize + (dist - objSize) * float(rand_norm()); Position pos = dest._position; m_caster->MovePositionToFirstCollision(pos, dist, angle); |