diff options
author | ModoX <moardox@gmail.com> | 2023-06-24 01:16:00 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-24 01:16:00 +0200 |
commit | 80e22230c34106753cd6be57d9a496642e47216d (patch) | |
tree | cccccd6ce252930c2439f724ec923fa53ffc0633 /src | |
parent | 8ffc4c1034931d04f9904187c76b730f2ae61965 (diff) |
Core/Spells: Implemented target type TARGET_DEST_DEST_TARGET_TOWARDS_CASTER (#29085)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 2 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 2 |
3 files changed, 14 insertions, 2 deletions
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index f39a9937d85..ccc2be87678 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -2753,7 +2753,7 @@ enum Targets TARGET_UNK_145 = 145, TARGET_UNK_146 = 146, TARGET_UNK_147 = 147, - TARGET_UNK_148 = 148, + TARGET_DEST_DEST_TARGET_TOWARDS_CASTER = 148, TARGET_UNK_149 = 149, TARGET_UNIT_OWN_CRITTER = 150, // own battle pet from UNIT_FIELD_CRITTER TARGET_UNK_151 = 151, diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 2c2d8a8f1c0..8a55827d6d6 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -1674,6 +1674,18 @@ void Spell::SelectImplicitDestDestTargets(SpellEffectInfo const& spellEffectInfo case TARGET_DEST_DEST_GROUND: dest._position.m_positionZ = m_caster->GetMapHeight(dest._position.GetPositionX(), dest._position.GetPositionY(), dest._position.GetPositionZ()); break; + case TARGET_DEST_DEST_TARGET_TOWARDS_CASTER: + { + float dist = spellEffectInfo.CalcRadius(m_caster); + Position pos = dest._position; + float angle = pos.GetAbsoluteAngle(m_caster) - m_caster->GetOrientation(); + + m_caster->MovePositionToFirstCollision(pos, dist, angle); + pos.SetOrientation(m_caster->GetAbsoluteAngle(dest._position)); + + dest.Relocate(pos); + break; + } default: { float angle = targetType.CalcDirectionAngle(); diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index d80728ba8c5..34529b2f82b 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -388,7 +388,7 @@ std::array<SpellImplicitTargetInfo::StaticData, TOTAL_SPELL_TARGETS> SpellImplic {TARGET_OBJECT_TYPE_NONE, TARGET_REFERENCE_TYPE_NONE, TARGET_SELECT_CATEGORY_NYI, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 145 {TARGET_OBJECT_TYPE_NONE, TARGET_REFERENCE_TYPE_NONE, TARGET_SELECT_CATEGORY_NYI, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 146 {TARGET_OBJECT_TYPE_NONE, TARGET_REFERENCE_TYPE_NONE, TARGET_SELECT_CATEGORY_NYI, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 147 - {TARGET_OBJECT_TYPE_NONE, TARGET_REFERENCE_TYPE_NONE, TARGET_SELECT_CATEGORY_NYI, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 148 + {TARGET_OBJECT_TYPE_DEST, TARGET_REFERENCE_TYPE_DEST, TARGET_SELECT_CATEGORY_DEFAULT, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 148 TARGET_DEST_DEST_TARGET_TOWARDS_CASTER {TARGET_OBJECT_TYPE_DEST, TARGET_REFERENCE_TYPE_CASTER, TARGET_SELECT_CATEGORY_DEFAULT, TARGET_CHECK_DEFAULT, TARGET_DIR_RANDOM}, // 149 {TARGET_OBJECT_TYPE_UNIT, TARGET_REFERENCE_TYPE_CASTER, TARGET_SELECT_CATEGORY_DEFAULT, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 150 TARGET_UNIT_OWN_CRITTER {TARGET_OBJECT_TYPE_UNIT, TARGET_REFERENCE_TYPE_CASTER, TARGET_SELECT_CATEGORY_AREA, TARGET_CHECK_ENEMY, TARGET_DIR_NONE}, // 151 |