@@ -2779,10 +2779,32 @@ WorldPosition JumpAction::CalculateJumpParameters(const WorldPosition& src, Unit
27792779
27802780 if (!foundCollision)
27812781 {
2782- fx -= jumper->GetCollisionWidth () * vcos;
2783- fy -= jumper->GetCollisionWidth () * vsin;
2782+ fx += jumper->GetCollisionWidth () * vcos;
2783+ fy += jumper->GetCollisionWidth () * vsin;
2784+ }
2785+
2786+ if (!foundCollision)
2787+ {
2788+ // check distanct collision
27842789 if (ascending)
2785- fz -= jumper->GetCollisionHeight ();
2790+ fz += jumper->GetCollisionHeight ();
2791+
2792+ fx += jumper->GetCollisionWidth () * vcos;
2793+ fy += jumper->GetCollisionWidth () * vsin;
2794+
2795+ #ifdef MANGOSBOT_TWO
2796+ foundCollision = jumper->GetMap ()->GetHitPosition (ox, oy, oz, fx, fy, fz, jumper->GetPhaseMask (), -0 .5f );
2797+ #else
2798+ foundCollision = jumper->GetMap ()->GetHitPosition (ox, oy, oz, fx, fy, fz, -0 .5f );
2799+ #endif
2800+
2801+ if (!foundCollision)
2802+ {
2803+ fx -= jumper->GetCollisionWidth () * vcos;
2804+ fy -= jumper->GetCollisionWidth () * vsin;
2805+ if (ascending)
2806+ fz -= jumper->GetCollisionHeight ();
2807+ }
27862808 }
27872809
27882810 path.push_back (WorldPosition (src.getMapId (), fx, fy, fz));
@@ -2816,7 +2838,8 @@ WorldPosition JumpAction::CalculateJumpParameters(const WorldPosition& src, Unit
28162838 {
28172839 goodLanding = false ;
28182840 // reduce landing height by collision height
2819- fz = fz - CONTACT_DISTANCE - jumper->GetCollisionHeight ();
2841+ float fz_mod = fz - CONTACT_DISTANCE - jumper->GetCollisionHeight ();
2842+ jumper->GetMap ()->GetHitPosition (fx, fy, fz, fx, fy, fz_mod, -0 .5f );
28202843 }
28212844
28222845 WorldPosition destination = WorldPosition (src.getMapId (), fx, fy ,fz);
0 commit comments