✓ Accepted answer
I suggest you use UserInputService since ContextActionService fires on InputBegan and InputEnded. That means that the function KeyPressed will be called two times; once when you press the key, and once when you release the key.
I also made a setDebounce function to reduce the boilerplate code. This should work exactly as you've inteded it to work.
The variable Pressed was also unnecessary. You only need one if statement with one Debounce variable.
You were setting the debounce variable inside the first if statement, but when the 5 seconds wait was over the compiler would go line to line and execute the next if statement in the same function call. Using 1 if statement fixed this problem.
if not debounce then
humanoid:EquipTool(sword)
setDebounce()
else
humanoid:UnequipTools(sword)
setDebounce()
end
Here is the complete script.
local replicatedStorage = game:GetService("ReplicatedStorage")
local playersService = game:GetService("Players")
local userInputService = game:GetService("UserInputService")
local player = playersService.LocalPlayer
local character = player.Character
local humanoid = character:WaitForChild("Humanoid")
local sword = replicatedStorage:FindFirstChild("Sword")
local debounce = false
local function setDebounce()
debounce = true
wait(5)
debounce = false
end
userInputService.InputBegan:Connect(function(input)
if input.KeyCode == Enum.KeyCode.Z then
if not debounce then
humanoid:EquipTool(sword)
setDebounce()
else
humanoid:UnequipTools(sword)
setDebounce()
end
end
end)
Please feel free to ask any questions you might have about my solution, and how I came up with it.
1 comment
Thanks dude!