DNL291 Posted June 20, 2012 Share Posted June 20, 2012 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
Stanley Sathler Posted June 20, 2012 Share Posted June 20, 2012 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
DNL291 Posted June 20, 2012 Share Posted June 20, 2012 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
Stanley Sathler Posted June 20, 2012 Share Posted June 20, 2012 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
Anderl Posted June 20, 2012 Share Posted June 20, 2012 Não, DNL291 não está certo. Realmente, os parâmetros da função "getElementData" estão certos. Link to comment
DNL291 Posted June 20, 2012 Share Posted June 20, 2012 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
Anderl Posted June 20, 2012 Share Posted June 20, 2012 Não, está errado. Ele quer retornar o dado 'Level' do jogador com o nome do EditBox. Ele apenas está botando a função fora do evento 'onClientGUIClick', o que está errado. Link to comment
Stanley Sathler Posted June 20, 2012 Share Posted June 20, 2012 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
Anderl Posted June 21, 2012 Share Posted June 21, 2012 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
Anderl Posted June 21, 2012 Share Posted June 21, 2012 (edited) 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 June 21, 2012 by Guest Link to comment
Stanley Sathler Posted June 21, 2012 Share Posted June 21, 2012 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
Anderl Posted June 21, 2012 Share Posted June 21, 2012 Cara, mas se ele não consegue entender e nós não mostrarmos a ele como faz, como você acha que ele vai aprender? ._. Link to comment
Stanley Sathler Posted June 21, 2012 Share Posted June 21, 2012 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
Anderl Posted June 21, 2012 Share Posted June 21, 2012 Se ele não entender alguma coisa, ele pode perguntar aqui que eu posso ajudar, ou até você, se puder Link to comment
Stanley Sathler Posted June 21, 2012 Share Posted June 21, 2012 Tô errando com o mais básico, imagina eu tentar ajudar com classes, AHUHAU. Mas de qualquer forma, quero realmente aprender a trabalhar com elas... achei bem mais "elegante" o código que você escreveu. Link to comment
Anderl Posted June 21, 2012 Share Posted June 21, 2012 Se você precisar de ajudar só falar.. Link to comment
DNL291 Posted June 21, 2012 Share Posted June 21, 2012 Código agradável .. mas a função stopResource() é serverside apenas. Link to comment
yMassai Posted June 23, 2012 Author Share Posted June 23, 2012 (edited) 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 June 23, 2012 by Guest Link to comment
Anderl Posted June 23, 2012 Share Posted June 23, 2012 (edited) 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 June 23, 2012 by Guest Link to comment
Anderl Posted June 23, 2012 Share Posted June 23, 2012 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
yMassai Posted June 24, 2012 Author Share Posted June 24, 2012 -----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
Anderl Posted June 24, 2012 Share Posted June 24, 2012 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
yMassai Posted June 24, 2012 Author Share Posted June 24, 2012 -----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
Recommended Posts