I have keybinds that I want to disable when the player is typing in the chat. I already have a way how. I just need a way to detect when a player is typing.
Hi there, the second formal parameter of the UserInputService Input...
signals (which I’m presuming you’re using) is bound to a bool describing if that input was observed by the game engine (in the context of some UI process or otherwise).
ContextActionService takes care of this for you; I’d recommend using it for keybinds that need to be context-sensitive like this.
The input is done through a local script within the StarterCharacterScripts folder.
This is how you would use the parameter mentioned by @thatsaniceROOT
UserInputService.InputBegan:Connect(function(key,chatting)
if chatting then return end
end)
you can use the UserInputServiceLike this
local userInputService =game:GetService("UserInputService")
userInputService.InputBegan:Connect(function(input,gameProcessedEvent)
if not gameProcessedEvent then
-player is typing
end
end
this is not correct the first parameter is the input object and the second is gameProcessedEvent you can read about it here UserInputService | Documentation - Roblox Creator Hub
Yes, I am aware what it is, but for readability and ease of understanding I changed the name. I am not sure why this is a big issue?
how is key more readable than input? input is a table object, key sounds more like an index
I do not mean key like dictionary key,
I mean key like key pressed.
well thats wrong anyway lol, its not that to check the key you would have to do input.UserInputType, and its not only keys passed, mouse movements, gamepads inputs, and so on can also be passed
I realize, but for this particular use case, OP is asking for keybinds.
I tried both scripts. And both work fine, I guess its all the matter of optimization.
I only changed the variable names as said before, for ease of understanding.
I think it’s less understandable to use the word key
as the parameter for the InputObject than input, so I have to take @RomeoEDD’s side here. He’s not wrong in when he says that it’s
- Wrong.
- Less readable than input.
Using the variable key gives a wrong impression about what’s actually passed to UserInputService events, which is an object that describes the nature of the input across several levels - state, type, position, so on. Key doesn’t make sense because a key isn’t being passed.
Even if it’s for the sake of simplifying or understanding, key isn’t a simplification equivalent for the InputObject. The proper concept to be teaching individuals when referencing the event is input
and it should not be introduced in any other way because that sprouts misconception early on.
Key is more appropriate for the deprecated Mouse.KeyDown or a table indice. Not the InputObject.
The script’s location doesn’t invalidate @thatsaniceROOT’s suggestion. ContextActionService automatically handles input conditions and voids input when something internally is listening to that input type. It’s the same as not processing an event when using UserInputService and seeing if GameProcessedEvent is true, but it does this internally for you.
Would you have to manually set a variable for chat bar or is there a faster way?
example:
for _, bar in pairs(LP.PlayerGui:WaitForChild('Chat'):GetDescendants()) do
if bar:IsA('TextBox') and bar.Name == 'ChatBar' then
if bar:IsFocused() then -- not sure how to use the API as ive never seen it before
-- code here
end
end
end