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!

3 comments
I didn't find anything wrong with that code so I'm assuming there's an invisible part in front of camera or it is trying to shoot player's character's parts if you are in first person... A video in studio would help.
ok
Its not first person, but does also happen first person.