aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElimination <lorder222@Rambler.ru>2016-02-05 14:36:08 +0100
committerjoschiwald <joschiwald.trinity@gmail.com>2017-01-08 00:54:08 +0100
commit48b74f0f6ae21608e711229bec67cfbeda34ace8 (patch)
treeb19adc45dd10e58c1ea496cf2d345e7d3ca44886
parent7eb1eb1715ee4383d75bb6136475cf1c8094299d (diff)
Core/Spells: Fix wrong totem placement
(cherry picked from commit 37b2f590b6d63f230c755f932c2dd356c265486f)
-rw-r--r--src/server/game/Spells/Spell.cpp31
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);