Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

[SOLVED] My automatic gun does not work how I expected?

Asked by 2 years ago
Edited 2 years ago

So here's the deal; I tried making an automatic gun but failed. If I hold my mouse button it will work how I intended, but as soon as I spam the gun it shoots out the bullets extremely fast. The ammo counter will also decrease dramatically. Is there any way fix to this? Any answer is appreciated!

Most of the script (You might have to press view source):

script.Parent.Equipped:Connect(function(mouse)
    canReload = true
    ammoGui.Text = ammo.." / "..maxAmmo

    canIdle = true

    script.Parent.Unequipped:Connect(function()
        canIdle = false
        canReload = false
        canShoot = false
        shooting = false

        ammoGui.Text = "---"

        equipAnim:Stop()
        idleAnim:Stop()
        shootAnim:Stop()
    end)

    humanoid.Died:Connect(function()
        canReload = false
        canIdle = false
        canShoot = false
        shooting = false
    end)

    equipAnim:Play()

    wait(equipAnim)

    if canIdle then
        idleAnim:Play()
    end

    local function Reload()
        if canReload then
            ammoGui.Text = "---"
            reloading = true
            reloadAnim:Play()

            wait(reloadAnim.Length)

            ammo = maxAmmo
            ammoGui.Text = ammo.." / "..maxAmmo
            reloading = false
        end
    end

    mouse.Button1Down:Connect(function()
        if not canStillShoot then return end
        canStillShoot = false
        canShoot = true
        mouse.Button1Up:Connect(function()
            shooting = false
            canShoot = false

            canStillShoot = true
        end)

        if canShoot and ammo > 0 and not reloading then
            canShoot = false
            shooting = true

            while shooting and not reloading do
                ammo = ammo - 1
                ammoGui.Text = ammo.." / "..maxAmmo

                canShoot = false

                shootAnim:Play()

                humanoid.Running:Connect(function(speed)
                    if speed <= 0 then
                        isRunning = true
                        spread = 6
                        print("Running")
                    end
                end)

                if not isRunning then
                    if humanoid:GetState() == Enum.HumanoidStateType.None then
                        spread = 3
                        print("None")
                    elseif humanoid:GetState() == Enum.HumanoidStateType.Jumping or humanoid:GetState() == Enum.HumanoidStateType.FallingDown or  humanoid:GetState() == Enum.HumanoidStateType.Freefall then
                        spread = 12
                        print("Jumping")
                    else
                        spread = 3
                        print("Else")
                    end
                end

                local ranSpreadX, ranSpreadY, ranSpreadZ = math.random(-spread, spread), math.random(-spread, spread), math.random(-spread, spread)

                game.ReplicatedStorage:WaitForChild("RemoteEvents"):WaitForChild("RaycastEvent"):FireServer(script.Parent:WaitForChild("Flame").Position, mouse.Hit.Position, math.random(2,8), Vector3.new(ranSpreadX, ranSpreadY, ranSpreadZ))

                wait(shootAnim.Length)

                canShoot = true
            end
        elseif not reloading and canShoot then
            Reload()
        end
    end)

    userInputService.InputBegan:Connect(function(input)
        if input.KeyCode == Enum.KeyCode.R and not reloading then
            Reload()
        end
    end)
end)
0
Put a debounce! Preferably right at the start of the part where you shoot. radiant_Light203 1166 — 2y
0
It worked! Thanks a lot! ColdFoxy07 76 — 2y

1 answer

Log in to vote
0
Answered by 2 years ago

It was fixed by radiant_Light203! All I did was add a debounce at the shooting part and it worked fine!

Ad

Answer this question