Jump to content

[Duvida] parametros na funçao


Recommended Posts

Eae Galera, estou com uma duvida aqui e gostaria de entender como funciona exatamente isso! Se puderem me ajudar xD

Quando eu vou criar uma function, eu posso colocar qualquer nome como parametro dentro dela, certo? Se eu quero criar uma funçao e colocar como parametro alguma coisa para pegar o nome do jogador, para depois exibir uma mensagem ou algo somente para ele, eu posso colocar qualquer nome? Como o jogo entende que aquilo pega o nome do player?

Ou é um parametro já determinado pelo mta que faz isso? Por que eu ja vi varias funçoes com o parametro: thePlayer, player, source, e todas elas pegavam o nick do player.

Enfim, queria entender como esse parametro de pegar o nick do player funciona, qual devo usar, etc etc.

Muito Obrigado!

Link to comment

Você pode usar o "nome" que quiser, É igual criar variaveis, o MTA Apenas manda os parâmetros, quem define o nome da variavel é você, por exemplo:

--Todas as funções abaixo vão produzir o mesmo resultado: 
  
function funcao1 ( variavel_que_guarda_o_jogador_que_digitou_o_comando ) 
    outputChatBox ( getPlayerName ( variavel_que_guarda_o_jogador_que_digitou_o_comando ) .. " Digitou !", root, 0, 255, 0 ) 
end 
addCommandHandler ( "a", funcao1 ) 
  
function funcao2 ( p ) 
    outputChatBox ( getPlayerName ( p ) .. " Digitou !", root, 0, 255, 0 ) 
end 
addCommandHandler ( "b", funcao2 ) 
  
function funcao3 ( ... ) 
    local params = { ... } 
    local jogador = params[1] 
    outputChatBox ( getPlayerName ( jogador ) .. " Digitou !", root, 0, 255, 0 ) 
end 
addCommandHandler ( "c", funcao3 ) 

Link to comment

Hmm Saquei!!! No caso eu só devo seguir a ordem do comando, por exemplo, se quisesse exibir a mensagem para o player:

  
--Todas as funções abaixo vão produzir o mesmo resultado: 
  
function funcao1 ( variavel_que_guarda_o_jogador_que_digitou_o_comando ) 
    outputChatBox ( " Digitou !",  variavel_que_guarda_o_jogador_que_digitou_o_comando, 0, 255, 0 ) 
end 
addCommandHandler ( "a", funcao1 ) 
  

Seria assim?

Obrigado! :D

Link to comment

Isso mesmo.

Sobre a definição do parâmetro, preste atenção quando for nomeá-lo como source. Por que essa é uma variável oculta do MTA. O problema eventual seria um conflito entre esse parâmetro e a fonte do evento - o elemento no qual o evento foi originado.

Só que aí no caso, não tem esse tipo de problema. Isso é só para eventos, não funções.

E também, o parâmetro vai ser retornado como userdata.

Mas não tem restrições, você vai definir o parâmetro com o que convém. Mas é sempre bom usar nomes adequados, como no caso: sourcePlayer, thePlayer, player...

Link to comment
Hm entendi! Mas quando for um código assim
guiSetVisible(ShopWindow6, true) 

Que não tem como alterar a visibilidade, como faz?

Pq meu problema é refente à isso! Quando uma pessoa passa na marker e abre esse Shop6, aparece ele para todos os jogadores

Poste o codigo completo, o problema deve estar no triggerServerEvent que você usa (se usa...).

Link to comment
  
function onPedClick6(button, state, absX, absY, wx, wy, wz, element) 
    if (element and getElementType(element) == "ped" and state=="down") then 
        local x, y, z = getElementPosition(localPlayer) 
        if (element == myPed6) then 
            if getDistanceBetweenPoints3D(x, y, z, wx, wy, wz)<=3 then           
                guiSetVisible(ShopWindow6, true) 
            end 
        end 
    end 
end 
addEventHandler("onClientClick", root, onPedClick6) 
function markerhit6 (thePlayer, weaponmarker6) 
    guiSetVisible(ShopWindow6, true) 
    showCursor(true) 
end 
addEventHandler("onClientMarkerHit", weaponmarker6, markerhit6) 
  

Link to comment

Tente verificando se:

thePlayer == localPlayer 

Assim:

function markerhit6 (thePlayer, dim) 
    -- 'dim' verifica com um valor booleano se a dimensão da marca é a mesma que a do jogador 
    if thePlayer == localPlayer then 
        guiSetVisible(ShopWindow6, true) 
        showCursor(true) 
    end 
end 
addEventHandler("onClientMarkerHit", weaponmarker6, markerhit6) 

Link to comment
Funcionou DNL291! Muito obrigrado :D

Mas se tu coloca no if para verificar se o player é o player que ta ali, ai ele abre, pq que nao continua a abrir para todos?

Funcionou perfeitamente mas eu não entendi a logica nisso. Se puder me ajudar a entender

thePlayer não é necessariamente o jogador local, por isso a checagem, imagine dois jogadores, a e b, se o jogador b (thePlayer) entrar na marker, ele não sera o jogador a (localPlayer para ele), por isso a checagem, sem ela a janela iria ser aberta para todos, a e b :P

Link to comment

#RooTs, nao quero brigar com você nem nada, mas você está sempre respondendo os tópicos com coisas sem nexo algum e eu não sou o primeiro a pensar assim sobre você.. Não estou fazendo nenhuma critica nem nada, mas apenas uma observação, já tive uns 5 tópicos ou mais com respostas bem diferentes do que estou perguntando, tente cuidar isso.

Eu entendo claramente as funções, só que não havia entendido a logica usada, pois pensei que mesmo verificando se o player for igual ao localPlayer, ele seria apto a abrir, mas que abriria para todos os outros, mas é que tem há o "else" que se ele não for localPlayer não acontece nada (isso que não havia percebido).

De qualquer forma, muito Obrigado n3wage, DNL291 e #RooTs

@EDIT

Exato NewAge, demorei mas entendi! Muito obrigado :D

Link to comment
#RooTs, nao quero brigar com você nem nada, mas você está sempre respondendo os tópicos com coisas sem nexo algum e eu não sou o primeiro a pensar assim sobre você.. Não estou fazendo nenhuma critica nem nada, mas apenas uma observação, já tive uns 5 tópicos ou mais com respostas bem diferentes do que estou perguntando, tente cuidar isso.

Eu entendo claramente as funções, só que não havia entendido a logica usada, pois pensei que mesmo verificando se o player for igual ao localPlayer, ele seria apto a abrir, mas que abriria para todos os outros, mas é que tem há o "else" que se ele não for localPlayer não acontece nada (isso que não havia percebido).

De qualquer forma, muito Obrigado n3wage, DNL291 e #RooTs

@EDIT

Exato NewAge, demorei mas entendi! Muito obrigado :D

legal cara, é bom eu saber disso.

eu sempre tento ajudar todos da maneira que eu sei, se você não entende só lamento.

sempre que você criar um tópico, apenas vou ignorar. :wink: forte abraço :D

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...