Jump to content

[ RESOLVIDO ] Attempt to index local


Recommended Posts

Olá, eu tentei fazer um prender por nick, porem nao sei qual é o problema que aconteceu, linha 7 attempt to index local"name"( a user data value), sendo que em outros funções desse script na versão completa funciona tudo correto

  
function getPlayerFromPartialName(name) 
    local name = name and name:gsub("#%x%x%x%x%x%x", ""):lower() or nil 
    if name then 
        for _, player in ipairs(getElementsByType("player")) do 
            local name_ = getPlayerName(player):gsub("#%x%x%x%x%x%x", ""):lower() 
            if name_:find(name, 1, true) then 
                return player 
            end 
        end 
    end 
end 
  
function prender(nick, thePlayer) 
if nick then 
        if getPlayerFromPartialName ( nick ) then 
            local accName = getAccountName ( getPlayerAccount ( thePlayer ) ) 
            if isObjectInACLGroup ("user."..accName, aclGetGroup ( "ComandosPolicia") ) then 
            local prisioneiroparcial = getPlayerFromPartialName( nick ) 
            local nickdojogador = getPlayerName (prisioneiroparcial) 
            local nickdopolicial = getPlayerName( thePlayer ) 
            local prisioneirox, prisioneiroy, prisioneiroz = getElementPosition (prisioneiroparcial) 
            local policiax, policiay, policiaz = getElementPosition (nickdopolicial) 
            local Dist = getDistanceBetweenPoints3D ( prisioneirox, prisioneiroy, prisioneiroz, policiax, policiay, policiaz ) 
            local niveldeprocurado = getPlayerWantedLevel (prisioneiroparcial) 
            if ( Dist < 3 ) then 
            if ( niveldeprocurado > 0 ) then 
            outputChatBox("#000000[#FC0303POLICIA#000000]#A09E9EO #FC0303Jogador #ffffff"..nickdojogador.."#A09E9E Foi Preso Pelo Policial "..nickdopolicial..".", root, 255, 255, 255, true) 
            outputChatBox("#000000[#FC0303POLICIA#000000]#A09E9E Voce foi preso!, ficara por 3 minutos na cadeia!", prisioneiroparcial, 255, 255, 255, true) 
            setElementPosition(prisioneiroparcial, 264.19650268555, 77.602844238281, 1001.0390625) 
            setElementInterior(prisioneiroparcial, 6) 
            setElementFrozen(prisioneiroparcial, true) 
            toggleControl(prisioneiroparcial,"fire", false) 
            setElementData(prisioneiroparcial, "Preso", nickdojogador) 
            elseif ( Dist > 4) then 
            outputChatBox("#000000[#FC0303POLICIA#000000]#A09E9EChegue Mais Perto Do Jogador", thePlayer, 255, 255, 255, true) 
            end 
            end 
            elseif ( niveldeprocurado < 1) then 
            outputChatBox("#000000[#FC0303POLICIA#000000]#A09E9EO Jogador Nao Esta Procurado e Nao Pode Ser Preso!", 255, 255, 255, true) 
            end 
            setTimer ( function() 
                setElementPosition(prisioneiroparcial, 1552.9320068359, -1676.1313476563, 16.1953125) 
            end, 180000, 1) 
            else 
                outputChatBox("#000000[#ff0000POLICIA#000000]#FF0000Você não tem permissão para usar este comando!", thePlayer, 255, 255, 255, true) 
            end 
            end 
            end 
    addCommandHandler("prender", prender) 

alguem sabe???

Edited by Guest
Link to comment

Quando você adiciona um comando usando addCommandHandler a função passada no segundo argumento recebe dois parametros por padrão.

  1. thePlayer = Jogador que digitou o comando.
  2. cmd = O comando que o jogador digitou, no seu caso sera sempre a string "prender" mas você poderia adicionar mais comandos para a mesma função então esse parametro iria mudar.

Os outros paramêtros depois do cmd (nick no seu caso) é você que define, eles farão parte da sintaxe do comando, por exemplo, uma função assim:

function minhaFuncao ( thePlayer, cmd, numero ) 

Vai ter o seguinte comando: /comando [numero], Você pode adicionar quantos parametros quiser, Vale lembrar tambem que você não precisa usar thePlayer ou cmd para nomear as variaveis, Isso:

function minhaFuncao ( thePlayer, cmd ) 

É a mesma coisa que isso:

function minhaFuncao ( PLAYER_QUE_DIGITOU, COMANDO_DIGITADO_PELO_JOGADOR ) 

Obviamente que você teria que trocar thePlayer por PLAYER_QUE_DIGITOU e cmd por COMANDO_DIGITADO_PELO_JOGADOR nas funções usadas no comando.

Link to comment
Muito Obrigado, Explicação otima mas como que que coloco um nome personalizado no cmd?

Como assim um nome personalizado? Você diz na variável cmd ? Se sim é só modificar o addCommandHandler, Por exemplo:

function x ( player, cmd ) 
    outputChatBox ( "x", player ) 
end 
addCommandHandler ( "meucomando", x ) 

^ Nessa função a variavel cmd vai ser sempre meucomando (igual está no addCommandHandler).

Link to comment

É, Acho que não explico bem mesmo rs, Eu estava falando de modificar o comando, teste você mesmo:

function x ( player, cmd ) 
    outputChatBox ( "variavel cmd = " .. cmd, player ) 
end 
addCommandHandler ( "comando", x ) 

Dentro do servidor use /comando depois troque o comando no addCommandHandler, por exemplo:

addCommandHandler ( "ola", x ) 

Reinicie o script e digite /ola (ou o comando que você colocou), Fazendo isso você vai ver que a variavel cmd é o comando que o jogador digitou (ou seja, o comando que está no addCommandHandler).

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...