Jump to content

Nível de Procurado


Recommended Posts

  • Moderators

getPlayerFromName(guiGetText(editWanted1)) está errado. nesta função você precisa usar o argumento thePlayer.

No lado server o argumento thePlayer deve estar retornando nulo.

realmente você se confunde com funções simples, como Stanley disse.. enfim oque falta para você é se aprofundar mais em Lua, estudar o conceito básico, para saber os argumentos de cada função, que é oque você mais se confunde.

Link to comment
  • Replies 60
  • Created
  • Last Reply

Top Posters In This Topic

getPlayerFromName(guiGetText(editWanted1)) 

Acho que acima, está certo sim DNL. O guiGetText(editWanted1) retorna o valor do edit (string). Então, o getPlayerFromName() pega o jogador com esse nome (o tal editWanted1 é onde coloca o nome do jogador, eu acho).

E realmente, é preciso estudar mais o uso das funções. Não só em Lua, mas em programação em geral. Principalmente quanto ao uso dos argumentos. E identação também, eu estive conversando com ele sobre isso.

Bom, vamos ver qual medida ele irá tomar... e Matheus, qualquer dúvida, estamos aqui para ajudar. Mas é que se continuarmos insistindo em lhe ajudar com esse seu código assim, você não terminará seu script nunca.

Link to comment
  • Moderators

Como eu nunca mexi muito com a função getPlayerFromName(), não posso dizer com certeza se vai funcionar, e também ele terá que checar se irá retornar com sucesso o nome do jogador que inserir no edit.

No edit que irá inserir o nível de procurado deve checar se é numero, se não for, mostra mensagem de erro.

Mas o codigo continua com erros e setElementData() deve conter o argumento true para sincronizar com o client, além disso playerName = guiGetText(editWanted1, who) está errado.

Link to comment

Fora que existem também, no código, duas chamadas para o evento "onStupidStart". Uma delas, na linha 86, no qual acho que é a única realmente chamada (mas ambas estão ligadas ao mesmo botão. Ou seja, ele escreveu a mesma função para o mesmo botão duas vezes no mesmo código). Se esta é a realmente chamada, é esta que precisa enviar os argumentos necessários para a função server-side. Por isso disse a ele para entender melhor sobre isso, porque realmente não basta copiar tudo que estamos dizendo aqui sem entender o que cada linha significa.

Link to comment
  • Moderators

Na verdade eu não lembro de ter dito sobre erro na função getElementData.

synchronize: Determines whether or not the data will be synchronized with the server (client-side variation) and remote clients (both variations).
local Toyota = getElementData(getPlayerFromName(guiGetText(editWanted1)),'Level') 

O elemento(jogador) pode estar retornando falso.

local Toyota = getElementData(localPlayer,'Level') 

Esse está correto.

Link to comment

1) Parece que todas as ocorrências do uso do guiGetText() estão incorretas. Você, Matheus, precisa verificar sobre a sintaxe das funções no manual. O guiGetText() pede um argumento e você inseriu dois todas as vezes que a usou.

2) Outro fator, que não é necessariamente um erro mas inútil, é o uso da linha "local root = getRootElement()". Primeiro porque "root" já é uma variável pré-definida que armazena esse valor, ou seja, você não precisa declará-la para usá-la. Basta usar "root" em qualquer parte do seu documento e o interpretador irá interpretar como getRootElement(). Sem contar que ela foi declarada localmente dentro do escopo principal da função, ou seja, só é válida dentro da tal função. Então, outra dica é estudar a declaração de variáveis em Lua (locais, globais, etc).

3) Na linha 70, você tem: "who = getPlayerName(localPlayer)". Logo abaixo, você tem a condição: "if (who) then". Só que "who" não é um valor booleano, "who" é uma string. Ou seja, essa condição também nunca é chamada. Você também precisa prestar atenção no retorno de cada função.

Link to comment

3) Na linha 70, você tem: "who = getPlayerName(localPlayer)". Logo abaixo, você tem a condição: "if (who) then". Só que "who" não é um valor booleano, "who" é uma string. Ou seja, essa condição também nunca é chamada. Você também precisa prestar atenção no retorno de cada função.

