I’ve been wondering for a while now(note that I haven’t tried) how does one fire a function only if two buttons are pressed at the same time. I’m looking more for like an example(client sided only is fine, I’ll implement it into my frame work)
Something like this could work.
Basically you just check UserInputService and listen for whatever 2 keys you want, and if they’re pressed…Then you do stuff.
Hope this helps.
Edit: Refer to @suremark 's reply, or better yet @qqtt991, he shows some nice code.
Also I learned something new today.
local UserInputService = game:GetService("UserInputService")
UserInputService.InputBegan:Connect(function(InputObject, Processed)
if InputObject.KeyCode == Enum.KeyCode.E and InputObject.KeyCode == Enum.KeyCode.Q then
print("You pressed two keys at once")
-- Do stuff here
end
end)
Unfortunately that wouldn’t work. A single InputObject can’t have two equivalent KeyCodes—it will only have one unique KeyCode.
To get around this, you could store the state of those keys in outside variables (for example, as Boolean values stored in variables named Q_Down and E_Down). Then, each time the player presses one of those keys, update the variables and check if both are down.
Ah. Yeah my code was untested. Should’ve stated that.
When one of the two keys are pressed, you should check if the other key is also being pressed at that time. Note that you should check input.Keycode at this time, and just not check IsKeyDown on both keys, because otherwise whenever InputBegan fires, if both keys are held down, it would run the code again despite the user not re-pressing the key combination.
local UIS = game:GetService("UserInputService")
UIS.InputBegan:Connect(function(input, gameProcessedEvent)
if (input.KeyCode == Enum.KeyCode.E and UIS:IsKeyDown(Enum.KeyCode.R)) or (input.KeyCode == Enum.KeyCode.R and UIS:IsKeyDown(Enum.KeyCode.E)) then
print("Wow")
end
end)
thank you, here is a solution for a reward.
I’m just realizing this because I forgot myself but there needs to be and not gameProcessedEvent as well so it doesn’t work while a player is chatting.
Just add that in?
Obviously lol.
Whouldnt that make it so if you hold ‘E’ and you press ‘R’ it whould still function? Cause i wanted my script to detect if they press it at the actual same time (like they have to time it) so cant i just replace ‘IsKeyDown’ with the normal one? Or whould it not work??
IDK. Add wait() after press first button into it?
this should do the trick
no you can just press both at the same time and then roblox will detect it
but well is more simple to use keyisdown with keycode instead
You could add a line of code using the tick() to detect if both have been pressed in a certain time
Gonna post what worked for me in determining if 1 of the two buttons were pressed or if two of the buttons were pressed:
local UIS = game:GetService("UserInputService")
local aKey = false
local dKey = false
UIS.InputBegan:Connect(function(input, gameProcessedEvent)
if input.UserInputState == Enum.UserInputState.Begin then
if (input.KeyCode == Enum.KeyCode.A) or UIS:IsKeyDown(Enum.KeyCode.A) then
aKey = true
task.wait()
if (input.KeyCode == Enum.KeyCode.D) or UIS:IsKeyDown(Enum.KeyCode.D) then
dKey = true
end
elseif (input.KeyCode == Enum.KeyCode.D) or UIS:IsKeyDown(Enum.KeyCode.D) then
dKey = true
task.wait()
if (input.KeyCode == Enum.KeyCode.A) or UIS:IsKeyDown(Enum.KeyCode.A) then
aKey = true
end
end
end
end)
UIS.InputEnded:Connect(function(input, gameProcessedEven)
if input.UserInputState == Enum.UserInputState.End then
if aKey == true and dKey == true then
print ("Both")
aKey = false dKey = false
elseif aKey == true and dKey == false then
print ("A")
aKey = false dKey = false
elseif aKey == false and dKey == true then
print ("D")
aKey = false dKey = false
end
end
end)
This has already been stated above, ignore the first post, I wasn’t looking at UIS:IsKeyDown().
i tried using it for a sprint local script with an FOV change in it but it doesnt seem to work?
local inputService = game:GetService(“UserInputService”)
local playerService = game:GetService(“Players”)
local tweenService = game:GetService(“TweenService”)
local plr = playerService.LocalPlayer
local char = plr.Character or plr.CharacterAdded:wait()
local settingsDir = script.Settings
function getSetting (name)
return settingsDir and settingsDir:FindFirstChild(name) and settingsDir[name].Value
end
local normalSpeed = getSetting(“Walking speed”) or 9
local sprintSpeed = getSetting(“Running speed”) or 25
local sprinting = false
inputService.InputBegan:Connect(function(InputObject, Processed)
if InputObject.KeyCode == Enum.KeyCode.LeftShift and InputObject.KeyCode == Enum.KeyCode.W then
local running = true
if char.Humanoid then
char.Humanoid.WalkSpeed = sprintSpeed
tweenService:Create(workspace.Camera, TweenInfo.new(0.35), {FieldOfView = 57}):Play()
end
end
end)
inputService.InputEnded:Connect(function(InputObject, Processed)
if InputObject.KeyCode == Enum.KeyCode.LeftShift and InputObject.KeyCode == Enum.KeyCode.W then
local running = false
if char.Humanoid then
char.Humanoid.WalkSpeed = normalSpeed
tweenService:Create(workspace.Camera, TweenInfo.new(0.5), {FieldOfView = 70}):Play()
end
end
end)