#DeltaSCR Posted February 18, 2019 Posted February 18, 2019 Bom, estou desenvolvendo um código cujo mesmo possui gridList, eu necessito que nesta GridList apareça a lista de Todos os Players logados no Servidor, como eu deveria fazer isso? ----- GRIDLIST ----- playersList = guiCreateGridList (0.26, 0.25, 0.11, 0.57, true) guiGridListAddColumn (playersList, "Jogadores", 0.9)
#DaNiLiN Posted February 18, 2019 Posted February 18, 2019 Bom, na wiki mesmo deixa um exemplo... '-' local playerList = guiCreateGridList(0.80, 0.40, 0.15, 0.35, true) guiGridListAddColumn(playerList, "Player", 0.85) for _, player in ipairs(getElementsByType("player")) do guiGridListAddRow(playerList, getPlayerName(player)) end
Other Languages Moderators androksi Posted February 18, 2019 Other Languages Moderators Posted February 18, 2019 Se sua definição de "logados" for apenas os jogadores que estiverem registrados e usando uma conta, você pode usar, em um evento onPlayerLogin, a função setElementData e adicionar uma data temporária e, na função de adicionar os jogadores na GridList, basta verificar com getElementData. -- // SERVER-SIDE addEventHandler( "onPlayerLogin", root, function( _, acc ) -- // Assim que o jogador logar, vamos armazenar, dentro da uma data, o valor true setElementData( source, "isPlayerLoggedIn", true ); end ); -- // CLIENT-SIDE local Screen = Vector2( guiGetScreenSize( ) ); local gridList = guiCreateGridList( Screen.x - 300, Screen.y + 250, 280, 180, false ); guiGridListAddColumn( gridList, "Jogadores", 0.85 ); -- // Adicionar apenas os jogadores logados for _, v in pairs( getElementsByType( "player" ) ) do if ( getElementData( v, "isPlayerLoggedIn" ) ) then local row = guiGridListAddRow( gridList ); guiGridListSetItemText( gridList, row, 1, string.gsub( getPlayerName( v ), "#%x%x%x%x%x%x", "" ), false, false ); end end
#DeltaSCR Posted February 18, 2019 Author Posted February 18, 2019 (edited) 4 hours ago, asrzk said: Se sua definição de "logados" for apenas os jogadores que estiverem registrados e usando uma conta, você pode usar, em um evento onPlayerLogin, a função setElementData e adicionar uma data temporária e, na função de adicionar os jogadores na GridList, basta verificar com getElementData. -- // SERVER-SIDE addEventHandler( "onPlayerLogin", root, function( _, acc ) -- // Assim que o jogador logar, vamos armazenar, dentro da uma data, o valor true setElementData( source, "isPlayerLoggedIn", true ); end ); -- // CLIENT-SIDE local Screen = Vector2( guiGetScreenSize( ) ); local gridList = guiCreateGridList( Screen.x - 300, Screen.y + 250, 280, 180, false ); guiGridListAddColumn( gridList, "Jogadores", 0.85 ); -- // Adicionar apenas os jogadores logados for _, v in pairs( getElementsByType( "player" ) ) do if ( getElementData( v, "isPlayerLoggedIn" ) ) then local row = guiGridListAddRow( gridList ); guiGridListSetItemText( gridList, row, 1, string.gsub( getPlayerName( v ), "#%x%x%x%x%x%x", "" ), false, false ); end end Bom, eu estou criando essa GridList junto com um Painel, e já uso guiCreateGridList e guiGetScreenSize fora de função alguma, eu poderia mantê-los fora de qualquer função? Edited February 18, 2019 by danblemes1
Other Languages Moderators androksi Posted February 18, 2019 Other Languages Moderators Posted February 18, 2019 Apenas fiz um exemplo. Você escreve o código do jeito que quiser (claro, dentro dos padrões da programação). Respondendo: Sim, pode deixá-los fora de alguma função.
Other Languages Moderators Lord Henry Posted February 18, 2019 Other Languages Moderators Posted February 18, 2019 Também crio meus painéis GUI fora de funções. Não sei se tem diferença entre deixá-los fora ou deixá-los dentro de uma função com onClientResourceStart.
#DeltaSCR Posted February 18, 2019 Author Posted February 18, 2019 1 minute ago, Lord Henry said: Também crio meus painéis GUI fora de funções. Não sei se tem diferença entre deixá-los fora ou deixá-los dentro de uma função com onClientResourceStart. Não sei se é do meu PC, mas tipo, quando eu tava com a GridList dentro da Função, assim que eu abria o Painel começava a travar tudo
Other Languages Moderators androksi Posted February 18, 2019 Other Languages Moderators Posted February 18, 2019 24 minutes ago, danblemes1 said: Não sei se é do meu PC, mas tipo, quando eu tava com a GridList dentro da Função, assim que eu abria o Painel começava a travar tudo Isso definitivamente NÃO é normal. Eu costumo fazer meus painéis em DirectX(DX) e nunca tive problemas com performance.
Other Languages Moderators Lord Henry Posted February 18, 2019 Other Languages Moderators Posted February 18, 2019 (edited) 17 minutes ago, asrzk said: Isso definitivamente NÃO é normal. Eu costumo fazer meus painéis em DirectX(DX) e nunca tive problemas com performance. É, mas NÃO TEM COMO fazer um painel DX fora de funções, né? hauahauahua Pois ele depende de uma função render. Edited February 18, 2019 by Lord Henry 1
Other Languages Moderators androksi Posted February 19, 2019 Other Languages Moderators Posted February 19, 2019 50 minutes ago, Lord Henry said: É, mas NÃO TEM COMO fazer um painel DX fora de funções, né? hauahauahua Pois ele depende de uma função render. KKKKK. Concordo. É que eu uso minha framework, aí eu meio que fiz todas as funções GUI como DX. dxCreateGridList, dxCreateButton, dxCreateScrollBar, dxCreateWindow, dxWindowSetMovable, dxWindowSetSizable etc. Todas as funções de GUI, porém em DX. Acabei me esquecendo desse detalhe do render.
Other Languages Moderators Lord Henry Posted February 19, 2019 Other Languages Moderators Posted February 19, 2019 Manda print por privado de alguns painéis DX que vc fez. Quero ver se vc é bom mesmo.
#DeltaSCR Posted February 20, 2019 Author Posted February 20, 2019 Bom, eu fiz essa parte do código baseado na WikiMTA, porém o debug está indicando os seguintes erros: Spoiler https://prntscr.com/mnmpty Podem me ajudar dizendo o que eu devo alterar no código a seguir? function createPlayerList () playersList = guiCreateGridList (0.26, 0.25, 0.11, 0.57, true) local column = guiGridListAddColumn (playersList, "Jogadores", 0.9) if (column) then for _, v in ipairs (getElementsByType("player")) do local row = guiGridListAddRow (playerList) guiGridListSetItemText (playerList, row, 1, string.gsub(getPlayerName(v), "#%x%x%x%x%x%x", ""), false, false) end addEventHandler ("onClientGUIClick", playerList, click) end end addEventHandler ("onClientResourceStart", resourceRoot, createPlayerList) function click (button, state, sx, sy, x, y, z, elem, gui) if ((state == "down") and (gui == true) and (source == playerList)) then local playerName = guiGridListGetItemText (playerList, guiGridListGetSelectedItem (playerList), 1) outputChatBox (playerName) end end
Other Languages Moderators Lord Henry Posted February 20, 2019 Other Languages Moderators Posted February 20, 2019 Você botou playerList quando o certo é playersList
#DeltaSCR Posted February 20, 2019 Author Posted February 20, 2019 1 hour ago, Lord Henry said: Você botou playerList quando o certo é playersList Ah sim, realmente, mas fora isso está tudo certo?
Other Languages Moderators Lord Henry Posted February 20, 2019 Other Languages Moderators Posted February 20, 2019 A princípio era só isso. Teste e veja se tem mais algum erro no /debugscript 3
DNL291 Posted February 20, 2019 Posted February 20, 2019 (edited) Coloque false depois de 'click' na linha 9. Na função click, você está usando o parâmetro state e verificando se o clique está 'segurado'. Mas na verdade esse parâmetro só funciona para o state "up" (botão solto), tornando essa verificação desnecessária. Também, a verificação (source == playerList) será desnecessária já que source sempre será a gridList, e por fim, gui deve estar definido no seu código, caso contrário a verificação será sempre invalidada. Sobre o clique nas rows, o código funcionará assim: local sr = guiGridListGetSelectedItem (source) -- obtendo a row selecionada if sr and sr ~= -1 then -- verificando se o clique foi na row local playerName = guiGridListGetItemText ( source, sr, 1 ) -- obtendo o valor da row selecionada outputChatBox ( playerName ) else -- o clique foi fora de qualquer 'row' outputChatBox ( "Nenhuma row selecionada" ) end Edited February 20, 2019 by DNL291 1
#DeltaSCR Posted February 21, 2019 Author Posted February 21, 2019 11 hours ago, DNL291 said: Coloque false depois de 'click' na linha 9. Na função click, você está usando o parâmetro state e verificando se o clique está 'segurado'. Mas na verdade esse parâmetro só funciona para o state "up" (botão solto), tornando essa verificação desnecessária. Também, a verificação (source == playerList) será desnecessária já que source sempre será a gridList, e por fim, gui deve estar definido no seu código, caso contrário a verificação será sempre invalidada. Sobre o clique nas rows, o código funcionará assim: local sr = guiGridListGetSelectedItem (source) -- obtendo a row selecionada if sr and sr ~= -1 then -- verificando se o clique foi na row local playerName = guiGridListGetItemText ( source, sr, 1 ) -- obtendo o valor da row selecionada outputChatBox ( playerName ) else -- o clique foi fora de qualquer 'row' outputChatBox ( "Nenhuma row selecionada" ) end Então na parte dos parametros de função ficaria assim?: function click (button, sx, sy, x, y, z, elem)
#DeltaSCR Posted February 21, 2019 Author Posted February 21, 2019 Permaneço com uma duvida, no caso eu pretendo fazer uma verificação com o player selecionado, na verificação, qual seria o elemento?
DNL291 Posted February 21, 2019 Posted February 21, 2019 (edited) 9 hours ago, danblemes1 said: Então na parte dos parametros de função ficaria assim?: function click (button, sx, sy, x, y, z, elem) Não pois os parâmetros desse evento não são esses. Os parâmetros são: function click (button, state, absoluteX, absoluteY) Sendo que desses parâmetros você só vai precisar usar o primeiro ( button ) : if button == "left" then 8 minutes ago, danblemes1 said: Permaneço com uma duvida, no caso eu pretendo fazer uma verificação com o player selecionado, na verificação, qual seria o elemento? Qual tipo de verificação você quer fazer? Edit: se for obter o jogador, getPlayerFromName não vai funcionar se o nick teve seu código hex removido. Edited February 21, 2019 by DNL291
#DeltaSCR Posted February 21, 2019 Author Posted February 21, 2019 1 minute ago, DNL291 said: Não pois os parâmetros desse evento não são esses. Os parâmetros são: function click (button, state, absoluteX, absoluteY) Sendo que desses parâmetros você só vai precisar usar o primeiro ( button ) : if button == "left" then Qual tipo de verificação você quer fazer? 1 - Onde e como eu encaixaria "button"? 2 - Pretendo verificar armas e Data
DNL291 Posted February 21, 2019 Posted February 21, 2019 1 - dentro do evento onClientGUIClick 2 - Como você removeu os códigos em hex. dos nicks na gridList, você vai precisar obter o jogador assim, por exemplo: function _getPlayerFromName( name ) if not (name) then return false end -- for i,p in pairs(getElementsByType("player")) do if getPlayerName(p):gsub("#%x%x%x%x%x%x", "") == name then return p end end return false end Feito isso só substituir o uso da função getPlayerFromName por essa. Para verificar element-data você vai usar o jogador obtido com a função acima, e para as armas faça um loop com a função getPedWeapon verificando o slot do jogador com os slots de 0 a 12. 1
#DeltaSCR Posted February 21, 2019 Author Posted February 21, 2019 5 minutes ago, DNL291 said: 1 - dentro do evento onClientGUIClick 2 - Como você removeu os códigos em hex. dos nicks na gridList, você vai precisar obter o jogador assim, por exemplo: function _getPlayerFromName( name ) if not (name) then return false end -- for i,p in pairs(getElementsByType("player")) do if getPlayerName(p):gsub("#%x%x%x%x%x%x", "") == name then return p end end return false end Feito isso só substituir o uso da função getPlayerFromName por essa. Para verificar element-data você vai usar o jogador obtido com a função acima, e para as armas faça um loop com a função getPedWeapon verificando o slot do jogador com os slots de 0 a 12. Mas "guiGridListGetText" não seria pra obter o Jogador selecionado?
DNL291 Posted February 21, 2019 Posted February 21, 2019 4 minutes ago, danblemes1 said: Mas "guiGridListGetText" não seria pra obter o Jogador selecionado? Retorna a string ou texto da row selecionada.
#DeltaSCR Posted February 21, 2019 Author Posted February 21, 2019 2 minutes ago, DNL291 said: Retorna a string ou texto da row selecionada. Então eu teria que fazer desta forma?:pl playerName = guiGridListGetItemText ( source, sr, 1) thePlayer = _getPlayerFromName (playerName)
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now