ThiagoyBlaCk Posted February 3, 2017 Share Posted February 3, 2017 (edited) Ola, Galerinha Do Forum faço Paineis a um bom tempo mais nunca parei pra fazer um com duas partes comecei a criar um agora e preciso de uma ajudinha de vocês uma colaboração pra saber como iniciar o segundo por cima do primeiro apertando sobre o botão dx exemplo Primeiro Painel function test() dxDrawLine(x*94 - 1, y*207 - 1, x*94 - 1, y*439, tocolor(255, 255, 255, alfa), 1, false) dxDrawLine(x*261, y*207 - 1, x*94 - 1, y*207 - 1, tocolor(255, 255, 255, alfa), 1, false) dxDrawLine(x*94 - 1, y*439, x*261, y*439, tocolor(255, 255, 255, alfa), 1, false) dxDrawLine(x*261, y*439, x*261, y*207 - 1, tocolor(255, 255, 255, alfa), 1, false) dxDrawRectangle(x*94, y*207, x*166, y*232, tocolor(0, 0, 0, alfa), false) end Quero Saber como posso clicar aqui < e abrir o segundo painel, já criei ateh o botão gui por tras do botão dx, e usei o onClientGUIClick mais daii o segundo painel aparece e some no mesmo segundo Segundo Painel function test2() dxDrawLine(273 - 1, 260 - 1, 273 - 1, 439, tocolor(255, 255, 255, 255), 1, false, VTR) dxDrawLine(411, 260 - 1, 273 - 1, 260 - 1, tocolor(255, 255, 255, 255), 1, false, VTR) dxDrawLine(273 - 1, 439, 411, 439, tocolor(255, 255, 255, 255), 1, false) dxDrawLine(411, 439, 411, 260 - 1, tocolor(255, 255, 255, 255), 1, false) dxDrawRectangle(273, 260, 138, 179, tocolor(0, 0, 0, 152), false) end Edited February 5, 2017 by DNL291 Use sempre a tag para Lua Link to comment
Other Languages Moderators Lord Henry Posted February 4, 2017 Other Languages Moderators Share Posted February 4, 2017 Bom, eu sinceramente não gosto de paineis DX, prefiro paineis normais do MTA por serem mais fáceis de fazer, melhores para fazer manutenção e mais leves. Mas estou comentando aqui pois fiquei curioso para saber como resolver isso. Além de claro, reviver seu tópico para não cair no esquecimento. (por via das dúvidas, já pensou em fazer o primeiro menu desaparecer quando o segundo aparece? Dessa forma não tem como um ficar em cima do outro de maneira errada.) Boa sorte. 1 Link to comment
ThiagoyBlaCk Posted February 4, 2017 Author Share Posted February 4, 2017 (edited) 1 hour ago, lordhenry said: Bom, eu sinceramente não gosto de paineis DX, prefiro paineis normais do MTA por serem mais fáceis de fazer, melhores para fazer manutenção e mais leves. Mas estou comentando aqui pois fiquei curioso para saber como resolver isso. Além de claro, reviver seu tópico para não cair no esquecimento. (por via das dúvidas, já pensou em fazer o primeiro menu desaparecer quando o segundo aparece? Dessa forma não tem como um ficar em cima do outro de maneira errada.) Boa sorte. lordhenry sim, eu ja fiz mais o caso é que exemplo eu uso o "onClientGUIClick" No CreateGuiButton Que eu utilizei atras do botão DX Rectagle, quando eu clico no DX Rectangle abre o meu segundo painel por causa do Botão Gui Que Esta atras, daii em menos de 1 segundo some novamente no caso eu uso uma função CreateGuiButton, Junto com o onClientGUIClick - Pra abrir uma function dx ... funciona tranquilo só que o segundo painel dx que abre fecha em menos de 1 segundo todo click que eu do Edited February 4, 2017 by ThiagoyBlaCk Link to comment
ThiagoyBlaCk Posted February 4, 2017 Author Share Posted February 4, 2017 Tipo isso só nn posso soltar meu painel ak néh kkkk function Test1() dxDrawRectangle(x*94, y*261, x*167, y*26, tocolor(0, 0, color1, alfa), false) end VTR = guiCreateButton( x*94, y*261, x*167, y*26, "", false ) addEventHandler("onClientGUIClick",VTR,function() VTRS() end) function VTRS() dxDrawRectangle(273, 260, 138, 179, tocolor(0, 0, 0, 152), false) end Link to comment
DNL291 Posted February 5, 2017 Share Posted February 5, 2017 Eu fiz um código que explica sobre clique na tela, pra detectar se algum elemento DX foi clicado, e que aborda a sua dúvida, que pelo que entendi, manipula outra DX em um painel DX. Está tudo explicado no próprio código: addEventHandler( "onClientResourceStart", resourceRoot, function() addEventHandler( "onClientClick", root, onScreenClick ) -- sempre que clicar na tela, essa função será chamada bindKey ( "F2", "down", openDXPanel ) -- a tecla 'f2' vai ser usada pra abrir ou fechar o painel end ) function onScreenClick( button, state ) if (button ~= "left") or (state ~= "up") or isConsoleActive() or isMainMenuActive() then return end; -- isConsoleActive() e isMainMenuActive() - tô usando pra desativar o uso do painel -- quando o console (F8) e/ou o Menu principal estiverem mostrando if painel1_mostrando == true then -- verificar se o painel DX tá na tela if isMouseWithinRangeOf( x*94, x*166, y*207, y*232 ) then -- aqui significa que o botão DX foi clicado -- observe que aqui to usando na ordem: X, W, Y, H -- vamos então mostrar o segundo DX addEventHandler( "onClientRender", root, subDX ) painel2_mostrando = false -- atribuí uma variável que vai informar se o dx está -- visível ou não end -- aqui voce pode usar outro elseif, e verifica se o -- segundo DX está mostrando. Aí depois vem a parte que -- detecta o clique no botão end end function openDXPanel() if painel1_mostrando ~= true then -- se não tiver mostrando, ativá-lo addEventHandler( "onClientRender", root, DX1 ) showCursor( true ) painel1_mostrando = true elseif painel1_mostrando == true then -- desativando o dx, e o sub-dx removeEventHandler( "onClientRender", root, DX1 ) showCursor( false ) painel1_mostrando = false if painel2_mostrando == true then removeEventHandler( "onClientRender", root, subDX ) painel2_mostrando = false end -- se o segundo DX também estiver mostrando, vamos tirar da tela end end function DX1() dxDrawLine(x*94 - 1, y*207 - 1, x*94 - 1, y*439, tocolor(255, 255, 255, alfa), 1, false) dxDrawLine(x*261, y*207 - 1, x*94 - 1, y*207 - 1, tocolor(255, 255, 255, alfa), 1, false) dxDrawLine(x*94 - 1, y*439, x*261, y*439, tocolor(255, 255, 255, alfa), 1, false) dxDrawLine(x*261, y*439, x*261, y*207 - 1, tocolor(255, 255, 255, alfa), 1, false) dxDrawRectangle(x*94, y*207, x*166, y*232, tocolor(0, 0, 0, alfa), false) end function subDX() dxDrawLine(273 - 1, 260 - 1, 273 - 1, 439, tocolor(255, 255, 255, 255), 1, false, VTR) dxDrawLine(411, 260 - 1, 273 - 1, 260 - 1, tocolor(255, 255, 255, 255), 1, false, VTR) dxDrawLine(273 - 1, 439, 411, 439, tocolor(255, 255, 255, 255), 1, false) dxDrawLine(411, 439, 411, 260 - 1, tocolor(255, 255, 255, 255), 1, false) dxDrawRectangle(273, 260, 138, 179, tocolor(0, 0, 0, 152), false) end -- função útil para detectar o clique na coordenada da tela especificada function isMouseWithinRangeOf(psx,pssx,psy,pssy) if not isCursorShowing() then return false end local cx,cy = getCursorPosition() local screenX,screenY = guiGetScreenSize() cx,cy = cx*screenX,cy*screenY if cx >= psx and cx <= psx+pssx and cy >= psy and cy <= psy+pssy then return true end return false end Sinta-se livre pra comentar aqui, qualquer trecho que não tenha entendido. Não cheguei a testar esse código, pois na verdade é pra fins didáticos 1 Link to comment
ThiagoyBlaCk Posted February 5, 2017 Author Share Posted February 5, 2017 2 hours ago, DNL291 said: Eu fiz um código que explica sobre clique na tela, pra detectar se algum elemento DX foi clicado, e que aborda a sua dúvida, que pelo que entendi, manipula outra DX em um painel DX. Está tudo explicado no próprio código: addEventHandler( "onClientResourceStart", resourceRoot, function() addEventHandler( "onClientClick", root, onScreenClick ) -- sempre que clicar na tela, essa função será chamada bindKey ( "F2", "down", openDXPanel ) -- a tecla 'f2' vai ser usada pra abrir ou fechar o painel end ) function onScreenClick() if (button ~= "left") or (state ~= "up") or isConsoleActive() or isMainMenuActive() then return end; -- isConsoleActive() e isMainMenuActive() - tô usando pra desativar o uso do painel -- quando o console (F8) e/ou o Menu principal estiverem mostrando if painel1_mostrando == true then -- verificar se o painel DX tá na tela if isMouseWithinRangeOf( x*94, x*166, y*207, y*232 ) -- aqui significa que o botão DX foi clicado -- observer que aqui to usando na ordem: X, W, Y, H -- vamos então mostrar o segundo DX addEventHandler( "onClientRender", root, subDX ) showCursor( true ) painel2_mostrando = false -- atribuí uma variável que vai informar se o dx está -- visível ou não end -- aqui voce pode usar outro elseif, e verifica se o -- segundo DX está mostrando. Aí depois vem a parte que -- detecta o clique no botão end end function openDXPanel() if painel1_mostrando ~= true then -- se não tiver mostrando, ativá-lo addEventHandler( "onClientRender", root, DX1 ) showCursor( true ) painel1_mostrando = true elseif painel1_mostrando == true then -- desativando o dx, e o sub-dx removeEventHandler( "onClientRender", root, DX1 ) showCursor( false ) painel1_mostrando = false if painel2_mostrando == true then removeEventHandler( "onClientRender", root, subDX ) painel2_mostrando = false end -- se o segundo DX também estiver mostrando, vamos tirar da tela end end function DX1() dxDrawLine(x*94 - 1, y*207 - 1, x*94 - 1, y*439, tocolor(255, 255, 255, alfa), 1, false) dxDrawLine(x*261, y*207 - 1, x*94 - 1, y*207 - 1, tocolor(255, 255, 255, alfa), 1, false) dxDrawLine(x*94 - 1, y*439, x*261, y*439, tocolor(255, 255, 255, alfa), 1, false) dxDrawLine(x*261, y*439, x*261, y*207 - 1, tocolor(255, 255, 255, alfa), 1, false) dxDrawRectangle(x*94, y*207, x*166, y*232, tocolor(0, 0, 0, alfa), false) end function subDX() dxDrawLine(273 - 1, 260 - 1, 273 - 1, 439, tocolor(255, 255, 255, 255), 1, false, VTR) dxDrawLine(411, 260 - 1, 273 - 1, 260 - 1, tocolor(255, 255, 255, 255), 1, false, VTR) dxDrawLine(273 - 1, 439, 411, 439, tocolor(255, 255, 255, 255), 1, false) dxDrawLine(411, 439, 411, 260 - 1, tocolor(255, 255, 255, 255), 1, false) dxDrawRectangle(273, 260, 138, 179, tocolor(0, 0, 0, 152), false) end -- função útil para detectar o clique na coordenada da tela especificada function isMouseWithinRangeOf(psx,pssx,psy,pssy) if not isCursorShowing() then return false end local cx,cy = getCursorPosition() local screenX,screenY = guiGetScreenSize() cx,cy = cx*screenX,cy*screenY if cx >= psx and cx <= psx+pssx and cy >= psy and cy <= psy+pssy then return true end return false end Sinta-se livre pra comentar aqui, qualquer trecho que não tenha entendido. Não cheguei a testar esse código, pois na verdade é pra fins didáticos Quando eu coloco essa parte function onScreenClick() if (button ~= "left") or (state ~= "up") or isConsoleActive() or isMainMenuActive() then return end; if painel1_mostrando == true then -- verificar se o painel DX tá na tela if isMouseWithinRangeOf( x*94, x*166, y*207, y*232 ) -- vamos então mostrar o segundo DX addEventHandler( "onClientRender", root, subDX ) showCursor( true ) painel2_mostrando = false end end end o painel nn abre eu tenho que editar algo além do "subDX" ?? Link to comment
DNL291 Posted February 5, 2017 Share Posted February 5, 2017 (edited) Não posso apontar nenhum erro já que não sei como está o seu código. Veja o que o debugscript mostra, esse código é uma base pra começar um painel DX. A propósito, percebi agora um erro no código que postei, substitua function onScreenClick() por: function onScreenClick( button, state ) Além disso, a função showCursor não vai ser necessária porque o DX principal já estará mostrando. Certifique-se que as variáveis x e y estão definidas. Edited February 5, 2017 by DNL291 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