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

How add a cooldown for an ability script that works in conjunction with a module script?

Asked by 2 years ago
Edited 2 years ago

Basically what I wrote in the question is what I need help on. I tried to add a cooldown in the module script then get it from the local script but I get this error

21:01:18.542 Players.Funnyskyswagway3.PlayerScripts.Keybinds:10: attempt to index nil with ‘Cooldown’ - Client - Keybinds:10

Local Script:

local GameFolder = game.ReplicatedStorage.GameFolder
local Modules = GameFolder.Modules
local PearlModule = require(Modules.PearlAbilities)
local Debounce = true

local UserInputService = game:GetService("UserInputService")
UserInputService.InputBegan:Connect(function(hit, chat)
    if chat then return end
    local ActivateAbility = PearlModule[hit.KeyCode] 
    local Cooldown = ActivateAbility.Cooldown
    if ActivateAbility and Debounce == true then
        Debounce = false
        ActivateAbility.Activate()
        wait(Cooldown)
        Debounce = true
    end
end)

Module Script:

local TweenService = game:GetService("TweenService")
local Player = game.Players.LocalPlayer
local Character = Player.Character or Player.CharacterAdded:wait()
local Abilitys = {
    [Enum.KeyCode.Q] = {
        Activate = function()
            local Gem = Player.Character:WaitForChild("Gem")


            if Gem.Light.Brightness == 0 then
                Gem.Material = Enum.Material.Neon
                TweenService:Create(Gem.Light,TweenInfo.new(1), {Brightness = 10} ):Play() 

            else
                Gem.Material = Enum.Material.SmoothPlastic
                TweenService:Create(Gem.Light,TweenInfo.new(0.5), {Brightness = 0} ):Play()
            end

        end,
    }

}
return Abilitys

1 answer

Log in to vote
0
Answered by 2 years ago
Edited 2 years ago

You reference cooldown with the table in the modulescript, but It doesnt have a cooldown.

The part that Im talking about is

Abilitys[Enum.KeyCode.Q]

Cooldown tries to find a cooldown inside of the table, even though it doesnt exist

Im just going to copy your code and add a cooldown so you can understand

local Abilitys = {}

local keyQ = Abilitys[Enum.KeyCode.Q]

keyQ.Activate = function()
    local Gem = Player.Character:WaitForChild("Gem")

     if Gem.Light.Brightness == 0 then
        Gem.Material = Enum.Material.Neon
        TweenService:Create(Gem.Light,TweenInfo.new(1), {Brightness = 10} ):Play()
    else
         Gem.Material = Enum.Material.SmoothPlastic
        TweenService:Create(Gem.Light,TweenInfo.new(0.5), {Brightness = 0} ):Play()
    end
end

keyQ.Cooldown = --whatever you want your cooldown to be

I recommend you write it in the way I do to make it easier to read

using .to create a function or [] is the same as what you did

You can just copy this into your modulescript, and it should work

Hope I helped!

Ad

Answer this question