C4mpN~ Posted April 7, 2018 Share Posted April 7, 2018 Bom pessoal Preciso De Ajuda Com Um Script Bom Eu Ainda Sou Iniciante e pretendo tirar Minhas Duvidas!!! Bom Eu Queria Saber Como Faço isso: --Fazer Com Que Um Botao Ao Ser apertado Abrir Uma nova janela em "Gui" ou em "DX" quem poder me ajudar ficarei grato tmjj Link to comment
Other Languages Moderators Lord Henry Posted April 7, 2018 Other Languages Moderators Share Posted April 7, 2018 Favor não usar formatação de fonte em tamanhos muito grandes, ninguém aqui é cego e isso pode ser considerado como Spam. Voltando a sua dúvida, sugiro que leia a Wiki na parte de GuiCreateWindow, já que vc precisa primeiramente criar uma janela GUI, com os botões e textos nela, depois vc configura uma tecla para fazer essa janela aparecer na tela. Fiz este exemplo para mostrar algumas funções principais, como o guiCreateWindow, guiCreateLabel, guiCreateButton, guiSetVisible, showCursor e onClientGUIClick function criarPainel () ----------------- CRIA A JANELA ------------------------------------------------------------------ janelaPrincipal = guiCreateWindow (0.4, 0.4, 0.2, 0.2, "Janela Qualquer", true) -- Cria a janela. mensagem = guiCreateLabel (0.05, 0.2, 1, 0.2, "Texto de informação qualquer aqui.\nOutra linha de informação aqui.", true, janelaPrincipal) -- Cria o texto na janela. botaoFechar = guiCreateButton (0.4, 0.7, 0.2, 0.2, "FECHAR", true, janelaPrincipal) -- Cria o botão na janela. guiSetVisible (janelaPrincipal, false) -- Oculta a janela depois dela ser criada, para que ela não apareça ao iniciar o resource. ------------- MOSTRA A JANELA (pela tecla K) ----------------------------------------------------- function mostraPainel (key, keystate) guiSetVisible (janelaPrincipal, true) -- Torna o painel visivel. showCursor (true) -- Mostra o ponteiro do mouse na tela. end bindKey ("k", "down", mostraPainel) -- Executa a função mostraPainel ao apertar a tecla K. ----------- OCULTA A JANELA (clicando no botão da janela) ---------------------------------------- function ocultaPainel (button, state) if button == "left" then -- Se o botão do mouse que clicou for o botão esquerdo, então: guiSetVisible (janelaPrincipal, false) -- Torna o painel invisivel. showCursor (false) -- Oculta o ponteiro do mouse. end end addEventHandler ("onClientGUIClick", botaoFechar, ocultaPainel, false) -- Executa a função ocultaPainel ao clicar no botaoFechar. end addEventHandler ("onClientResourceStart", getRootElement(), criarPainel) -- Faz isso tudo ao iniciar o resource no jogador. Sugiro que leia cada link mencionado acima para saber como funciona cada um. Deixei comentários pelo código para ficar mais fácil de entender. 1 Link to comment
C4mpN~ Posted April 7, 2018 Author Share Posted April 7, 2018 Amigo Voce Não Entendeu kkkk eu falo em si outro botao na janela para abrir outra janela Link to comment
Other Languages Moderators Lord Henry Posted April 7, 2018 Other Languages Moderators Share Posted April 7, 2018 (edited) Ah bom. Só criar o botão que vai ficar aparecendo sempre na tela e não ocultar ele ao iniciar o resource. Faça assim: function criarPainel () local screenX, screenY = guiGetScreenSize () -- Recebe a resolução atual do jogador. (no meu caso: screenX = 1366 e screenY = 768) ----------------- CRIA A JANELA ------------------------------------------------------------------ janelaPrincipal = guiCreateWindow (0.4, 0.4, 0.2, 0.2, "Janela Qualquer", true) -- Cria a janela. mensagem = guiCreateLabel (0.05, 0.2, 1, 0.2, "Texto de informação qualquer aqui.\nOutra linha de informação aqui.", true, janelaPrincipal) -- Cria o texto na janela. guiSetVisible (janelaPrincipal, false) -- Oculta a janela depois dela ser criada, para que ela não apareça ao iniciar o resource. botaoGeral = guiCreateButton (0, screenY/2, 30, 30, ">>", false) -- Cria o botão na tela. ----------- MOSTRA/OCULTA A JANELA (clicando no botão da tela) ---------------------------------------- function mostraPainel (button, state) if button == "left" then if not isVisible then guiSetVisible (janelaPrincipal, true) -- Torna o painel visivel. showCursor (true) -- Mostra o cursor na tela. else guiSetVisible (janelaPrincipal, false) -- Torna o painel invisivel. showCursor (false) -- Oculta o cursor da tela. end isVisible = not isVisible -- Alterna entre visivel/invisivel a cada vez que clicar no botão. end end addEventHandler ("onClientGUIClick", botaoGeral, mostraPainel, false) -- Executa a função mostraPainel ao clicar no botao >> end addEventHandler ("onClientResourceStart", getRootElement(), criarPainel) -- Faz isso tudo ao iniciar o resource no jogador. Obs: Para conseguir clicar no botão da tela, vc pode usar a tecla T ou o F8 (pra mostrar o cursor). Edited April 7, 2018 by Lord Henry 1 Link to comment
C4mpN~ Posted April 7, 2018 Author Share Posted April 7, 2018 Amigo Aproveitando Esse Topico, saberia como transformar um dx draw rectangle em um botao? muito obrigado Link to comment
Other Languages Moderators Lord Henry Posted April 7, 2018 Other Languages Moderators Share Posted April 7, 2018 (edited) 4 minutes ago, C4mpN~ said: Amigo Aproveitando Esse Topico, saberia como transformar um dx draw rectangle em um botao? muito obrigado Cara, a inteface DX não é recomendável para criar botões, a principal função dela é mostrar informações em tempo real (que devem ser atualizadas o tempo todo), para interfaces onde o usuário vai interagir (clicar, digitar, etc) é utilizada a interface nativa GUI. Mas respondendo a sua pergunta, quando vc clica na tela, é possível obter a coordenada X, Y da tela onde foi clicado. Sabendo disso, é possível determinar qual "botão" deve ser ativado. Para isso, usa-se OnClientGUIClick (que apesar de ser usado mais em GUI, funciona para DX também) Edited April 7, 2018 by Lord Henry Link to comment
C4mpN~ Posted April 7, 2018 Author Share Posted April 7, 2018 BOM VAI SER UMA GRANDE LUTA CONSEGUIR FAZER ISSO PQ EU AINDA SOU BEM INICIANTE NO LUA MAIS MUITO OBRIGADO MANNO, PQ VI VARIOS PAINEIS EM DX NA INTERNET E TENHO VONTADE DE APRENDER, MSM ASSIM MUITO OBRIGADO!!! Link to comment
DNL291 Posted April 7, 2018 Share Posted April 7, 2018 Sobre o botão em DX que você comentou, te recomendo ler estes 2 tópicos e tentar entender as explicações e o código: https://forum.multitheftauto.com/topic/79017-resolvidoajuda-com-dx/ - Tem uma explicação bem simples de entender sobre botão-DX https://forum.multitheftauto.com/topic/92734-abrir-outro-painel-com-o-botão-dx/ - Um código mais aprofundado que você usa a tecla F2 pra abrir um DX e se um certo local desse DX for clicado, vai abrir outro DX 1 Link to comment
Other Languages Moderators Lord Henry Posted April 7, 2018 Other Languages Moderators Share Posted April 7, 2018 (edited) Dai depende do seu objetivo. Você quer fazer um painel mais bonito ou mais leve? (leve me refiro a código mais simples e fácil) Se vc quer fazer um painel bonito, sem se importar com performance nem manutenção, dai não há problema em fazer painel DX para interação. A vantagem do painel DX, é que ele é criado a cada Frame (diferente do GUI, que vc cria 1 vez e ele fica na tela), isso significa que é muito mais fácil colocar efeitos de movimento e animações em painéis DX e realmente, existem painéis DX com efeitos muito bonitos e não tão pesados, que passam realmente a impressão de um sistema mais profissional. Por se tratar tudo de funções client-side, não há qualquer problema de performance para outros jogadores do servidor que não estão com o painel aberto. Mas como eu falei anteriormente, os painéis DX são muito mais complexos de se fazer manutenção, uma vez que todos os seus elementos são totalmente configuráveis, nada é automático. (a GUI, já vem com o layout pronto) Se vc quer mudar a posição de um "botão" DX, você deve reconfigurar sua "área clicável", pois o elemento DX não é um botão (o botão GUI é um elemento clicável por padrão, então basta mover o botão e sua área clicável vai se mover junto). Vou refazer todo o exemplo anterior de GUI para DX. Note que os elementos DX não são relativos, isso significa que eles só aceitam tamanhos e posições em pixels. (os elementos GUI aceitam tanto posições relativas quanto posições por pixel, dá pra fazer gambiarra pra usar posição relativa em DX, mas isso é complexo demais e não quero lhe confundir ainda mais) function criarPainel () local screenX, screenY = guiGetScreenSize () -- Recebe a resolução atual do jogador. (no meu caso: screenX = 1366 e screenY = 768) ----------------- EXECUTA A JANELA NA TELA ------------------------------------------------------------------ local fonteInterativa = "default" local alphaInterativo = 150 function renderDx () dxDrawRectangle (screenX/2-140, screenY/2-80, 280, 160, tocolor (0, 0, 0, 150)) -- Cria o retângulo maior, que será a janela principal. To color (Red, Green, Blue, Alpha) determina sua cor e transparência. dxDrawRectangle (screenX/2-135, screenY/2-75, 270, 20, tocolor (0, 0, 0, 150)) -- Cria o retângulo do título da janela principal. dxDrawText ("Janela Qualquer", screenX/2-135, screenY/2-75, screenX/2+135, screenY/2-55, tocolor (255, 255, 255, 255), 1, "default-bold", "center", "center") -- Cria o título da janela principal dxDrawText ("Texto de informação qualquer aqui.\nOutra linha de informação aqui.", screenX/2-130, screenY/2-40, screenX/2+130, screenY/2, tocolor (255, 255, 255, 255), 1) end function renderButton () dxDrawRectangle (0, screenY/2, 30, 30, tocolor (0, 0, 0, alphaInterativo)) dxDrawText (">>", 0, screenY/2, 30, screenY/2+30, tocolor (255, 255, 255, 255), 1, fonteInterativa, "center", "center") end addEventHandler ("onClientRender", getRootElement(), renderButton) -- Começa a renderizar esse botão assim q inicia o resource. Chamando essa função a cada frame. ----------- MOSTRA/OCULTA A JANELA (clicando no botão da tela) ---------------------------------------- function mostraPainel (button, state, posX, posY, worldX, worldY, worldZ) if button == "left" and state == "up" then if (posX >= 0) and (posX <= 30) and (posY >= screenY/2) and (posY <= screenY/2+30) then -- Se a posição clicada na tela estiver dentro do retângulo >> então: if not isVisible then addEventHandler ("onClientRender", getRootElement(), renderDx) -- Começa a renderizar o painel DX na tela. Chamando a função renderDx a cada frame. else removeEventHandler ("onClientRender", getRootElement(), renderDx) -- Para de renderizar o painel DX na tela. theCursor () -- Executa a função de mostrar/ocultar o cursor. end isVisible = not isVisible -- Alterna entre visivel/invisivel a cada vez que clicar no botão. end end end addEventHandler ("onClientClick", getRootElement(), mostraPainel) -- Executa a função mostraPainel ao clicar em qualquer lugar da tela. --------------- ALTERNA A FONTE DO BOTÃO (passando o cursor em cima do botão)------------------------------- function mouseOnButton (x, y, pixelX, pixelY, worldX, worldY, worldZ) if (pixelX >= 0) and (pixelX <= 30) and (pixelY >= screenY/2) and (pixelY <= screenY/2+30) then -- Se o cursor estiver em cima do botão >> então: fonteInterativa = "default-bold" alphaInterativo = 255 else -- Faz o texto do botão >> ficar em negrito e seu retângulo opaco, enquanto o cursor estiver em cima dele e volta ao normal se não estiver. fonteInterativa = "default" alphaInterativo = 150 end end addEventHandler ("onClientCursorMove", getRootElement(), mouseOnButton) -- Executa a função mouseOnButton toda vez que o cursor se movimenta. -------------- EVITAR BUG ----------------------------------------------------------------------------- function theCursor () -- Por algum motivo, o cursor mostrado pelo T, ou Y ou F8 não funciona na função onClientClick. Então mostra/oculta o cursor pressionando Z. if not cursorVisible then showCursor (true) else showCursor (false) end cursorVisible = not cursorVisible end bindKey ("z", "down", theCursor) end addEventHandler ("onClientResourceStart", getRootElement(), criarPainel) -- Faz isso tudo ao iniciar o resource no jogador. Edited April 7, 2018 by Lord Henry 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