I'm making a gun.

The guns works perfectly other then the fact that the gun shoots up into the air after the first few shots.

I absolutely have no idea why.

It seems to aim up when I hold the trigger down, but if I tap the button slowly it doesn't occur as much.

Here are the important parts of the gun what do the damage and stuff.

LOCAL SCRIPT:

script.Parent.GunShootEvent:FireServer(mouse.Hit.p) --/triggers enemy damage on click or on hold.

SCRIPT:

ShootEvent.OnServerEvent:connect(function(player, aimplace)
	local chr = player.Character
	if script.Parent.Parent == chr then
		if AmmoLeft.Value <= 0 then
			print("No ammo left.")
		else
			if allowedFire then
			allowedFire = false
			GunSound:Play()
			if script.Parent.Staters.Mode.Value == "Semi" then
				MakeBullet(aimplace) --/makes enemy have damage.
				AmmoLeft.Value = AmmoLeft.Value - 1
			elseif script.Parent.Staters.Mode.Value == "Burst" then
				MakeBullet(aimplace) --/makes enemy have damage.
				AmmoLeft.Value = AmmoLeft.Value - 1
				wait(0.05)
				MakeBullet(aimplace) --/makes enemy have damage.
				AmmoLeft.Value = AmmoLeft.Value - 1
				wait(0.05)
			elseif script.Parent.Staters.Mode.Value == "Full" then
				MakeBullet(aimplace) --/makes enemy have damage.
				AmmoLeft.Value = AmmoLeft.Value - 1
			end
			allowedFire = true
		end
		end
	end
end)

=========================================================================

local function MakeBullet(Target)
	local HandlePosition = script.Parent.Handle.CFrame + script.Parent.Handle.CFrame:vectorToWorldSpace(Vector3.new(0,0,.3))
	local TargetLookWay = HandlePosition:vectorToWorldSpace(Vector3.new(0,1,0)) * 200
	local TorsoLookWay = (script.Parent.Parent:FindFirstChild("Torso").CFrame.lookVector * Vector3.new(1,0,1)).unit
	local TargetAngle = (TargetLookWay * Vector3.new(1,0,1)).unit
	local Angle = math.acos(TorsoLookWay:Dot(TargetAngle))

	if math.deg(Angle) < 90 then
		TargetLookWay = Target - script.Parent.Handle.Position
		if TargetLookWay.magnitude > range then
			TargetLookWay = TargetLookWay.unit * range
		end
		TargetLookWay = TargetLookWay * 1.1
	end
	
	local RayRay = Ray.new(HandlePosition.p, TargetLookWay)
	local NewPart, position = game.Workspace:FindPartOnRay(RayRay, script.Parent.Parent)
	if NewPart and NewPart.Parent and NewPart.Parent:FindFirstChild("Humanoid") then
		if NewPart.Name == "Head" then
			NewPart.Parent:FindFirstChild("Humanoid"):TakeDamage(damage * 1.25)
		elseif NewPart.Name == "Left Arm" or NewPart.Name == "Right Arm" or NewPart.Name == "Left Left" or NewPart.Name == "Right Leg"then
			NewPart.Parent:FindFirstChild("Humanoid"):TakeDamage(damage * 0.9)
		else
			NewPart.Parent:FindFirstChild("Humanoid"):TakeDamage(damage)
		end
	end	

	if position then
		TargetLookWay = position - HandlePosition.p
	end
end

If you need to know anything else, please ask or if you need to see a video of what is happening, just ask me.

Thanks to anyone who helps!