Gaimo Posted February 19, 2019 Share Posted February 19, 2019 Bateu uma vontade de criar um painel de login, ̶E̶U̶ ̶T̶E̶N̶H̶O̶ ̶Q̶U̶E̶ ̶C̶O̶N̶S̶E̶G̶U̶I̶R̶ ̶C̶R̶I̶A̶R̶ ̶U̶M̶ ̶P̶A̶I̶N̶E̶L̶ ̶D̶E̶ ̶L̶O̶G̶I̶N̶ Estou louco para conseguir criar tudo o que eu penso, mas ainda me falta conhecimento e pratica, então aqui estou para pedir ajuda. Por eu estar começando seria melhor eu fazer em CEGUI ou posso continuar com o DX que é o que eu estou usando? Não sei exatamente como começar e nem quais funções usar. Por enquanto está assim: local screenW, screenH = guiGetScreenSize() local x, y = ( screenW/2 ), ( screenH/2 ) -- Janela principal do painel de login function mainLogin() showCursor(true) local background = dxDrawImage(0, 0, screenW, screenH, "files/background.jpg") local mainWindow = dxDrawImage(x - 166, y - 220, 332, 440, "files/main.png") local bLogin = dxDrawImage(x - 166, y + 60, 332, 45, "files/button.png", 0, 0, 0, tocolor(255,81,81,255)) local tLogin = dxDrawText("LOGIN",x - 40, y + 65, _, _, _, 2, "clear") local tText = dxDrawText("Não tem uma conta?",x - 45, y + 115, _, _, _, _, "clear") local tRegister = dxDrawText("Registre-se",x + 90, y + 115, _, _, tocolor(0,0,0,255), _, "deafault-bold") end addEventHandler("onClientRender", root, mainLogin) Spoiler Imagino que eu tenho que usar no server onPlayerJoin ou "onPlayerConnect" e usar um triggerClientEvent, para chamar o Painel de login certo? Mas temporariamente até construir o painel vou deixar assim.... Funções que eu não achei:GuiCreateEdit só que em DX, se eu entendi certo o usuário digita ali e eu posso usar o que ele digitou né? Então eu crio duas variáveis, no caso login e senha. e uso no getAccount(login,senha) Vou ter que criar mais uma na parte do register, no caso senha e senha1 e verificar se as duas estão igual. Deixar a imagem de fundo embaçada. Como eu pensei em fazer: Criar duas function, login e register A login eu chamo no onPlayerJoin/Connect não sei qual das duas, e a register quando aperta no texto registre-se. Então vem a parte que pode ser difícil, é complicado fazer uma animação?? Tipo um flip do login para o register? Aceito sugestões!! Link to comment
Other Languages Moderators Lord Henry Posted February 19, 2019 Other Languages Moderators Share Posted February 19, 2019 A função onPlayerConnect não deve ser usada neste caso. Ela só deve ser usada quando vc quer colocar um sistema de segurança que bloqueia um jogador específico de entrar no servidor, por isso ela vem com parâmetros como nick, IP, serial, versão do cliente. Este evento ocorre antes de qualquer resource ser iniciado no jogador, pois ela vem antes mesmo do que onPlayerJoin, que ocorre quando o jogador consegue estabelecer conexão com o servidor. Mas o painel, por se tratar de um script client-side, não precisa disso. Use onClientResourceStart em vez disso, que fará a função executar assim que o jogador terminar de baixar este resource. Você está com problemas em achar funções prontas em DX, se você não tem conhecimento suficiente para criar manualmente cada elemento DX, faça em CEGUI. Já foi dito que DX é mais difícil por ser necessário fazer tudo manualmente. Pra deixar a imagem de fundo embaçada vc tem 2 alternativas: Embaçar a imagem no photoshop e usar a imagem já embaçada. Usar shaders, que é outra coisa complexa de fazer, a não ser que vc encontre pronto na internet. Animações em DX não são tão difíceis. Vc vai precisar de interpolateBetween. 1 Link to comment
Gaimo Posted February 20, 2019 Author Share Posted February 20, 2019 Como é para estudo, por que não começar pelo mais fácil né?! Então passei para CEGUI, até fiz tudo na mão, sem usar o guieditor!! Aqui está o código: Spoiler local screenW, screenH = guiGetScreenSize() local x, y = ( screenW/2 ), ( screenH/2 ) --login = guiGetText(eLogin) --[[ b = button e = edit l = label ]] function login() --showChat(not isChatVisible()) local login = guiGetText(eLogin) local password = guiGetText(ePassword) showCursor(not isCursorShowing())-- Mostre o cursor se ele não está aparecendo local background = guiCreateStaticImage( 0, 0, screenW, screenH, "files/background.jpg", false ) -- Login local bLogin = guiCreateButton(x-110, y+300, 100, 40, "ENTRAR", false, background) local lLogin = guiCreateLabel(x-109, y+185, 50, 50, "USUÁRIO", false, background) local eLogin = guiCreateEdit(x-110, y+200, 210, 30, "", false, background) guiEditSetMaxLength ( eLogin, 32 ) -- Senha local lPassword = guiCreateLabel(x-109, y+235, 50 , 50, "SENHA", false, background) local ePassword = guiCreateEdit(x-110, y+250, 210, 30, "", false, background) guiEditSetMaxLength ( ePassword, 32 ) -- Registrar local bRegister = guiCreateButton( x, y+300, 100, 40, "CRIAR CONTA", false, background) addEventHandler ("onClientGUIClick", guiRoot, function() if (source == bLogin) then if login == nil then outputChatBox("LOGIN NIL") else outputChatBox("ERROR") end end end) end addEventHandler("onClientResourceStart", root, login) function createAccount() showCursor(not isCursorShowing())-- Mostre o cursor se ele não está aparecendo local background = guiCreateStaticImage( 0, 0, screenW, screenH, "files/background.jpg", false ) -- Register local bRegister = guiCreateButton(x-110, y+300, 100, 40, "CRIAR CONTA", false, background) -- Login local lLogin = guiCreateLabel(x-109, y+135, 50, 50, "USUÁRIO", false, background) local eLogin = guiCreateEdit(x-110, y+150, 210, 30, "", false, background) guiEditSetMaxLength ( eLogin, 32 ) -- Senha local lPassword = guiCreateLabel(x-109, y+185, 50 , 50, "SENHA", false, background) local ePassword = guiCreateEdit(x-110, y+200, 210, 30, "", false, background) guiEditSetMaxLength ( ePassword, 32 ) local lPassword1 = guiCreateLabel(x-109, y+235, 150 , 50, "CONFIRMAR SENHA", false, background) local ePassword1 = guiCreateEdit(x-110, y+250, 210, 30, "", false, background) guiEditSetMaxLength ( ePassword1, 32 ) -- Voltar local bBack = guiCreateButton( x, y+300, 100, 40, "VOLTAR", false, background) end Como ficou o login: Spoiler Como ficou o register: Spoiler Agora vem o meu problema, como eu verifico se o usuário digitou alguma coisa no login e senha? Testei isso: addEventHandler ("onClientGUIClick", guiRoot, function() if (source == bLogin) then if login == nil then outputChatBox("LOGIN NIL") else outputChatBox("ERROR") end end end) Mas retorna ERROR, testei no lugar de nil > "" e também retorna ERROR Outro problema é, vou precisar criar um sistema de notificação, já que o chat vai ser desativado, mas isso eu aprendo depois haha. Por enquanto o problema principal é detectar se o usuário digitou algo ou não. Link to comment
Other Languages Moderators androksi Posted February 20, 2019 Other Languages Moderators Share Posted February 20, 2019 (edited) Obtenha o texto com guiGetText e verifique se é maior que 0. Exemplo: local g_Text = guiGetText( eLogin ); if ( #g_Text > 0 ) then -- O símbolo # (hashtag) antes de uma variável que é string, retorna o valor de caracteres que essa variável possui. -- // blá, blá, blá end OBS.: Não é recomendado colocar o mesmo nome da variável para a mesma função. Você definiu "eLogin" para o campo de login e registro. Sendo assim, use sempre tabelas para armazenar e poupar Memória RAM do jogador. local CEGUI = { window = { }, button = { }, edit = { }, gridlist = { } } -- // Exemplo com números CEGUI.window[ 1 ] = guiCreateWindow( ... ); CEGUI.button[ 1 ] = guiCreateButton( ... ); CEGUI.edit[ 1 ] = guiCreateEdit( ... ); CEGUI.edit[ 2 ] = guiCreateEdit( ... ); -- // Exemplo com strings (nomes) CEGUI.window[ "janelaPrincipal" ] = guiCreateWindow( ... ); CEGUI.button[ "botãoRegistro" ] = guiCreateButton( ... ); CEGUI.edit[ "campoUsuário" ] = guiCreateEdit( ... ); CEGUI.edit[ "campoSenha" ] = guiCreateEdit( ... ); --[[ Você pode usar tanto números quanto nomes. (Para mim, nomes são melhores para facilitar o que cada um é) SIM! Você pode usar acentuação caso esteja usando strings. ]]-- Edited February 20, 2019 by asrzk 1 Link to comment
Other Languages Moderators Lord Henry Posted February 20, 2019 Other Languages Moderators Share Posted February 20, 2019 1 hour ago, Gaimo said: Então passei para CEGUI, até fiz tudo na mão, sem usar o guieditor!! BOAAAAA!!! Aí sim vi progresso! Sobre o seu código, as linhas 16 e 17 provavelmente darão erro, pois você está tentando obter o texto dos campos que ainda não foram criados. E a sua função de clique, eu faria ela da seguinte maneira: addEventHandler ("onClientGUIClick", getRootElement(), function() if (source == bLogin) then if guiGetText(eLogin) == "" then -- Se o campo de login está vazio, então: outputChatBox("LOGIN NIL") else outputChatBox ("Logou.") end end end) 1 Link to comment
DNL291 Posted February 21, 2019 Share Posted February 21, 2019 On 19/02/2019 at 20:12, Lord Henry said: Pra deixar a imagem de fundo embaçada vc tem 2 alternativas: Embaçar a imagem no photoshop e usar a imagem já embaçada. Usar shaders, que é outra coisa complexa de fazer, a não ser que vc encontre pronto na internet. Tem este shader que faz esse efeito: https://community.multitheftauto.com/index.php?p=resources&s=details&id=7349 Uma dica pra você otimizar o evento "onClientGUIClick" é sempre definir guiRoot (assim como você fez no seu código) em vez de root/getRootElement(). Isso quando você não anexar o evento diretamente a um elemento GUI. guiRoot irá englobar todos os elementos GUI criados no próprio resource, enquanto root fará executar para todos GUIs criados. Sobre usar o guieditor, pessoalmente eu prefiro sempre usar, pois crio esboços antes de fazer meus projetos, e isso também ajuda muito quem não tem muito conhecimento, vai te poupar tempo posicionando sem nenhuma ferramenta. É possível também usar uma folha pra calcular manualmente. 1 Link to comment
Gaimo Posted February 21, 2019 Author Share Posted February 21, 2019 Código atual: local screenW, screenH = guiGetScreenSize() local x, y = ( screenW/2 ), ( screenH/2 ) local CEGUI = { window = { }, button = { }, edit = { }, label = { }, image = { } } function login() --showChat(not isChatVisible()) showCursor(true)-- Mostre o cursor se ele não está aparecendo CEGUI.image["background"] = guiCreateStaticImage( 0, 0, screenW, screenH, "files/background.jpg", false ) -- Login CEGUI.button["login"] = guiCreateButton(x-110, y+300, 100, 40, "ENTRAR", false, CEGUI.image["background"]) CEGUI.label["login"] = guiCreateLabel(x-109, y+185, 50, 50, "USUÁRIO", false, CEGUI.image["background"]) CEGUI.edit["input_login"] = guiCreateEdit(x-110, y+200, 210, 30, "", false, CEGUI.image["background"]) guiEditSetMaxLength ( CEGUI.edit["input_login"], 32 ) -- Senha CEGUI.label["password"] = guiCreateLabel(x-109, y+235, 50 , 50, "SENHA", false, CEGUI.image["background"]) CEGUI.label["input_password"] = guiCreateEdit(x-110, y+250, 210, 30, "", false, CEGUI.image["background"]) guiEditSetMaxLength ( CEGUI.label["input_password"], 32 ) -- Registrar CEGUI.button["create_account"] = guiCreateButton( x, y+300, 100, 40, "CRIAR CONTA", false, CEGUI.image["background"]) addEventHandler ("onClientGUIClick", guiRoot, function() if (source == CEGUI.button["create_account"]) then createAccount() end end) end addEventHandler("onClientResourceStart", root, login) function createAccount() showCursor(true) CEGUI.image["background"] = guiCreateStaticImage( 0, 0, screenW, screenH, "files/background.jpg", false ) -- Register CEGUI.button["register"] = guiCreateButton(x-110, y+300, 100, 40, "CRIAR CONTA", false, CEGUI.image["background"]) -- Login CEGUI.label["login"] = guiCreateLabel(x-109, y+135, 50, 50, "USUÁRIO", false, CEGUI.image["background"]) CEGUI.edit["input_login"] = guiCreateEdit(x-110, y+150, 210, 30, "", false, CEGUI.image["background"]) guiEditSetMaxLength ( CEGUI.edit["input_login"], 32 ) -- Senha CEGUI.label["password"] = guiCreateLabel(x-109, y+185, 50 , 50, "SENHA", false, CEGUI.image["background"]) CEGUI.edit["input_password"] = guiCreateEdit(x-110, y+200, 210, 30, "", false, CEGUI.image["background"]) guiEditSetMaxLength ( CEGUI.edit["input_password"], 32 ) CEGUI.label["password1"] = guiCreateLabel(x-109, y+235, 150 , 50, "CONFIRMAR SENHA", false, CEGUI.image["background"]) CEGUI.edit["input_password1"] = guiCreateEdit(x-110, y+250, 210, 30, "", false, CEGUI.image["background"]) guiEditSetMaxLength ( CEGUI.edit["input_password1"], 32 ) -- Voltar CEGUI.button["back"] = guiCreateButton( x, y+300, 100, 40, "VOLTAR", false, CEGUI.image["background"]) addEventHandler ("onClientGUIClick", guiRoot, function() if (source == CEGUI.button["back"]) then login() end end) end Qual a maneira correta de fazer para trocar do login para o register? Porque assim está travando muito, se ir do login para o register e voltar umas duas vezes começa um baita lag. 6 hours ago, asrzk said: OBS.: Não é recomendado colocar o mesmo nome da variável para a mesma função. Você definiu "eLogin" para o campo de login e registro. Sendo assim, use sempre tabelas para armazenar e poupar Memória RAM do jogador. Muito bom essa de usar tabela, gostei!! 1 hour ago, DNL291 said: Uma dica pra você otimizar o evento "onClientGUIClick" é sempre definir guiRoot (assim como você fez no seu código) em vez de root/getRootElement(). Isso quando você não anexar o evento diretamente a um elemento GUI. guiRoot irá englobar todos os elementos GUI criados no próprio resource, enquanto root fará executar para todos GUIs criados. Eu usei porque tu me passou em um outro script hahaha, mas agora aprendi a diferença de cada um. No começo eu não entendia muito bem o source, agora já peguei bem o que é, já o root eu ainda estou com dificuldade, só root trata-se do jogador? Link to comment
Other Languages Moderators androksi Posted February 21, 2019 Other Languages Moderators Share Posted February 21, 2019 9 minutes ago, Gaimo said: Qual a maneira correta de fazer para trocar do login para o register? Porque assim está travando muito, se ir do login para o register e voltar umas duas vezes começa um baita lag. Quando você aciona a função de aparecer o login ou registro, você está CRIANDO novamente o conteúdo, esse é o motivo do travamento. Use simplesmente a função guiSetVisible para deixar a window visível. Outro detalhe: você está usando, novamente, o mesmo nome para dois elementos. Isto: CEGUI.image["background"] = guiCreateStaticImage( 0, 0, screenW, screenH, "files/background.jpg", false ) Troque o nome da janela de registro para "background_register" e a janela de login para "background_login". Daí, para fazer aparecer ou ocultar, basta fazer isso: addEventHandler ("onClientGUIClick", guiRoot, function() if (source == CEGUI.button["back"]) then guiSetVisible( CEGUI.image[ "background_login" ], true ); -- // Irá voltar para a janela de login guiSetVisible( CEGUI.image[ "background_register" ], false ); -- // Irá ocultar a janela de registro e seus respectivos elementos que estão anexados. end end end) 2 Link to comment
Other Languages Moderators Lord Henry Posted February 21, 2019 Other Languages Moderators Share Posted February 21, 2019 1 hour ago, DNL291 said: Uma dica pra você otimizar o evento "onClientGUIClick" é sempre definir guiRoot (assim como você fez no seu código) em vez de root/getRootElement(). Isso quando você não anexar o evento diretamente a um elemento GUI. guiRoot irá englobar todos os elementos GUI criados no próprio resource, enquanto root fará executar para todos GUIs criados. Pois é, o carinha tinha usado isso e até fiquei em dúvida se era válido ou não. Não achei na Wiki falando dessa variável nativa. Link to comment
Other Languages Moderators Lord Henry Posted February 21, 2019 Other Languages Moderators Share Posted February 21, 2019 (edited) Edit: Acabei de achar...Predefined variables list Edited February 21, 2019 by Lord Henry Link to comment
Gaimo Posted February 21, 2019 Author Share Posted February 21, 2019 11 hours ago, asrzk said: Quando você aciona a função de aparecer o login ou registro, você está CRIANDO novamente o conteúdo, esse é o motivo do travamento. Use simplesmente a função guiSetVisible para deixar a window visível. Imaginei que isso estava acontecendo, para resolver fiz diferente, coloquei tudo em uma única função. Já que é pra fazer altamente otimizado, AMO OTIMIZAÇÃO! Quando o jogador logar eu preciso deletar todos os elementos criados né? script atual: local screenW, screenH = guiGetScreenSize() local x, y = ( screenW/2 ), ( screenH/2 ) local CEGUI = { window = { }, button = { }, edit = { }, label = { }, image = { } } function panel_login() showCursor(true) -- MAIN LOGIN --------------------------------------------------------------------------------------------------------- CEGUI.image["background_login"] = guiCreateStaticImage( 0, 0, screenW, screenH, "files/background.jpg", false ) -- Login CEGUI.button["login"] = guiCreateButton(x-110, y+300, 100, 40, "ENTRAR", false, CEGUI.image["background_login"]) CEGUI.label["login"] = guiCreateLabel(x-109, y+185, 50, 50, "USUÁRIO", false, CEGUI.image["background_login"]) CEGUI.edit["input_login"] = guiCreateEdit(x-110, y+200, 210, 30, "", false, CEGUI.image["background_login"]) guiEditSetMaxLength ( CEGUI.edit["input_login"], 32 ) -- Senha CEGUI.label["password"] = guiCreateLabel(x-109, y+235, 50 , 50, "SENHA", false, CEGUI.image["background_login"]) CEGUI.label["input_password"] = guiCreateEdit(x-110, y+250, 210, 30, "", false, CEGUI.image["background_login"]) guiEditSetMaxLength ( CEGUI.label["input_password"], 32 ) -- Registrar CEGUI.button["create_account"] = guiCreateButton( x, y+300, 100, 40, "CRIAR CONTA", false, CEGUI.image["background_login"]) -- MAIN REGISTER --------------------------------------------------------------------------------------------------------- CEGUI.image["background_register"] = guiCreateStaticImage( 0, 0, screenW, screenH, "files/background.jpg", false ) -- Register CEGUI.button["register"] = guiCreateButton(x-110, y+300, 100, 40, "CRIAR CONTA", false, CEGUI.image["background_register"]) -- Login CEGUI.label["login"] = guiCreateLabel(x-109, y+135, 50, 50, "USUÁRIO", false, CEGUI.image["background_register"]) CEGUI.edit["input_login"] = guiCreateEdit(x-110, y+150, 210, 30, "", false, CEGUI.image["background_register"]) guiEditSetMaxLength ( CEGUI.edit["input_login"], 32 ) -- Senha CEGUI.label["password"] = guiCreateLabel(x-109, y+185, 50 , 50, "SENHA", false, CEGUI.image["background_register"]) CEGUI.edit["input_password"] = guiCreateEdit(x-110, y+200, 210, 30, "", false, CEGUI.image["background_register"]) guiEditSetMaxLength ( CEGUI.edit["input_password"], 32 ) CEGUI.label["password1"] = guiCreateLabel(x-109, y+235, 150 , 50, "CONFIRMAR SENHA", false, CEGUI.image["background_register"]) CEGUI.edit["input_password1"] = guiCreateEdit(x-110, y+250, 210, 30, "", false, CEGUI.image["background_register"]) guiEditSetMaxLength ( CEGUI.edit["input_password1"], 32 ) -- Voltar CEGUI.button["back"] = guiCreateButton( x, y+300, 100, 40, "VOLTAR", false, CEGUI.image["background_register"]) guiSetVisible(CEGUI.image["background_register"], false) -- O que acontece quando um botão é pressionado addEventHandler ("onClientGUIClick", guiRoot, function() if source == CEGUI.button["create_account"] then guiSetVisible(CEGUI.image["background_login"], false) guiSetVisible(CEGUI.image["background_register"], true) elseif source == CEGUI.button["back"] then guiSetVisible(CEGUI.image["background_register"], false) guiSetVisible(CEGUI.image["background_login"], true) end end) end addEventHandler("onClientResourceStart", root, panel_login) Agora ficou MUITO RÁPIDO, a troca do login para o register!! Preciso aprender a criar um sistema de notificação, vou procurar uns aqui para ver como eles funcionam. Ou aprender a usar o interpolateBetween como o Lord Henry sugeriu. Link to comment
Other Languages Moderators androksi Posted February 21, 2019 Other Languages Moderators Share Posted February 21, 2019 31 minutes ago, Gaimo said: Quando o jogador logar eu preciso deletar todos os elementos criados né? Não é necessário, mas como você disse 32 minutes ago, Gaimo said: AMO OTIMIZAÇÃO! Então sim, pode destruir os elementos e anular as variáveis. A propósito, vejo que você ainda está errando naquilo que eu lhe disse, sobre nomes iguais em tabelas. Veja o seu código com atenção e tente-o corrigir. Cada vez que você posta algo aqui, fico surpreendido com sua evolução. De fato, colocar todos os elementos dentro de apenas uma função, fica bem otimizado. Seus eventos estão otimizados. Lembre-se: verifique o seu código e tente encontrar os erros de repetição. 1 1 Link to comment
Gaimo Posted February 21, 2019 Author Share Posted February 21, 2019 local screenW, screenH = guiGetScreenSize() local x, y = ( screenW/2 ), ( screenH/2 ) local CEGUI = { window = { }, button = { }, edit = { }, label = { }, image = { } } function panel_login() showCursor(true) -- MAIN LOGIN --------------------------------------------------------------------------------------------------------- CEGUI.image["background_login"] = guiCreateStaticImage( 0, 0, screenW, screenH, "files/background.jpg", false ) -- Login CEGUI.button["ML_login"] = guiCreateButton(x-110, y+300, 100, 40, "ENTRAR", false, CEGUI.image["background_login"]) CEGUI.label["ML_login"] = guiCreateLabel(x-109, y+185, 50, 50, "USUÁRIO", false, CEGUI.image["background_login"]) CEGUI.edit["ML_input_login"] = guiCreateEdit(x-110, y+200, 210, 30, "", false, CEGUI.image["background_login"]) guiEditSetMaxLength ( CEGUI.edit["ML_input_login"], 32 ) -- Senha CEGUI.label["ML_password"] = guiCreateLabel(x-109, y+235, 50 , 50, "SENHA", false, CEGUI.image["background_login"]) CEGUI.label["ML_input_password"] = guiCreateEdit(x-110, y+250, 210, 30, "", false, CEGUI.image["background_login"]) guiEditSetMaxLength ( CEGUI.label["ML_input_password"], 32 ) -- Registrar CEGUI.button["create_account"] = guiCreateButton( x, y+300, 100, 40, "CRIAR CONTA", false, CEGUI.image["background_login"]) -- MAIN REGISTER --------------------------------------------------------------------------------------------------------- CEGUI.image["background_register"] = guiCreateStaticImage( 0, 0, screenW, screenH, "files/background.jpg", false ) -- Register CEGUI.button["MR_register"] = guiCreateButton(x-110, y+300, 100, 40, "CRIAR CONTA", false, CEGUI.image["background_register"]) -- Login CEGUI.label["MR_login"] = guiCreateLabel(x-109, y+135, 50, 50, "USUÁRIO", false, CEGUI.image["background_register"]) CEGUI.edit["MR_input_login"] = guiCreateEdit(x-110, y+150, 210, 30, guiGetText(CEGUI.edit["ML_input_login"]), false, CEGUI.image["background_register"]) guiEditSetMaxLength ( CEGUI.edit["MR_input_login"], 32 ) -- Senha CEGUI.label["MR_password"] = guiCreateLabel(x-109, y+185, 50 , 50, "SENHA", false, CEGUI.image["background_register"]) CEGUI.edit["MR_input_password"] = guiCreateEdit(x-110, y+200, 210, 30, "", false, CEGUI.image["background_register"]) guiEditSetMaxLength ( CEGUI.edit["MR_input_password"], 32 ) CEGUI.label["MR_password1"] = guiCreateLabel(x-109, y+235, 150 , 50, "CONFIRMAR SENHA", false, CEGUI.image["background_register"]) CEGUI.edit["MR_input_password1"] = guiCreateEdit(x-110, y+250, 210, 30, "", false, CEGUI.image["background_register"]) guiEditSetMaxLength ( CEGUI.edit["MR_input_password1"], 32 ) -- Voltar CEGUI.button["back"] = guiCreateButton( x, y+300, 100, 40, "VOLTAR", false, CEGUI.image["background_register"]) guiSetVisible(CEGUI.image["background_register"], false) -- O que acontece quando um botão é pressionado addEventHandler ("onClientGUIClick", guiRoot, function() if source == CEGUI.button["create_account"] then guiSetVisible(CEGUI.image["background_login"], false) guiSetVisible(CEGUI.image["background_register"], true) elseif source == CEGUI.button["back"] then guiSetVisible(CEGUI.image["background_register"], false) guiSetVisible(CEGUI.image["background_login"], true) end end) end addEventHandler("onClientResourceStart", root, panel_login) Imagino que o problema de nomes repetidos foi resolvido agora kkkkkkk Posso usar o mesmo em tabelas diferentes né ? CEGUI.button["ML_login"] = guiCreateButton(x-110, y+300, 100, 40, "ENTRAR", false, CEGUI.image["background_login"]) CEGUI.label["ML_login"] = guiCreateLabel(x-109, y+185, 50, 50, "USUÁRIO", false, CEGUI.image["background_login"]) Uma é CEGUI.button a outra CEGUI.label. Testei pegar o que o usuário digitou no login para passar para o login do register mas não funcionou, ele só pega o que está dentro das aspas: CEGUI.edit["ML_input_login"] = guiCreateEdit(x-110, y+200, 210, 30, "", false, CEGUI.image["background_login"]) CEGUI.edit["MR_input_login"] = guiCreateEdit(x-110, y+150, 210, 30, guiGetText(CEGUI.edit["ML_input_login"]), false, CEGUI.image["background_register"]) Mas ele já cria o edit com o que tem dentro das aspas antes de o usuário digitar qualquer coisa. Existe uma maneira de só editar o CEGUI.edit["ML_input_login"] em vez de criar ele novamente? Ou eu teria que deletar e criar ele? Pra ele "atualizar". Link to comment
Other Languages Moderators Lord Henry Posted February 21, 2019 Other Languages Moderators Share Posted February 21, 2019 (edited) 14 minutes ago, Gaimo said: Posso usar o mesmo em tabelas diferentes né ? Por se tratar de índices de tabelas, pode repetir sim. Da mesma forma que as tabelas indexadas com números repetem os índices de outras tabelas com números. Índices de string também podem repetir, mas não na mesma tabela. 14 minutes ago, Gaimo said: Existe uma maneira de só editar o CEGUI.edit["ML_input_login"] em vez de criar ele novamente? Ou eu teria que deletar e criar ele? Pra ele "atualizar". Já tentou usando guiSetText? Edited February 21, 2019 by Lord Henry 1 Link to comment
Gaimo Posted February 21, 2019 Author Share Posted February 21, 2019 Client: local thePlayer = getLocalPlayer() -- O que acontece quando um botão é pressionado addEventHandler ("onClientGUIClick", guiRoot, function() -- Quando clica no botão "login" if source == CEGUI.button["ML_login"] then local g_login = guiGetText(CEGUI.edit["ML_input_login"]) local g_password = guiGetText(CEGUI.edit["ML_input_password"]) -- Se o login for menor que 4 caracteres if ( #g_login >= 4 ) then -- Se a senha é menor que 6 caracteres if ( #g_password >= 6 ) then triggerServerEvent("loginEvent", resourceRoot, thePlayer, g_login, g_password) else outputChatBox("A senha precisa ter no mínimo 6 caracteres!") end else outputChatBox("O login precisa ter no mínimo 4 caracteres!") end -- Quando clica no botão "criar conta" vai para a área de registro elseif source == CEGUI.button["create_account"] then guiSetText(CEGUI.edit["MR_input_login"], guiGetText(CEGUI.edit["ML_input_login"])) guiSetVisible(CEGUI.image["background_login"], false) guiSetVisible(CEGUI.image["background_register"], true) -- Quando clica no botão "voltar" elseif source == CEGUI.button["back"] then guiSetText(CEGUI.edit["ML_input_login"], guiGetText(CEGUI.edit["MR_input_login"])) guiSetVisible(CEGUI.image["background_register"], false) guiSetVisible(CEGUI.image["background_login"], true) -- Quando clica no botão "criar conta" tenta criar a conta elseif source == CEGUI.button["MR_register"] then local g_login = guiGetText(CEGUI.edit["MR_input_login"]) local g_password = guiGetText(CEGUI.edit["MR_input_password"]) local g_password1 = guiGetText(CEGUI.edit["MR_input_password1"]) -- Se o login for menor que 4 caracteres if ( #g_login >= 4 ) then -- Se as senhas forem diferentes if ( g_password == g_password1 ) then -- Se a senha é menor que 6 caracteres if ( #g_password >= 6 ) then triggerServerEvent("createAccountEvent", resourceRoot, g_login, g_password) else outputChatBox("A senha precisa ter no mínimo 6 caracteres!") end else outputChatBox("As senhas não coincidem") end else outputChatBox("O login precisa ter no mínimo 4 caracteres!") end end end) Server: function createAccount(username, password) local account = getAccount ( username, password ) if not account then addAccount(username, password) outputChatBox("Sucess") else outputChatBox("Error") end end addEvent("createAccountEvent", true) addEventHandler("createAccountEvent", resourceRoot, createAccount) function login(thePlayer, username, password) outputChatBox(thePlayer) outputChatBox(username) outputChatBox(password) local account = getAccount ( username, password ) if account then logIn(thePlayer, username, password) outputChatBox("Sucess") else outputChatBox("Error") end end addEvent("loginEvent", true) addEventHandler("loginEvent", resourceRoot, login) Problema: local thePlayer = getLocalPlayer() triggerServerEvent("loginEvent", resourceRoot, thePlayer, g_login, g_password) ---------------------------------------------------------------------------------------------------------------- -- Testei isso também triggerServerEvent("loginEvent", resourceRoot, getLocalPlayer(), g_login, g_password) Como eu passo o jogador que clicou em login para o triggerServerEvent? Aparentemente tudo está funcionando só não consigo enviar o jogador que clicou no botão para o server. Link to comment
Other Languages Moderators Lord Henry Posted February 21, 2019 Other Languages Moderators Share Posted February 21, 2019 Qual erro aparece no debugscript? E essa sua linha 1 do client é totalmente inútil. Só vc usar a variável nativa localPlayer em qualquer lugar do seu script client-side que é o mesmo que getLocalPlayer(). Não precisa criar uma variável pra ele. Link to comment
Gaimo Posted February 21, 2019 Author Share Posted February 21, 2019 Desculpa falta de atenção minha, agora está funcionando o login e register, só falta adicionar uma notificação para o jogador e desativar o painel quando o jogador entra. Link to comment
Other Languages Moderators Lord Henry Posted February 21, 2019 Other Languages Moderators Share Posted February 21, 2019 Ou destruir o painel quando o player logar. Já que ele será recriado automaticamente quando o player entrar de novo no server. Link to comment
Other Languages Moderators androksi Posted February 21, 2019 Other Languages Moderators Share Posted February 21, 2019 Exemplo com localPlayer -- // CLIENT-SIDE triggerServerEvent( "someTrigger", localPlayer, 1, 2, 3 ); -- // SERVER-SIDE addEvent( "someTrigger", true ); addEventHandler( "someTrigger", root, function( n1, n2, n3 ) print( n1 ); -- // retorna 1 print( n2 ); -- // retorna 2 print( n3 ); -- // retorna 3 --[[ Quando você usa o parâmetro 'localPlayer' em algum triggerServerEvent, o elemento retornado é source. Abaixo está um exemplo simples de como obter o nickname do jogador que executou o 'someTrigger'. ]]-- print( getPlayerName( source ) ); end ); Exemplo com resourceRoot -- // CLIENT-SIDE triggerServerEvent( "someTrigger", resourceRoot, 1, 2, 3 ); -- // SERVER-SIDE addEvent( "someTrigger", true ); addEventHandler( "someTrigger", resourceRoot, function( n1, n2, n3 ) print( n1 ); -- // retorna 1 print( n2 ); -- // retorna 2 print( n3 ); -- // retorna 3 --[[ Agora, quando você usa o parâmetro 'resourceRoot' em algum triggerServerEvent, o elemento retornado é client (que seria o mesmo caso do source, porém client). Veja o exemplo abaixo. ]]-- print( getPlayerName( client ) ); end ); 2 Link to comment
DNL291 Posted February 21, 2019 Share Posted February 21, 2019 Uma observação: no evento onClientResourceStart troque root por resourceRoot com root a janela será criada quando qualquer resource do server for iniciado. 1 Link to comment
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