diff options
| author | Shauren <shauren.trinity@gmail.com> | 2021-12-29 17:56:11 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-12-29 17:56:11 +0100 |
| commit | b50783ae80bdd6595c8a5f262171fdef5659da2d (patch) | |
| tree | 43bffdca888515c5e89a6f2bdccddc2a35a5b637 /src/server | |
| parent | 115409f353141dc8cf49a91699e9593b1bf04385 (diff) | |
Core/Spells: Implemented target 115 TARGET_UNIT_SRC_AREA_FURTHEST_ENEMY
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/Spell.cpp | 10 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 2 |
3 files changed, 11 insertions, 3 deletions
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 40ac3ce5ead..d55e3dede18 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -2613,7 +2613,7 @@ enum Targets TARGET_UNK_112 = 112, TARGET_UNK_113 = 113, TARGET_UNK_114 = 114, - TARGET_UNK_115 = 115, + TARGET_UNIT_SRC_AREA_FURTHEST_ENEMY = 115, 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 diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 7b057e6b28b..10f2bda5cde 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -1288,11 +1288,19 @@ void Spell::SelectImplicitAreaTargets(SpellEffectInfo const& spellEffectInfo, Sp CallScriptObjectAreaTargetSelectHandlers(targets, spellEffectInfo.EffectIndex, targetType); + if (targetType.GetTarget() == TARGET_UNIT_SRC_AREA_FURTHEST_ENEMY) + targets.sort(Trinity::ObjectDistanceOrderPred(referer, false)); + if (!targets.empty()) { // Other special target selection goes here if (uint32 maxTargets = m_spellValue->MaxAffectedTargets) - Trinity::Containers::RandomResize(targets, maxTargets); + { + if (targetType.GetTarget() != TARGET_UNIT_SRC_AREA_FURTHEST_ENEMY) + Trinity::Containers::RandomResize(targets, maxTargets); + else if (targets.size() > maxTargets) + targets.resize(maxTargets); + } for (std::list<WorldObject*>::iterator itr = targets.begin(); itr != targets.end(); ++itr) { diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 889b3584865..a428714c0ab 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -333,7 +333,7 @@ SpellImplicitTargetInfo::StaticData SpellImplicitTargetInfo::_data[TOTAL_SPELL_T {TARGET_OBJECT_TYPE_DEST, TARGET_REFERENCE_TYPE_CASTER, TARGET_SELECT_CATEGORY_DEFAULT, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 112 {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_UNIT, TARGET_REFERENCE_TYPE_SRC, TARGET_SELECT_CATEGORY_AREA, TARGET_CHECK_ENEMY, TARGET_DIR_NONE}, // 115 TARGET_UNIT_SRC_AREA_FURTHEST_ENEMY {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 |
