BindKey

From Multi Theft Auto: Wiki
Revision as of 16:58, 9 October 2006 by Vandalite (talk | contribs)
Jump to navigation Jump to search

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 when the key is pressed by the user. all arguments go into one string. the command handler will split them up into separate arguments later.

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", "funKeydown" )
function funKeydown ( source )
  outputChatBox ( getClientName ( source ).." pressed the F1 key" )
end

addCommandHandler ( "keyup", "funcKeyup" )
function funcKeyup ( 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