Jump to content

ABRIR OUTRO PAINEL COM O BOTÃO DX


Recommended Posts

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 by DNL291
Use sempre a tag para Lua
Link to comment
  • Other Languages Moderators

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.

  • Thanks 1
Link to comment
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 by ThiagoyBlaCk
Link to comment

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
  • Moderators

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 :)

  • Like 1
Link to comment
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 

  1. function onScreenClick()
  2.     if (button ~= "left") or (state ~= "up") or isConsoleActive() or isMainMenuActive() then return end;
  3.     
  4.     if painel1_mostrando == true then -- verificar se o painel DX tá na tela
  5.         if isMouseWithinRangeOf( x*94, x*166, y*207, y*232 )
  6.   
  7.         
  8.             -- vamos então mostrar o segundo DX
  9.             addEventHandler( "onClientRender", root, subDX )
  10.             showCursor( true )
  11.             painel2_mostrando = false
  12.  
  13.         end
  14.  
  15.     end
  16. end

    o painel nn abre eu tenho que editar algo além do "subDX" ??
Link to comment
  • Moderators

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 by DNL291
  • Like 1
Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...