diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index cd7ab7252..fba9d7bf5 100644 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -296,7 +296,13 @@ static Optional GetVelocity(Unit* owner, Unit* target, G3D::Vector3 const if (!owner->IsInCombat() && !owner->IsVehicle() && !owner->HasUnitFlag(UNIT_FLAG_POSSESSED) && (owner->IsPet() || owner->IsGuardian() || owner->GetGUID() == target->GetCritterGUID() || owner->GetCharmerOrOwnerGUID() == target->GetGUID())) { - UnitMoveType moveType = Movement::SelectSpeedType(target->GetUnitMovementFlags()); + uint32 moveFlags = target->GetUnitMovementFlags(); + if (target->movespline->isWalking()) + { + moveFlags |= MOVEMENTFLAG_WALKING; + } + + UnitMoveType moveType = Movement::SelectSpeedType(moveFlags); speed = std::max(target->GetSpeed(moveType), owner->GetSpeed(moveType)); if (playerPet) @@ -503,8 +509,8 @@ bool FollowMovementGenerator::DoUpdate(T* owner, uint32 time_diff) Movement::MoveSplineInit init(owner); init.MovebyPath(i_path->GetPath()); - init.SetWalk(target->IsWalking()); - if (Optional velocity = GetVelocity(owner, target, i_path->GetActualEndPosition(), owner->IsGuardian() && target->GetTypeId() == TYPEID_PLAYER)) + init.SetWalk(target->IsWalking() || target->movespline->isWalking()); + if (Optional velocity = GetVelocity(owner, target, i_path->GetActualEndPosition(), owner->IsGuardian())) init.SetVelocity(*velocity); init.Launch(); }