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!
