PT-BR/bindKey: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
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

Click to collapse [-]
Servidor - Sintaxe 1
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.
Click to collapse [-]
Servidor - Sintaxe 2

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
Click to collapse [-]
Cliente - Sintaxe 1
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.
Click to collapse [-]
Cliente - Sintaxe 2

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

Click to collapse [-]
Servidor

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

Click to collapse [-]
Cliente

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

Click to collapse [-]
Servidor

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

Click to collapse [-]
Servidor

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