diff options
author | xinef1 <w.szyszko2@gmail.com> | 2017-02-06 01:10:15 +0100 |
---|---|---|
committer | ariel- <ariel-@users.noreply.github.com> | 2017-02-05 21:10:15 -0300 |
commit | c6060dd0c511ddad3cb1f0423aa9ccf2de7aedec (patch) | |
tree | f418ab2a2b7f12bf5384e8653eeb3481370108b6 /src/server/game/Spells/SpellMgr.cpp | |
parent | d06391d0628ffbf43da471c83653853b0926b4ab (diff) |
Core/Spells: Remade trajectory target selection (#19048)
* Remade trajectory target selection
* Added possibility to apply conditions to trajectory spells
* Properly recalculate delay time if CMSG_UPDATE_PROJECTILE_POSITION is received
Diffstat (limited to 'src/server/game/Spells/SpellMgr.cpp')
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 382490dd5e4..b7405cbc906 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -2744,6 +2744,24 @@ void SpellMgr::LoadSpellInfoCorrections() if (!spellInfo) continue; + // Fix range for trajectory triggered spell + for (uint8 j = 0; j < MAX_SPELL_EFFECTS; ++j) + { + if (spellInfo->Effects[j].IsEffect() && (spellInfo->Effects[j].TargetA.GetTarget() == TARGET_DEST_TRAJ || spellInfo->Effects[j].TargetB.GetTarget() == TARGET_DEST_TRAJ)) + { + // Get triggered spell if any + if (SpellInfo* spellInfoTrigger = const_cast<SpellInfo*>(GetSpellInfo(spellInfo->Effects[j].TriggerSpell))) + { + float maxRangeMain = spellInfo->RangeEntry ? spellInfo->RangeEntry->maxRangeHostile : 0.0f; + float maxRangeTrigger = spellInfoTrigger->RangeEntry ? spellInfoTrigger->RangeEntry->maxRangeHostile : 0.0f; + + // check if triggered spell has enough max range to cover trajectory + if (maxRangeTrigger < maxRangeMain) + spellInfoTrigger->RangeEntry = spellInfo->RangeEntry; + } + } + } + for (uint8 j = 0; j < MAX_SPELL_EFFECTS; ++j) { switch (spellInfo->Effects[j].Effect) |