aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h2
-rw-r--r--src/server/game/Spells/Spell.cpp36
-rw-r--r--src/server/game/Spells/SpellInfo.cpp2
3 files changed, 38 insertions, 2 deletions
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 21bf938811d..469a2b847a1 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -2635,7 +2635,7 @@ enum Targets
TARGET_UNIT_LINE_CASTER_TO_DEST_ENEMY = 134,
TARGET_UNIT_LINE_CASTER_TO_DEST = 135,
TARGET_UNK_136 = 136,
- TARGET_UNK_137 = 137,
+ TARGET_DEST_CASTER_MOVEMENT_DIRECTION = 137,
TARGET_DEST_DEST_GROUND = 138,
TARGET_UNK_139 = 139,
TARGET_UNK_140 = 140,
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 10b03a50ffe..461d4d81129 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -1351,6 +1351,7 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffectInfo const& spellEffectIn
break;
}
case TARGET_DEST_CASTER_FRONT_LEAP:
+ case TARGET_DEST_CASTER_MOVEMENT_DIRECTION:
{
Unit* unitCaster = m_caster->ToUnit();
if (!unitCaster)
@@ -1358,6 +1359,41 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffectInfo const& spellEffectIn
float dist = spellEffectInfo.CalcRadius(unitCaster);
float angle = targetType.CalcDirectionAngle();
+ if (targetType.GetTarget() == TARGET_DEST_CASTER_MOVEMENT_DIRECTION)
+ {
+ angle = [&]()
+ {
+ switch (m_caster->m_movementInfo.GetMovementFlags() & (MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT))
+ {
+ case MOVEMENTFLAG_NONE:
+ case MOVEMENTFLAG_FORWARD:
+ case MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD:
+ case MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT:
+ case MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT:
+ case MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT:
+ return 0.0f;
+ case MOVEMENTFLAG_BACKWARD:
+ case MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT:
+ return static_cast<float>(M_PI);
+ case MOVEMENTFLAG_STRAFE_LEFT:
+ case MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT:
+ return static_cast<float>(M_PI / 2);
+ case MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_STRAFE_LEFT:
+ return static_cast<float>(M_PI / 4);
+ case MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT:
+ return static_cast<float>(3 * M_PI / 4);
+ case MOVEMENTFLAG_STRAFE_RIGHT:
+ case MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_RIGHT:
+ return static_cast<float>(-M_PI / 2);
+ case MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_STRAFE_RIGHT:
+ return static_cast<float>(-M_PI / 4);
+ case MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_RIGHT:
+ return static_cast<float>(-3 * M_PI / 4);
+ default:
+ return 0.0f;
+ }
+ }();
+ }
Position pos = dest._position;
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index 7f16a53498b..054d9bf0ab4 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -355,7 +355,7 @@ SpellImplicitTargetInfo::StaticData SpellImplicitTargetInfo::_data[TOTAL_SPELL_T
{TARGET_OBJECT_TYPE_UNIT, TARGET_REFERENCE_TYPE_DEST, TARGET_SELECT_CATEGORY_LINE, TARGET_CHECK_ENEMY, TARGET_DIR_NONE}, // 134 TARGET_UNIT_LINE_CASTER_TO_DEST_ENEMY
{TARGET_OBJECT_TYPE_UNIT, TARGET_REFERENCE_TYPE_DEST, TARGET_SELECT_CATEGORY_LINE, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 135 TARGET_UNIT_LINE_CASTER_TO_DEST
{TARGET_OBJECT_TYPE_NONE, TARGET_REFERENCE_TYPE_NONE, TARGET_SELECT_CATEGORY_NYI, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 136
- {TARGET_OBJECT_TYPE_NONE, TARGET_REFERENCE_TYPE_NONE, TARGET_SELECT_CATEGORY_NYI, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 137
+ {TARGET_OBJECT_TYPE_DEST, TARGET_REFERENCE_TYPE_CASTER, TARGET_SELECT_CATEGORY_DEFAULT, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 137 TARGET_DEST_CASTER_MOVEMENT_DIRECTION
{TARGET_OBJECT_TYPE_DEST, TARGET_REFERENCE_TYPE_DEST, TARGET_SELECT_CATEGORY_DEFAULT, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 138 TARGET_DEST_DEST_GROUND
{TARGET_OBJECT_TYPE_NONE, TARGET_REFERENCE_TYPE_NONE, TARGET_SELECT_CATEGORY_NYI, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 139
{TARGET_OBJECT_TYPE_NONE, TARGET_REFERENCE_TYPE_NONE, TARGET_SELECT_CATEGORY_NYI, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 140