aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/Spell.cpp
diff options
context:
space:
mode:
authorGiacomo Pozzoni <giacomopoz@gmail.com>2019-12-30 15:58:39 +0100
committerShauren <shauren.trinity@gmail.com>2021-12-19 15:54:09 +0100
commit8d32849b3493d9e819be27945ef31488d8ba6dcf (patch)
tree0371618a20b054b7fbc899e92b1a474655069549 /src/server/game/Spells/Spell.cpp
parent80dbecbd56a9679a2e29f22f8f554ec2caa1c554 (diff)
Core/MMaps: Fix charge underwater/falling (#24010)
* Core/MMaps: Fix charge underwater Fix charge sometimes returning "no path available" when swimming/underwater. Fix charge selecting a destination point 4 yards above swimming/underwater targets * Allow falling units to charge targets that are below (lower Z coordinate) * Disable "raycast" pathfinding as it's not blizzlike. This might show some strange paths when charging with a target in front. It also fixes some falling undermap issues. This Reverts 272009ebeed80bc7749c004348fb1057761cf268 * Remove Z offset when charging a target as it never made sense (cherry picked from commit 88a14251e2765880e90cb41be7919cd39e3308e2)
Diffstat (limited to 'src/server/game/Spells/Spell.cpp')
-rw-r--r--src/server/game/Spells/Spell.cpp18
1 files changed, 5 insertions, 13 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 338867b9a52..63c83148d53 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -5680,23 +5680,15 @@ SpellCastResult Spell::CheckCast(bool strict, int32* param1 /*= nullptr*/, int32
m_preGeneratedPath = std::make_unique<PathGenerator>(unitCaster);
m_preGeneratedPath->SetPathLengthLimit(range);
+
// first try with raycast, if it fails fall back to normal path
- float targetObjectSize = std::min(target->GetCombatReach(), 4.0f);
- bool result = m_preGeneratedPath->CalculatePath(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ() + targetObjectSize, false, true);
+ bool result = m_preGeneratedPath->CalculatePath(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), false, false);
if (m_preGeneratedPath->GetPathType() & PATHFIND_SHORT)
return SPELL_FAILED_OUT_OF_RANGE;
else if (!result || m_preGeneratedPath->GetPathType() & (PATHFIND_NOPATH | PATHFIND_INCOMPLETE))
- {
- result = m_preGeneratedPath->CalculatePath(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ() + targetObjectSize, false, false);
- if (m_preGeneratedPath->GetPathType() & PATHFIND_SHORT)
- return SPELL_FAILED_OUT_OF_RANGE;
- else if (!result || m_preGeneratedPath->GetPathType() & (PATHFIND_NOPATH | PATHFIND_INCOMPLETE))
- return SPELL_FAILED_NOPATH;
- else if (m_preGeneratedPath->IsInvalidDestinationZ(target)) // Check position z, if not in a straight line
- return SPELL_FAILED_NOPATH;
- }
- else if (m_preGeneratedPath->IsInvalidDestinationZ(target)) // Check position z, if in a straight line
- return SPELL_FAILED_NOPATH;
+ return SPELL_FAILED_NOPATH;
+ else if (m_preGeneratedPath->IsInvalidDestinationZ(target)) // Check position z, if not in a straight line
+ return SPELL_FAILED_NOPATH;
m_preGeneratedPath->ShortenPathUntilDist(PositionToVector3(target), objSize); // move back
}