PT-BR/bindKey: Difference between revisions
mNo edit summary |
m (Adicionado comentários no Exemplo 4) |
||
Line 139: | Line 139: | ||
function (player, cmd, ...) | function (player, cmd, ...) | ||
local conta = getPlayerAccount(player) | local conta = getPlayerAccount(player) | ||
if isGuestAccount(conta) then return end | -- Se algum jogador não usar a tecla e preferir pelo comando, estará apto à esta verificação a seguir | ||
if not (isObjectInACLGroup('user.'..getAccountName(conta), aclGetGroup('Admin'))) then return end | if isGuestAccount(conta) then return end -- Se for conta 'guest' então o código a seguir deste é cancelado | ||
if not (isObjectInACLGroup('user.'..getAccountName(conta), aclGetGroup('Admin'))) then return end -- Se não estiver no grupo da ACL Admin, então o código a partir deste é cancelado | |||
for _, v in ipairs(getElementsByType('player')) do | for _, v in ipairs(getElementsByType('player')) do | ||
-- Neste loop por todos os jogadores é obtido a conta de cada um e é verificado se a conta não é 'guest'e se está no grupo da ACL Admin | |||
-- Então a mensagem que o 'player' enviou, aparecerá para todos os que estiverem no grupo da ACL e para ele próprio (já que ele está neste grupo rs) | |||
local conta = getPlayerAccount(v) | local conta = getPlayerAccount(v) | ||
if not isGuestAccount(conta) then | if not isGuestAccount(conta) then | ||
Line 153: | Line 156: | ||
) | ) | ||
addEventHandler('onResourceStart', resourceRoot, | addEventHandler('onResourceStart', resourceRoot, -- Quando o resource iniciar, a tecla de todos os que estiverem no grupo da ACL Admin serão vinculadas ao chatbox | ||
function () | function () | ||
for i, v in ipairs(getElementsByType('player')) do | for i, v in ipairs(getElementsByType('player')) do | ||
Line 166: | Line 169: | ||
) | ) | ||
addEventHandler('onPlayerLogin', root, | addEventHandler('onPlayerLogin', root, -- Se um jogador logar e a conta que ele logou estiver no grupo da ACL Admin, a tecla dele será vinculada ao chatbox | ||
function (_, acc) | function (_, acc) | ||
if (isObjectInACLGroup('user.'..getAccountName(acc), aclGetGroup('Admin'))) then | if (isObjectInACLGroup('user.'..getAccountName(acc), aclGetGroup('Admin'))) then |
Revision as of 04:51, 21 May 2020
Esta função vincula uma tecla do jogador para uma função ou comando, que será acionado quando a tecla for pressionada.
Sintaxe
bool bindKey ( player oJogador, string Tecla, string Estado, function Funcao, [ var Argumentos, ... ] )
Argumentos Necessários
- oJogador: O jogador que você quer vincular a tecla.
- Tecla: A tecla ou controle que você quer vincular à função. Veja nomes de teclas para uma lista de possíveis teclas e nomes de controles para uma lista de possíveis controles.
- Estado: Uma string que tem um dos seguintes valores:
- "up": Se a tecla vinculada deve acionar a função quando ela é liberada(desapertada)
- "down": Se a tecla vinculada deve acionar a função quando ela é pressionada
- "both": Se a tecla vinculada deve acionar a função quando ela é pressionada e liberada
- Funcao: A função que vai ser acionada quando a tecla do jogador for pressionada/liberada. Esta função deve ter o seguinte formato(parâmetros):
function functionName ( player Pressionador, string Tecla, string Estado, [ var Argumentos, ... ] )
- Os valores passados para esta função são:
- Pressionador: O jogador que pressionou a tecla
- Tecla: A tecla que foi pressionada
- Estado: O estado da tecla que foi pressionada (down, up ou both)
- Argumentos: Os argumentos opcionais que você especificou quando usou bindKey.
Esta sintaxe alternativa permite você vincular uma tecla à um comando. Isto também vai permitir que os usuários modifiquem os controles em seus menus de configurações. Use em conjunção com addCommandHandler para adicionar o vínculo da tecla (que é um comando) à uma função.
bool bindKey ( player oJogador, string Tecla, string Estado, string NomeComando, [ string Argumentos, ... ] )
Argumentos Necessários
- oJogador: O jogador que você vai vincular a tecla.
- Tecla: A tecla ou controle que você quer vincular ao comando. Veja nomes de teclas para uma lista de possíveis teclas.
- Estado: Uma string que tem um dos seguintes valores:
- "up": Se a tecla vinculada deve acionar a função quando ela é liberada(desapertada)
- "down": Se a tecla vinculada deve acionar a função quando ela é pressionada
- "both": Se a tecla vinculada deve acionar a função quando ela é pressionada e liberada
- NomeComando: O nome do comando em que a tecla deverá ser vinculada.
Argumentos Opcionais
- Argumentos: Argumentos (string) que serão usados no comando como se estivesse digitando este comando com estes argumentos. Ex.: /comando argumento1 argumento2 etc
bool bindKey ( string Tecla, string Estado, function Funcao, [ var Argumentos, ... ] )
Argumentos Necessários
- Tecla: A tecla ou controle que será vinculado à função. Veja nomes de teclas para uma lista de possíveis teclas e nomes de controles para uma lista de possíveis controles.
- Estado: Uma string que tem um dos seguintes valores:
- "up": Se a tecla vinculada deve acionar a função quando ela é liberada(desapertada)
- "down": Se a tecla vinculada deve acionar a função quando ela é pressionada
- "both": Se a tecla vinculada deve acionar a função quando ela é pressionada e liberada
- Funcao: A função que será acionada quando a tecla for pressionada. Esta função deve ter o seguinte formato(parâmetros):
function functionName ( string Tecla, string Estado, [ var Argumetnos, ... ] )
- Os valores passados para esta função são:
- Tecla: A tecla que foi pressionada
- Estado: O estado da tecla que foi pressionada (down, up ou both)
- Argumentos: Os argumentos opcionais que você especificou quando usou bindKey.
Esta sintaxe alternativa permite você vincular uma tecla à um comando. Isto também vai permitir que os usuários modifiquem os controles em seus menus de configurações. Use em conjunção com addCommandHandler para adicionar o vínculo da tecla (que é um comando) à uma função.
bool bindKey ( string Tecla, string Estado, string NomeComando, [ string Argumentos, ...] )
Argumentos Necessários
- Tecla: A tecla ou controle que será vinculado ao comando. Veja nomes de teclas para uma lista de possíveis teclas.
- Estado: Um string que tem um dos seguintes valores:
- "up": Se a tecla vinculada deve acionar a função quando ela é liberada(desapertada)
- "down": Se a tecla vinculada deve acionar a função quando ela é pressionada
- "both": Se a tecla vinculada deve acionar a função quando ela é pressionada e liberada
- NomeComando: Nome do comando em que a tecla será vinculada.
- Argumentos: Argumentos (string) que serão usados no comando como se estivesse digitando este comando com estes argumentos. Ex.: /comando argumento1 argumento2 etc
Argumentos Opcionais
NOTA: Ao usar argumentos opcionais, pode ser necessário fornecer todos os argumentos anteriores ao que você deseja usar. Para obter mais informações sobre argumentos opcionais, consulte Argumentos Opcionais.
- Argumentos: Qualquer argumento que você queira passar para a função quando a tecla for pressionada pelo usuário. Qualquer número de argumentos pode ser especificado, cada um sendo passado para a função designada. Você não pode passar funções.
Retorna
Retorna true se a tecla foi vinculada, senão retorna false.
Exemplos
Exemplo 1
Este exemplo vai vincular a tecla 'F1' do jogador e o controle 'fire' à uma função que mostra no chat alguns status.
function funcInput ( player, key, keyState ) outputChatBox ( getPlayerName ( player) .. " " .. (keyState == "down" and "pressionado" or "liberado") .. " a tecla " .. key .. " !" ) end function bindTheKeys ( player, commandName ) bindKey ( player, "F1", "down", funcInput ) bindKey ( player, "F1", "up", funcInput ) bindKey ( player, "fire", "both", funcInput ) end addCommandHandler ( "bindme", bindTheKeys )
Exemplo 2
Este exemplo vai vincular a tecla 'F1' do jogador e o controle 'fire' à uma função que mostra no chat alguns status, no lado cliente.
function funcInput ( key, keyState ) outputChatBox( "Você " .. (keyState == "down" and "pressionou" or "liberou") .. " a tecla " .. key .. " !" ) end function bindTheKeys ( commandName ) bindKey( "F1", "down", funcInput ) bindKey( "F1", "up", funcInput ) bindKey( "fire", "both", funcInput ) end addCommandHandler ( "bindme", bindTheKeys )
Exemplo 3
Este exemplo diz quão legal é o MTA se o jogador se mover para frente.
function fanFunction() bindKey (source,"forwards","down", function(player,key,state) outputChatBox (getPlayerName (player) .. "#FFFF00 acha o MTA muito legal.",getRootElement(),255,255,0,true) end ) end addEventHandler ("onPlayerLogin",getRootElement(),fanFunction)
Exemplo 4
Este exemplo cria um input personalizado no chatbox e vincula a tecla para os jogadores que estiverem no grupo da ACL Admin quando logam e também quando o resource inicia, e somente quem estiver neste grupo poderá ver a mensagem.
addCommandHandler('AdminChat', function (player, cmd, ...) local conta = getPlayerAccount(player) -- Se algum jogador não usar a tecla e preferir pelo comando, estará apto à esta verificação a seguir if isGuestAccount(conta) then return end -- Se for conta 'guest' então o código a seguir deste é cancelado if not (isObjectInACLGroup('user.'..getAccountName(conta), aclGetGroup('Admin'))) then return end -- Se não estiver no grupo da ACL Admin, então o código a partir deste é cancelado for _, v in ipairs(getElementsByType('player')) do -- Neste loop por todos os jogadores é obtido a conta de cada um e é verificado se a conta não é 'guest'e se está no grupo da ACL Admin -- Então a mensagem que o 'player' enviou, aparecerá para todos os que estiverem no grupo da ACL e para ele próprio (já que ele está neste grupo rs) local conta = getPlayerAccount(v) if not isGuestAccount(conta) then if (isObjectInACLGroup('user.'..getAccountName(conta), aclGetGroup('Admin'))) then outputChatBox('#FFFFFF[Chat Admin] '..getPlayerName(player)..'#FFFFFF: '..tostring(table.concat(arg, " ")), v, 0, 0, 0, true) end end end end ) addEventHandler('onResourceStart', resourceRoot, -- Quando o resource iniciar, a tecla de todos os que estiverem no grupo da ACL Admin serão vinculadas ao chatbox function () for i, v in ipairs(getElementsByType('player')) do local conta = getPlayerAccount(v) if not isGuestAccount(conta) then if (isObjectInACLGroup('user.'..getAccountName(conta), aclGetGroup('Admin'))) then bindKey(v, 'U', 'down', 'chatbox', 'AdminChat') end end end end ) addEventHandler('onPlayerLogin', root, -- Se um jogador logar e a conta que ele logou estiver no grupo da ACL Admin, a tecla dele será vinculada ao chatbox function (_, acc) if (isObjectInACLGroup('user.'..getAccountName(acc), aclGetGroup('Admin'))) then bindKey(source, 'U', 'down', 'chatbox', 'AdminChat') end end )
Agradecimento ao Developer(nick na imagem) por ter testado o código*
Veja também
- addCommandHandler
- bindKey
- executeCommandHandler
- getCommandHandlers
- getFunctionsBoundToKey
- getKeyBoundToFunction
- isControlEnabled
- removeCommandHandler
- toggleAllControls
- toggleControl
- unbindKey