BindKey: Difference between revisions
Jump to navigation
Jump to search
Line 48: | Line 48: | ||
else | else | ||
outputChatBox ( getClientName ( source ) .. " has stopped using the handbrake!" ) | outputChatBox ( getClientName ( source ) .. " has stopped using the handbrake!" ) | ||
end | |||
end | |||
</syntaxhighlight> | |||
'''Example 3:''' This example shows how you can support moddifier keys, i.e. two keys held at once. | |||
<syntaxhighlight lang="lua"> | |||
addEventHandler ( "onPlayerJoin", getRootElement(), "playerJoin" ) | |||
function playerJoin () | |||
bindKey ( source, "lshift", "down", "keyPressed", "lshiftKey", "1" ) | |||
bindKey ( source, "lshift", "up", "keyPressed", "lshiftKey", "0" ) | |||
bindKey ( source, "q", "down", "keyPressed", "qKey", "1" ) | |||
bindKey ( source, "q", "up", "keyPressed", "qKey", "0" ) | |||
end | |||
-- Called when either of the two bound keys are pressed | |||
addCommandHandler ( "keyPressed", "keyPressed" ) | |||
function keyPressed( source, commandName, keyName, isDown ) | |||
setElementData ( source, keyName, isDown ) | |||
end | |||
-- Call this function every 100ms to check for players keys. Could be sped up by caching the players table and updating that only onPlayerJoin and onPlayerQuit. | |||
setTimer ( "keyProcess", 100, 0 ) | |||
function keyProcess ( ) | |||
players = getElementsByType ( "player" ) | |||
for playerKey, playerValue in players do | |||
checkPlayerKeys ( playerValue ) | |||
end | |||
end | |||
-- Called for each player to check if they're pressing shift + q | |||
function checkPlayerKeys ( thePlayer ) | |||
if ( getElementData ( thePlayer, "lshift" ) == 1 and getElementData ( thePlayer, "q" ) == 1 ) then | |||
outputChatBox ( thePlayer, "Shift + Q pressed!" ) | |||
end | end | ||
end | end |
Revision as of 14:06, 12 July 2006
Binds a player's key to a console command, which will be triggered when the key is pressed.
Syntax
bindKey ( player thePlayer, string key, [ string keyState ], string command, [ string arguments ] )
Required Arguments
- thePlayer: The player you wish to bind the key of.
- key: The key or control you wish to bind to the command. See Key names for a list of possible keys and control names for a list of possible controls.
- command: The command that will be triggered when the player's key is pressed. See Control names for a list of GTA keys that can be used.
Optional Arguments
- keyState: A string containing the word "up" or "down" determining when the binded command will be called. Defaults to "down" if not specified.
- arguments: Any arguments you may want to pass to the command handler.
Example
Example 1: This example will bind a player's 'F1' key to a pair of console command.
addCommandHandler ( "bindme", "bindthekeys" ) function bindthekeys ( source ) bindKey ( source, "F1", "down", "keydown" ) -- bind the player's F1 down key bindKey ( source, "F1", "up", "keyup" ) -- bind the player's F1 up key end addCommandHandler ( "keydown", "keydown" ) function keydown ( source ) outputChatBox ( getClientName ( source ).." pressed the F1 key" ) end addCommandHandler ( "keyup", "keyup" ) function keyup ( source ) outputChatBox ( getClientName ( source ).." let go of the F1 key" ) end
Example 2: This example will bind a player's handbrake key to a console command. This takes advantage of the fact you can bind a key to a controller function, so that whatever key the player has bound locally this will work. This allows reliable notification as to when the player is pressing a particular key in-game. An easier, lower bandwidth but less reliable method is to use getControlState.
addEventHandler ( "onPlayerJoin", getRootElement(), "playerJoin" ) function playerJoin () bindKey ( source, "handbrake", "down", "handbrakePressed", "1" ) bindKey ( source, "handbrake", "up", "handbrakePressed", "0" ) end addCommandHandler ( "handbrakePressed", "handbrakePressed" ) function handbrakePressed ( source, commandName, isDown ) if ( isDown == "1" ) outputChatBox ( getClientName ( source ) .. " is using the handbrake!" ) else outputChatBox ( getClientName ( source ) .. " has stopped using the handbrake!" ) end end
Example 3: This example shows how you can support moddifier keys, i.e. two keys held at once.
addEventHandler ( "onPlayerJoin", getRootElement(), "playerJoin" ) function playerJoin () bindKey ( source, "lshift", "down", "keyPressed", "lshiftKey", "1" ) bindKey ( source, "lshift", "up", "keyPressed", "lshiftKey", "0" ) bindKey ( source, "q", "down", "keyPressed", "qKey", "1" ) bindKey ( source, "q", "up", "keyPressed", "qKey", "0" ) end -- Called when either of the two bound keys are pressed addCommandHandler ( "keyPressed", "keyPressed" ) function keyPressed( source, commandName, keyName, isDown ) setElementData ( source, keyName, isDown ) end -- Call this function every 100ms to check for players keys. Could be sped up by caching the players table and updating that only onPlayerJoin and onPlayerQuit. setTimer ( "keyProcess", 100, 0 ) function keyProcess ( ) players = getElementsByType ( "player" ) for playerKey, playerValue in players do checkPlayerKeys ( playerValue ) end end -- Called for each player to check if they're pressing shift + q function checkPlayerKeys ( thePlayer ) if ( getElementData ( thePlayer, "lshift" ) == 1 and getElementData ( thePlayer, "q" ) == 1 ) then outputChatBox ( thePlayer, "Shift + Q pressed!" ) end end
See Also
- addCommandHandler
- bindKey
- executeCommandHandler
- getCommandHandlers
- getFunctionsBoundToKey
- getKeyBoundToFunction
- isControlEnabled
- removeCommandHandler
- toggleAllControls
- toggleControl
- unbindKey