Alright, So lets begin. I need a way to make the barrel of my cannon move up and down with the script, the cannon is attached to a Boat, and it's Pivot's rotation is independent of the boat. How would I go about doing this? I also would like to be able to incorperate firing cone of about 15? from the top. So rather than a 90? Firing cone it would only be 75?

What is the correct way to Collet the Mouses Y Axis location and parse it correctly to always be between 0-75? and facing the Front face towards the end of the barrel, I also need it to be able to return the angle? What would be the C-Framing magic needed for this? Calc(int) was a method I devised as an attempt before.

--==LOCAL SCRIPT==--
--Variables
mouse=game.Players.LocalPlayer:GetMouse()
Rotor=Workspace.Model.Rotor
ScreenY=game.Workspace.CurrentCamera.ViewportSize.Y
minAngle=0
maxAngle=75
Gun=Workspace.Model.Gun

function Calc(Y)
	
	local Res=math.rad((ScreenY*Y/90))--Ratio'd using  Result/2Pi=90y/90 -- 90y= 90*y == ScreenY*Y 
	--If Resulting angle >75
	if Res>maxAngle then
		return maxAngle
	--If Result angle <0
	elseif Res <minAngle then
		return minAngle
	--If Result is not defying the limits
	else
		return Res
	end
	
end

while wait() do
		--RelativeReferenceFrame
		RotorPos = Rotor.Position
		--UnitVector of Direction
		dir = (mouse.Hit.p - RotorPos).unit
		--Setting the Offset of RotorWeld to (0,1.5,0)*(0,inverseTangent of dir.X/-dirZ + pi,0):inverse()
		--Basically rotating on the Y axis with the mouse.
		Rotor.RotorWeld.C1 = CFrame.new(0,1.5,0) * CFrame.Angles(0, (math.atan2(dir.X, -dir.Z) + math.pi), 0):inverse()
		--I still need a way to retrive the angle properly on the local reference frame.
		
		--offsetH=math.cos(angle)*Gun.Size.Z
		--offsetV=math.sin(angle)*Gun.Size.Z
		--Move the X Axis in this case which controls the up down movement of the barrel,
		--Set the offsets correctly.
		Gun.GunWeld.C1 = CFrame.new(0,0,0)*CFrame.Angles(0,0,0)--Im clueless e.e
end