So I have a script that, when I click, a part moves from it's position to the mouse.Hit.p position, but I also want it to be limited to a maximum distance, how would I recalculate the target position to a new point with the maximum distance in the same direction.

I recreated my situation below, copy and paste it in a new project. Put it in a LocalScript in StarterPack.

local m = game.Players.LocalPlayer:GetMouse()
local p = Instance.new("Part", workspace)
local v = Instance.new("BodyVelocity", p)
local c
local welded = false
p.Anchored = true
local point
wait()

function getDir(vec)
	local lenSquared = vec.magnitude^2
	local invSqrt = 1 / math.sqrt(lenSquared)
	return Vector3.new(vec.x * invSqrt, vec.y * invSqrt, vec.z * invSqrt)
end

function ShowPointer(target)
	local point = Instance.new("Part", game.Workspace)
	point.Name = "Point"
	point.Size = Vector3.new(1,1,1)
	point.CanCollide = false
	point.Anchored = true
	point.Position = target + Vector3.new(0,1,0)
	point.BrickColor = BrickColor.new(21)
	local mesh = Instance.new("BlockMesh", point)
	mesh.Scale = Vector3.new(0.3,1,0.3)
	return point
end

function Unweld()
	if p:FindFirstChild("Weld") then
		p.Weld:Destroy()
	end
	welded = false
end

function Weld(char)
	p.Anchored = false
	c = char
	local torso = c.Torso
	Unweld()
	local weld = Instance.new("Weld")
	 weld.Part0 = p
	 weld.Part1 = torso
	 weld.Parent = p
	 weld.C0 = CFrame.new(0,2,3)
	 weld.C1 = CFrame.new()
	welded = true	
end

function Move(target, maxDist)
	if c ~= game.Players.LocalPlayer.Character then return end
	p.Anchored = false
	Unweld()
	target = Vector3.new(target.X, p.Position.Y, target.Z)
	local dist = (target - p.Position).magnitude
	local dir = (target - p.Position).unit
	dist = math.min(dist,maxDist)
	--target = dir*dist -- If I uncomment this line, it stops working properly.
	if point ~= nil then point:Destroy() end
	point = ShowPointer(target)
	p.BodyVelocity.velocity = getDir(dir) * 30.0
	while dist > 0.5 and wait() do dist = (target - p.Position).magnitude end
	p.BodyVelocity.velocity = Vector3.new(0,-10,0)
	p.Anchored = true
end

function OnButton2Up()
	if not welded then return end
	Move(m.Hit.p, 30)
end

m.Button2Up:connect(OnButton2Up)
p.Touched:connect(function(hit)
	if hit.Parent:FindFirstChild("Humanoid") then
		Weld(hit.Parent)
	end
end)

If I uncomment the line I mentioned in my script, then the maxDist works, but the new target is on a different angle than where I clicked. If anything is unclear, please leave a comment.