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

Why is the 'mouse' nil in this script?

Asked by 6 years ago
Edited 6 years ago

Line 23 is where the error comes in saying 'mouse is nil'. Go test it.

--//Variables
local plr = game.Players.LocalPlayer
local tool = script.Parent.Parent
local hole = tool.Hole
local handle = tool.Handle
local debounce = true
local config = tool.Config
local range = config.Range
local dmg = config.Damage
local coolDown = config.CoolDown
local clips = config.Clips
local ammo = config.Ammo
local maxAmmo = config.MaxAmmo
local allowTracing = config.AllowTracing

--//Events
tool.Equipped:connect(function()
    tool.Activated:connect(function(mouse)
        if debounce then
            --//Doesn't allow spamming
            debounce = false
            --//Ray Get, Set
local ray = Ray.new(hole.CFrame.p (mouse.Hit.p - hole.CFrame.p*range.Value) --ERROR

local hit, position = workspace:FindPartOnRay(ray, plr.Character, false, true)

            if allowTracing.Value == true then
                --//Make "part
                local trace = Instance.new("Part", workspace)
                trace.Material = Enum.Material.Neon
                trace.BrickColor = BrickColor.new("Orange")
                trace.CanCollide = false
                trace.Anchored = true
                trace.Transparency = 0.5

                --//Show Direction
                local distance = (hole.CFrame.p - position).magnitude
                trace.Size = Vector3.new(0.2,0.2, distance)
                trace.CFrame = CFrame.new(hole.CFrame.p,position) * CFrame.new(0, 0, -distance/2)

                --//Remove Debris
                game:GetService("Debris"):AddItem(trace, 0.1)
            end

            --//Hit Detection
            if hit then
                local humanoid = hit.Parent:FindFirstChild("Humanoid")
                if humanoid then
                    if hit.Name == "Head" then
                        --//Double damage on headshots
                        humanoid:TakeDamage(dmg.Value*2)
                    else
                        --//Normal damage on body shots
                        humanoid.TakeDamage(dmg.Value)
                    end
                end
            end

            wait(coolDown.Value)
            debounce = true
        end
    end)
end)

1 answer

Log in to vote
0
Answered by
xPolarium 1388 Moderation Voter
6 years ago

It's been a long while since I've worked with tools (Just don't use them if you're confident in making your own tool system) but I do know you're doing things you don't have to do.

First of all, you're putting the Activated() event inside an Equipped() event when Activated() fires only if the player has clicked AND while the tool is already equipped.

Wiki page on the Activated event.

The other problem is that mouse isn't defined in the Activated() event. That argument isn't found in this event (See wiki again). What you can do is just define it using a local variable since you also define the LocalPlayer.

--//Variables
local plr = game.Players.LocalPlayer
local mouse = plr:GetMouse() --Getting the mouse from the player

local tool = script.Parent.Parent
local hole = tool.Hole
local handle = tool.Handle
local debounce = true
local config = tool.Config
local range = config.Range
local dmg = config.Damage
local coolDown = config.CoolDown
local clips = config.Clips
local ammo = config.Ammo
local maxAmmo = config.MaxAmmo
local allowTracing = config.AllowTracing

--//Events
tool.Activated:connect(function()
    if debounce then
        --//Doesn't allow spamming
        debounce = false
        --//Ray Get, Set
        local ray = Ray.new(hole.CFrame.p (mouse.Hit.p - hole.CFrame.p*range.Value)
        --This time it shouldn't error

        local hit, position = workspace:FindPartOnRay(ray, plr.Character, false, true)

        if allowTracing.Value == true then
            --//Make "part
            local trace = Instance.new("Part", workspace)
            trace.Material = Enum.Material.Neon
            trace.BrickColor = BrickColor.new("Orange")
            trace.CanCollide = false
            trace.Anchored = true
            trace.Transparency = 0.5

            --//Show Direction
            local distance = (hole.CFrame.p - position).magnitude
            trace.Size = Vector3.new(0.2,0.2, distance)
            trace.CFrame = CFrame.new(hole.CFrame.p,position) * CFrame.new(0, 0, -distance/2)

            --//Remove Debris
            game:GetService("Debris"):AddItem(trace, 0.1)

        end

        --//Hit Detection
        if hit then
            local humanoid = hit.Parent:FindFirstChild("Humanoid")
            if humanoid then
                if hit.Name == "Head" then
                    --//Double damage on headshots
                    humanoid:TakeDamage(dmg.Value*2)
                else
                    --//Normal damage on body shots
                    humanoid.TakeDamage(dmg.Value)
                end
            end
        end

        wait(coolDown.Value)
        debounce = true
    end
end)



Ad

Answer this question