mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 10:26:28 +01:00
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 272009ebee
* Remove Z offset when charging a target as it never made sense
This commit is contained in:
committed by
Ovahlord
parent
d0f946f30a
commit
fbe4abf3be
@@ -5710,23 +5710,15 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint
|
||||
|
||||
m_preGeneratedPath = Trinity::make_unique<PathGenerator>(m_caster);
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user