diff options
author | Shauren <shauren.trinity@gmail.com> | 2021-12-29 16:03:52 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-12-29 16:03:52 +0100 |
commit | 115409f353141dc8cf49a91699e9593b1bf04385 (patch) | |
tree | f5fdf8cdf208af79370b0ac586352522f60231a6 /src | |
parent | 730fc4665bee1b153987aa105aa509edec92e235 (diff) |
Core/Spells: Implemented target 116 TARGET_UNIT_AND_DEST_LAST_ENEMY
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 2 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Spells/SpellScript.cpp | 5 |
4 files changed, 17 insertions, 3 deletions
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 854eb5d2dd0..40ac3ce5ead 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -2614,7 +2614,7 @@ enum Targets TARGET_UNK_113 = 113, TARGET_UNK_114 = 114, TARGET_UNK_115 = 115, - TARGET_UNK_116 = 116, + TARGET_UNIT_AND_DEST_LAST_ENEMY = 116, TARGET_UNK_117 = 117, TARGET_UNIT_TARGET_ALLY_OR_RAID = 118, // If target is in your party or raid, all party and raid members will be affected TARGET_CORPSE_SRC_AREA_RAID = 119, diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 29d691ae215..7b057e6b28b 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -1207,6 +1207,8 @@ void Spell::SelectImplicitAreaTargets(SpellEffectInfo const& spellEffectInfo, Sp break; case TARGET_REFERENCE_TYPE_LAST: { + referer = m_caster; + // find last added target for this effect for (auto ihit = m_UniqueTargetInfo.rbegin(); ihit != m_UniqueTargetInfo.rend(); ++ihit) { @@ -1275,6 +1277,15 @@ void Spell::SelectImplicitAreaTargets(SpellEffectInfo const& spellEffectInfo, Sp break; } + if (targetType.GetObjectType() == TARGET_OBJECT_TYPE_UNIT_AND_DEST) + { + SpellDestination dest(*referer); + + CallScriptDestinationTargetSelectHandlers(dest, spellEffectInfo.EffectIndex, targetType); + + m_targets.ModDst(dest); + } + CallScriptObjectAreaTargetSelectHandlers(targets, spellEffectInfo.EffectIndex, targetType); if (!targets.empty()) diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 48a81856e15..889b3584865 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -334,7 +334,7 @@ SpellImplicitTargetInfo::StaticData SpellImplicitTargetInfo::_data[TOTAL_SPELL_T {TARGET_OBJECT_TYPE_NONE, TARGET_REFERENCE_TYPE_NONE, TARGET_SELECT_CATEGORY_NYI, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 113 {TARGET_OBJECT_TYPE_NONE, TARGET_REFERENCE_TYPE_NONE, TARGET_SELECT_CATEGORY_NYI, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 114 {TARGET_OBJECT_TYPE_NONE, TARGET_REFERENCE_TYPE_NONE, TARGET_SELECT_CATEGORY_NYI, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 115 - {TARGET_OBJECT_TYPE_NONE, TARGET_REFERENCE_TYPE_NONE, TARGET_SELECT_CATEGORY_NYI, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 116 + {TARGET_OBJECT_TYPE_UNIT_AND_DEST, TARGET_REFERENCE_TYPE_LAST, TARGET_SELECT_CATEGORY_AREA, TARGET_CHECK_ENEMY, TARGET_DIR_NONE}, // 116 TARGET_UNIT_AND_DEST_LAST_ENEMY {TARGET_OBJECT_TYPE_NONE, TARGET_REFERENCE_TYPE_NONE, TARGET_SELECT_CATEGORY_NYI, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 117 {TARGET_OBJECT_TYPE_UNIT, TARGET_REFERENCE_TYPE_CASTER, TARGET_SELECT_CATEGORY_AREA, TARGET_CHECK_RAID, TARGET_DIR_NONE}, // 118 TARGET_UNIT_TARGET_ALLY_OR_RAID {TARGET_OBJECT_TYPE_CORPSE, TARGET_REFERENCE_TYPE_CASTER, TARGET_SELECT_CATEGORY_AREA, TARGET_CHECK_RAID, TARGET_DIR_NONE}, // 119 TARGET_CORPSE_SRC_AREA_RAID diff --git a/src/server/game/Spells/SpellScript.cpp b/src/server/game/Spells/SpellScript.cpp index 402b43265fe..671ea468227 100644 --- a/src/server/game/Spells/SpellScript.cpp +++ b/src/server/game/Spells/SpellScript.cpp @@ -273,9 +273,12 @@ bool SpellScript::TargetHook::CheckEffect(SpellInfo const* spellEntry, uint8 eff case TARGET_SELECT_CATEGORY_NEARBY: // BOTH return true; case TARGET_SELECT_CATEGORY_CONE: // AREA - case TARGET_SELECT_CATEGORY_AREA: // AREA case TARGET_SELECT_CATEGORY_LINE: // AREA return area; + case TARGET_SELECT_CATEGORY_AREA: // AREA + if (targetInfo.GetObjectType() == TARGET_OBJECT_TYPE_UNIT_AND_DEST) + return area || dest; + return area; case TARGET_SELECT_CATEGORY_DEFAULT: switch (targetInfo.GetObjectType()) { |