Qualquer valor diferente de FALSE ou NIL é TRUE. Então, essa condição é TRUE, e é chamada. No entanto, é inútil a usar pois localPlayer sempre vai ser um elemento PLAYER e sempre vai retornar o nome do jogador.

Link to comment

Desculpem pelo double post.. Mas, aqui o código totalmente corrigido e re-escrito:

Client-side:

class 'core'; 
  
addEventHandler( 'onClientResourceStart', resourceRoot, 
    function( ) 
     
        -- if class not created  
        if( not core ) then 
            return; 
        end 
     
        -- load gui 
        core.loadWindows(); 
         
        -- stuff 
        addEventHandler( 'onClientGUIClick', root, core.fnOnClick ); 
        addCommandHandler( 'wantedstats', core.openWindow ); 
         
        -- settings 
         
        core.__width        = 800; -- mude aqui para a largura da sua tela ( que voce usou para criar a GUI ) 
        core.__height       = 600; -- mude aqui para a altura da sua tela ( que voce usou para criar a GUI ) 
  
    end 
) 
  
  
function core.loadWindows( ) 
  
    -- declare screen size variables 
    local iSX, iSY = guiGetScreenSize( ); 
         
    -- create first gui 
    core._windowA[1] = guiCreateWindow( ( 80 / core.__width ) * iSX, ( 80 / core.__height ) * iSY, ( 250 / core.__width ) * iSX, ( 250 / core.__height ) * iSY, '', false ); 
    guiWindowSetSizable( core._windowA[1], false ); 
    guiSetVisible( core._windowA[1], false ); 
     
    core._labelA[1] = guiCreateLabel( ( 20 / core.__width ) * iSX, ( 20 / core.__height ) * iSY, ( 250 / core.__width ) * iSX, ( 60 / core.__height ) * iSY, 'Janela de Alteração de Nivel de Procurado', false, core._windowA[1] ); 
    core._labelA[2] = guiCreateLabel( ( 10 / core.__width ) * iSX, ( 55 / core.__height ) * iSY, ( 250 / core.__width ) * iSX, ( 60 / core.__height ) * iSY, 'Nome do Jogador:', false, core._windowA[1] ); 
    core._labelA[3] = guiCreateLabel( ( 30 / core.__width ) * iSX, ( 90 / core.__height ) * iSY, ( 250 / core.__width ) * iSX, ( 60 / core.__height ) * iSY, 'Nivel de Procurado:', false, core._windowA[1] ); 
     
    core._editA[1] = guiCreateEdit( ( 120 / core.__width ) * iSX, ( 50 / core.__height ) * iSY, ( 120 / core.__width ) * iSX, ( 25 / core.__height ) * iSY, '', false, core._windowA[1] ); 
    core._editA[2] = guiCreateEdit( ( 160 / core.__width ) * iSX, ( 85 / core.__height ) * iSY, ( 80 / core.__width ) * iSX, ( 25 / core.__height ) * iSY, '', false, core._windowA[1] ); 
         
    core._memoA[1] = guiCreateMemo(( ( 10 / core.__width ) * iSX, ( 120 / core.__height ) * iSY, ( 230 / core.__width ) * iSX, ( 80 / core.__height ) * iSY, 'Identifique o jogador e selecione o nivel de procurado paa alterar. Os niveis são 0-6!', false, core._windowA[1] ); 
     
    core._buttonA[1] = guiCreateButton( ( 0 / core.__width ) * iSX, ( 210 / core.__height ) * iSY, ( 120 / core.__width ) * iSX, ( 30 / core.__height ) * iSY, 'Alterar nivel', false, core._windowA[1] ); 
    core._buttonA[2] = guiCreateButton( ( 130 / core.__width ) * iSX, ( 210 / core.__height ) * iSY, ( 120 / core.__width ) * iSX, ( 30 / core.__height ) * iSY, 'Fechar', false, core._windowA[1] ); 
     
    -- create second gui 
     
    core._windowB[1] = guiCreateWindow( ( 200 / core.__width ) * iSX, ( 150 / core.__height ) * iSY, ( 200 / core.__width ) * iSX, ( 120 / core.__height ) * iSY, '', false ); 
    guiWindowSetSizable( core._windowB[1], false ); 
    guiSetVisible( core._windowB[1], false ); 
     
    core._labelB[2] = guiCreateLabel( ( 10 / core.__width ) * iSX, ( 20 / core.__height ) * iSY, ( 200 / core.__width ) * iSX, ( 200 / core.__height ) * iSY, '     Você deseja realmente\nalterar o nível de procurado deste\njogador?', false, core._windowB[1] ); 
     
    core._buttonB[1] = guiCreateButton( ( 0 / core.__width ) * iSX, ( 20 / core.__height ) * iSY, ( 90 / core.__width ) * iSX, ( 100 / core.__height ) * iSY, 'Confirmar', false, core._windowB[1] ); 
    core._buttonB[2] = guiCreateButton( ( 100 / core.__width ) * iSX, ( 80 / core.__height ) * iSY, ( 90 / core.__width ) * iSX, ( 100 / core.__height ) * iSY, 'Cancelar', false, core._windowB[1] ); 
     
end 
  
function core.fnOnClick( ) 
    --  
    if( source == core._buttonA[2] ) then 
        guiSetVisible( core._windowA[1], false ); 
        showCursor( guiGetVisible( core._windowA[1] ) ); 
        guiSetInputEnabled( false ); 
    -- 
    elseif( source == core._buttonA[1] ) then 
        guiSetVisible( core._windowB[1], true ); 
        showCursor( guiGetVisible( core._windowB[1] ) ); 
        guiSetInputEnabled( true ); 
    -- 
    elseif( source == core._buttonB[1] ) then 
        triggerServerEvent( 'onStupidStar', localPlayer, guiGetText( core._editA[2] ), getPlayerFromPart( guiGetText( core._editA[1] ) ) or nil ); 
        guiSetVisible( core._windowA[1], false ); 
        showCursor( guiGetVisible( core._windowA[1] ) ); 
        guiSetInputEnabled( false ); 
    -- 
    elseif( source == core._buttonB[2] ) then 
        guiSetVisible( core._windowB[1], true ); 
        showCursor( guiGetVisible( core._windowB[1] ) ); 
        guiSetInputEnabled( true ); 
    end 
end 
  
function core.openWindow( ) 
    guiSetVisible( core._windowA[1], true ); 
    showCursor( guiGetVisible( core._windowA[1] ) ); 
    guiSetInputEnabled( true ); 
end 
  
-- 
  
function getPlayerFromPart( s ) 
  
    -- if parameter is string 
    if( type( s ) == 'string' ) then 
        -- declare matches table 
        local matches = { } 
         
        -- loop all players and check their names 
        for i,v in ipairs( getElementsByType 'player' ) do 
            if( string.find( getPlayerName( v ), tostring( s ), 0 ) ) then 
                -- insert element in table 
                table.insert( matches, v ); 
            end 
        end 
         
        -- if only one player found 
        if ( #matches == 1 ) 
            return matches[1]; 
        end 
    end 
     
    return false; 
     
end 

Server-side:

addEvent( 'onStupidStar', true ); 
  
addEventHandler( 'onStupidStar', root, 
    function( nivel, player ); 
        setElementData( player, 'Level', tonumber( nivel ) ); 
        setPlayerWantedLevel( player, tonumber( nivel ) ); 
        outputChatBox( 'O seu nível de procurado foi alterado!', player, 255, 255, 0 ); 
    end 
) 

Veja os comentários e use meu sistema de classes para que o código funcione:

viewtopic.php?f=152&t=44583

Edited by Guest
Link to comment

Draken, é loucura postar um código que utiliza classes para um membro que ainda não domina sequer o uso das funções. Sem contar que você postar o código já finalizado não vai ajudar em muita coisa. Foi o que evitamos durante todo este tempo, visto que o objetivo é fazê-lo aprender.

Agora, mudando um pouco assunto do tópico... gostei do uso das classes. Vou dar uma lida no uso destas também e ver se consigo construir algo, rs.

Link to comment

Mas escrever o código usando classes vai ser mais difícil ainda dele entender, KK. '-' Bom, eu acho que a deficiência dele nessa questão de programação é realmente entender a lógica. Ou seja, entender o que é uma função, o que são os argumentos que podem ser usados nas funções... porque no código dele, as maiores deficiências estavam nestes erros.

Link to comment

estou reescrevendo e irei solicitar a ajuda de vocês.

    -----Primeira Janela----- 
function JanelaCapitura() 
  
    wantedJanela = guiCreateWindow(260,180,250,250,"",false) 
    guiWindowSetSizable(wantedJanela,false) 
    guiSetVisible ( wantedJanela, false ) 
--labels 
    labelJanela = guiCreateLabel(20,20,250,60,"Janela de Alteração de Wanted Stats",false,wantedJanela) 
    labelNome = guiCreateLabel(10,55,250,60,"Nome do Jogador :",false,wantedJanela) 
    labelWanted = guiCreateLabel(30,90,250,60,"Wanted Level :",false,wantedJanela) 
  
--edit 
    editWanted1 = guiCreateEdit(120,50,120,25,"",false,wantedJanela) 
    editWanted2 = guiCreateEdit(160,85,80,25,"",false,wantedJanela) 
  
  
--Memo 
    memoEdit = guiCreateMemo(10,120,230,80,"Identifique o jogador e selecione o nivel de procurado para a alteração, os niveis podem ser de 0-6 .",false,wantedJanela) 
    guiMemoSetReadOnly(memoEdit,true) 
  
--Button 
    buttonAlterar = guiCreateButton(0,210,120,30,"Alterar Nivel",false,wantedJanela) 
    buttonFechar = guiCreateButton(130,210,120,30,"Fechar",false,wantedJanela) 
end 
  
addEventHandler( "onClientResourceStart", root, JanelaCapitura) 
  
    -----Janela Secundaria----- 
  
function Janelainfo() 
    JanelaSec = guiCreateWindow(285,200,200,120,"",false) 
    LabelSec = guiCreateLabel(10,20,200,200,"     Você deseja relamnete \nalterar onivel de procurado deste \njogador?",false,JanelaSec) 
    ButtonSec1 = guiCreateButton(0,80,90,100,"Confirmar",false,JanelaSec) 
    ButtonSec2 = guiCreateButton(100,80,90,100,"Cancelar",false,JanelaSec) 
    guiWindowSetSizable(JanelaSec,false) 
    guiSetVisible(JanelaSec,false) 
end 
addEventHandler( "onClientResourceStart", root, Janelainfo) 
  
----------------------- Funções ----------------------- 
  
function Visivel () 
    guiSetVisible ( wantedJanela, true ) 
    showCursor(true) 
    guiSetInputMode("no_binds_when_editing") 
end 
addCommandHandler ( "wantedlevel", Visivel ) 
  
addEventHandler('onClientGUIClick', root, 
function () 
    if (source == buttonFechar) then 
        guiSetVisible ( wantedJanela, false ) 
        showCursor ( false ) 
    elseif (source == buttonAlterar) then 
        guiSetVisible ( JanelaSec, true ) 
        guiBringToFront ( JanelaSec ) 
    elseif (source == ButtonSec2) then 
        guiSetVisible ( JanelaSec, false ) 
    elseif (source == ButtonSec1) then 
        guiSetVisible ( JanelaSec, false ) 
    end 
end) 

agora como irei fazer para pegar o nome do jogador e o nível desejado?

Edited by Guest
Link to comment

Tabula o código cara :/

--

Pega o texto do edit com guiGetText e, para pegar o elemento do jogador, use getPlayerFromNamePart:

function getPlayerFromNamePart( string ) 
    if( string and type( string ) == 'string' ) then 
        local matches = { } 
        for k,v in ipairs( getElementsByType'player' ) do 
            if( string.find( getPlayerName( v ), tostring( string ), 0 ) ) then 
                table.insert ( matches, v ); 
            end 
        end 
         
        if( #matches == 1 ) then 
            return matches[1]; 
        end 
    end 
    return false; 
end 

E para definir o nível de procurado, chame um evento server-side onde você vai passar o número que está no edit e defina o nível.

Edited by Guest
Link to comment

Código não tabulado:

function teste() 
print('hola'); 
if(false~=true)then 
print('bye bye'); 
else 
print('welcome'); 
end 
end 

Código tabulado:

function test( ) 
    print( 'hola' ); 
    if( false ~= true ) then 
        print( 'bye bye' ); 
    else 
        print( 'welcome' ); 
    end 
end 

Verifique meu post anterior também ;)

Link to comment
    -----Primeira Janela----- 
function JanelaCapitura() 
  
    wantedJanela = guiCreateWindow(260,180,250,250,"",false) 
    guiWindowSetSizable(wantedJanela,false) 
    guiSetVisible ( wantedJanela, false ) 
--labels 
    labelJanela = guiCreateLabel(20,20,250,60,"Janela de Alteração de Wanted Stats",false,wantedJanela) 
    labelNome = guiCreateLabel(10,55,250,60,"Nome do Jogador :",false,wantedJanela) 
    labelWanted = guiCreateLabel(30,90,250,60,"Wanted Level :",false,wantedJanela) 
  
--edit 
    editWanted1 = guiCreateEdit(120,50,120,25,"",false,wantedJanela) 
    editWanted2 = guiCreateEdit(160,85,80,25,"",false,wantedJanela) 
  
  
--Memo 
    memoEdit = guiCreateMemo(10,120,230,80,"Identifique o jogador e selecione o nivel de procurado para a alteração, os niveis podem ser de 0-6 .",false,wantedJanela) 
    guiMemoSetReadOnly(memoEdit,true) 
  
--Button 
    buttonAlterar = guiCreateButton(0,210,120,30,"Alterar Nivel",false,wantedJanela) 
    buttonFechar = guiCreateButton(130,210,120,30,"Fechar",false,wantedJanela) 
end 
  
addEventHandler( "onClientResourceStart", root, JanelaCapitura) 
  
    -----Janela Secundaria----- 
  
function Janelainfo() 
    JanelaSec = guiCreateWindow(285,200,200,120,"",false) 
    LabelSec = guiCreateLabel(10,20,200,200,"     Você deseja relamnete \nalterar onivel de procurado deste \njogador?",false,JanelaSec) 
    ButtonSec1 = guiCreateButton(0,80,90,100,"Confirmar",false,JanelaSec) 
    ButtonSec2 = guiCreateButton(100,80,90,100,"Cancelar",false,JanelaSec) 
    guiWindowSetSizable(JanelaSec,false) 
    guiSetVisible(JanelaSec,false) 
end 
addEventHandler( "onClientResourceStart", root, Janelainfo) 
  
----------------------- Funções ----------------------- 
  
function Visivel () 
    guiSetVisible ( wantedJanela, true ) 
    showCursor(true) 
    guiSetInputMode("no_binds_when_editing") 
end 
addCommandHandler ( "wantedlevel", Visivel ) 
  
addEventHandler('onClientGUIClick', root, 
function () 
    if (source == buttonFechar) then 
        guiSetVisible ( wantedJanela, false ) 
        showCursor ( false ) 
    elseif (source == buttonAlterar) then 
        guiSetVisible ( JanelaSec, true ) 
        guiBringToFront ( JanelaSec ) 
    elseif (source == ButtonSec2) then 
        guiSetVisible ( JanelaSec, false ) 
    elseif (source == ButtonSec1) then 
        guiSetVisible ( JanelaSec, false ) 
    gethename = guiGetText(editWanted1,getPlayerFromNamePart) 
    getlevel = guiGetText(editWanted2) 
    triggerServerEvent("onStupidStar", getlevel, gethename) 
    end 
end) 
  
function getPlayerFromNamePart( string ) 
    if( string and type( string ) == 'string' ) then 
        local matches = { } 
        for k,v in ipairs( getElementsByType'player' ) do 
            if( string.find( getPlayerName( v ), tostring( string ), 0 ) ) then 
                table.insert ( matches, v ); 
            end 
        end 
        
        if( #matches == 1 ) then 
            return matches[1]; 
        end 
    end 
    return false; 
end 

tipo assim?

Link to comment

Sim, mas o seu código está errado.

guiGetText(editWanted1,getPlayerFromNamePart) 

Certo:

getPlayerFromNamePart( tostring( guiGetText( editWanted1 ) ) ) 

E:

triggerServerEvent( 'onStupidStar', getlevel, gethename ) 

Está errado também, o segundo argumento é o elemento.

triggerServerEvent( 'onStupidStar', localPlayer, getlevel, gethename ) 

Mostre o server-side também.

Link to comment
    -----Primeira Janela----- 
function JanelaCapitura() 
  
    wantedJanela = guiCreateWindow(260,180,250,250,"",false) 
    guiWindowSetSizable(wantedJanela,false) 
    guiSetVisible ( wantedJanela, false ) 
--labels 
    labelJanela = guiCreateLabel(20,20,250,60,"Janela de Alteração de Wanted Stats",false,wantedJanela) 
    labelNome = guiCreateLabel(10,55,250,60,"Nome do Jogador :",false,wantedJanela) 
    labelWanted = guiCreateLabel(30,90,250,60,"Wanted Level :",false,wantedJanela) 
  
--edit 
    editWanted1 = guiCreateEdit(120,50,120,25,"",false,wantedJanela) 
    editWanted2 = guiCreateEdit(160,85,80,25,"",false,wantedJanela) 
  
  
--Memo 
    memoEdit = guiCreateMemo(10,120,230,80,"Identifique o jogador e selecione o nivel de procurado para a alteração, os niveis podem ser de 0-6 .",false,wantedJanela) 
    guiMemoSetReadOnly(memoEdit,true) 
  
--Button 
    buttonAlterar = guiCreateButton(0,210,120,30,"Alterar Nivel",false,wantedJanela) 
    buttonFechar = guiCreateButton(130,210,120,30,"Fechar",false,wantedJanela) 
end 
  
addEventHandler( "onClientResourceStart", root, JanelaCapitura) 
  
    -----Janela Secundaria----- 
  
function Janelainfo() 
    JanelaSec = guiCreateWindow(285,200,200,120,"",false) 
    LabelSec = guiCreateLabel(10,20,200,200,"     Você deseja relamnete \nalterar onivel de procurado deste \njogador?",false,JanelaSec) 
    ButtonSec1 = guiCreateButton(0,80,90,100,"Confirmar",false,JanelaSec) 
    ButtonSec2 = guiCreateButton(100,80,90,100,"Cancelar",false,JanelaSec) 
    guiWindowSetSizable(JanelaSec,false) 
    guiSetVisible(JanelaSec,false) 
end 
addEventHandler( "onClientResourceStart", root, Janelainfo) 
  
----------------------- Funções ----------------------- 
  
function Visivel () 
    guiSetVisible ( wantedJanela, true ) 
    showCursor(true) 
    guiSetInputMode("no_binds_when_editing") 
end 
addCommandHandler ( "wantedlevel", Visivel ) 
  
addEventHandler('onClientGUIClick', root, 
function () 
    if (source == buttonFechar) then 
        guiSetVisible ( wantedJanela, false ) 
        showCursor ( false ) 
    elseif (source == buttonAlterar) then 
        guiSetVisible ( JanelaSec, true ) 
        guiBringToFront ( JanelaSec ) 
    elseif (source == ButtonSec2) then 
        guiSetVisible ( JanelaSec, false ) 
    elseif (source == ButtonSec1) then 
        guiSetVisible ( JanelaSec, false ) 
    gethename = getPlayerFromNamePart( tostring( guiGetText( editWanted1 ) ) ) 
    getlevel = guiGetText(editWanted2) 
    triggerServerEvent("onStupidStar", localPlayer, getlevel, gethename) 
    end 
end) 
  
function getPlayerFromNamePart( string ) 
    if( string and type( string ) == 'string' ) then 
        local matches = { } 
        for k,v in ipairs( getElementsByType'player' ) do 
            if( string.find( getPlayerName( v ), tostring( string ), 0 ) ) then 
                table.insert ( matches, v ); 
            end 
        end 
        
        if( #matches == 1 ) then 
            return matches[1]; 
        end 
    end 
    return false; 
end 

addEvent('onStupidStar', true) 
addEventHandler('onStupidStar', root, 
function(wantedToApply, playerToApply) 
    setPlayerWantedLevel(gethename, tonumber(wantedToApply)) 
    outputChatBox('Seu nível de procurado foi alterado!',getPlayerFromName(playerToApply),255,255,0) 
end) 

Link to comment
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...