aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/Spell.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-12-29 01:18:17 +0100
committerShauren <shauren.trinity@gmail.com>2021-12-29 01:18:17 +0100
commitbbdb70ed57887465f5e06a131c8326b71743950c (patch)
treef9dfbd6fa19263066173fa57270bf2a5e0ffdcd3 /src/server/game/Spells/Spell.cpp
parent565ef6a2f4b1db76418c84f1007f75343adce3f7 (diff)
Core/Spells: Implemented target 105 TARGET_UNIT_CASTER_AND_PASSENGERS
Diffstat (limited to 'src/server/game/Spells/Spell.cpp')
-rw-r--r--src/server/game/Spells/Spell.cpp40
1 files changed, 13 insertions, 27 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 45a5b310c92..5abd3372fdc 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -1233,50 +1233,36 @@ void Spell::SelectImplicitAreaTargets(SpellEffectInfo const& spellEffectInfo, Sp
return;
}
+ float radius = spellEffectInfo.CalcRadius(m_caster) * m_spellValue->RadiusMod;
std::list<WorldObject*> targets;
switch (targetType.GetTarget())
{
+ case TARGET_UNIT_CASTER_AND_PASSENGERS:
+ targets.push_back(m_caster);
+ if (Unit* unit = m_caster->ToUnit())
+ if (Vehicle const* vehicleKit = unit->GetVehicleKit())
+ for (int8 seat = 0; seat < MAX_VEHICLE_SEATS; ++seat)
+ if (Unit* passenger = vehicleKit->GetPassenger(seat))
+ targets.push_back(passenger);
+ break;
case TARGET_UNIT_TARGET_ALLY_OR_RAID:
if (Unit* targetedUnit = m_targets.GetUnitTarget())
{
if (!m_caster->IsUnit() || !m_caster->ToUnit()->IsInRaidWith(targetedUnit))
- {
targets.push_back(m_targets.GetUnitTarget());
-
- CallScriptObjectAreaTargetSelectHandlers(targets, spellEffectInfo.EffectIndex, targetType);
-
- if (!targets.empty())
- {
- // Other special target selection goes here
- if (uint32 maxTargets = m_spellValue->MaxAffectedTargets)
- Trinity::Containers::RandomResize(targets, maxTargets);
-
- for (WorldObject* target : targets)
- {
- if (Unit* unit = target->ToUnit())
- AddUnitTarget(unit, effMask, false, true, center);
- else if (GameObject* gObjTarget = target->ToGameObject())
- AddGOTarget(gObjTarget, effMask);
- }
- }
-
- return;
- }
-
- center = targetedUnit;
+ else
+ SearchAreaTargets(targets, radius, targetedUnit, referer, targetType.GetObjectType(), targetType.GetCheckType(), spellEffectInfo.ImplicitTargetConditions);
}
break;
case TARGET_UNIT_CASTER_AND_SUMMONS:
targets.push_back(m_caster);
+ SearchAreaTargets(targets, radius, center, referer, targetType.GetObjectType(), targetType.GetCheckType(), spellEffectInfo.ImplicitTargetConditions);
break;
default:
+ SearchAreaTargets(targets, radius, center, referer, targetType.GetObjectType(), targetType.GetCheckType(), spellEffectInfo.ImplicitTargetConditions);
break;
}
- float radius = spellEffectInfo.CalcRadius(m_caster) * m_spellValue->RadiusMod;
-
- SearchAreaTargets(targets, radius, center, referer, targetType.GetObjectType(), targetType.GetCheckType(), spellEffectInfo.ImplicitTargetConditions);
-
CallScriptObjectAreaTargetSelectHandlers(targets, spellEffectInfo.EffectIndex, targetType);
if (!targets.empty())