Jump to content

[RESOLVIDO]Ajuda com Dx


Recommended Posts

Estava tentando criar um painel em dx pelo gui, só que não consigo que o botão em dx seja clicado para pegar um veiculo, alguem poderia mim ajuda.

( Pode ser fácil para vocês , mais pra mim é dificil por que sou novato na Codificação .Lua e o que eu aprendi até agora foi olhando outros "mods" , no caso do painel em DX os criadores sempre Compilam o arquivo client , Então peço Ajuda dos Senhores ! )

Edited by Guest
Link to comment

Como as funções dx* não retornam um elemento você tem que fazer um calculo "manual" para saber onde o jogador clicou e se o mouse está "dentro" do retângulo.

Quando um jogador clica com o mouse o evento onClientClick é chamado, logo só temos que checar a posição do mouse, para isso existe a função (útil) isMouseInPosition (Lembre-se que ela é uma função 'util', então você precisa incluir o código fonte dela no seu script).

Exemplo:

-- Criar retangulo, note as posições (100, 100, 200, 200) 
addEventHandler ( "onClientRender", root, 
    function () 
        dxDrawRectangle ( 100, 100, 200, 200, tocolor ( 255, 255, 255 ), false ) 
    end 
) 
  
-- Incluir codigo fonte da função isMouseInPosition 
function isMouseInPosition ( x, y, width, height ) 
    if ( not isCursorShowing ( ) ) then 
        return false 
    end 
  
    local sx, sy = guiGetScreenSize ( ) 
    local cx, cy = getCursorPosition ( ) 
    local cx, cy = ( cx * sx ), ( cy * sy ) 
    if ( cx >= x and cx <= x + width ) and ( cy >= y and cy <= y + height ) then 
        return true 
    else 
        return false 
    end 
end 
  
addEventHandler ( "onClientClick", root, 
    function ( ) 
        --[[ 
            Checar a posição do mouse com a função isMouseInPosition 
             
            os parametros da função isMouseInPosition são as posições do retangulo 
            no caso 100, 100, 200, 200 
        --]] 
        if isMouseInPosition ( 100, 100, 200, 200 ) then 
            outputChatBox ( "você clicou dentro do retangulo" ) 
        else 
            outputChatBox ( "você clicou fora do retangulo" ) 
        end 
    end 
) 

Não testei o código mas parece ser funcional, Espero que tenhas entendido :P

Link to comment

Client

function pm() 
        dxDrawRectangle(541, 215, 258, 352, tocolor(0, 0, 0, 179), false) 
        dxDrawRectangle(540, 213, 259, 29, tocolor(129, 0, 0, 254), false) 
        dxDrawText("Painel da Policia", 539, 212, 799, 242, tocolor(255, 255, 255, 255), 0.80, "bankgothic", "center", "center", false, false, false, false, false) 
        dxDrawRectangle(538, 562, 159, 0, tocolor(255, 255, 255, 255), false) 
        dxDrawRectangle(540, 524, 259, 28, tocolor(129, 0, 0, 254), false) 
        dxDrawText("Script Criado Por : +Stronger", 538, 521, 799, 552, tocolor(255, 255, 255, 255), 0.50, "bankgothic", "center", "center", false, false, false, false, false) 
        dxDrawRectangle(553, 284, 98, 79, tocolor(129, 0, 0, 254), false) 
        dxDrawRectangle(691, 284, 98, 79, tocolor(129, 0, 0, 254), false) 
        dxDrawRectangle(691, 403, 98, 79, tocolor(129, 0, 0, 254), false) 
        dxDrawRectangle(551, 403, 98, 79, tocolor(129, 0, 0, 254), false) 
        viatura = dxDrawText("Viatura", 552, 281, 651, 363, tocolor(255, 255, 255, 255), 0.75, "bankgothic", "center", "center", false, false, false, false, false) 
        skin = dxDrawText("Skin", 690, 281, 789, 363, tocolor(255, 255, 255, 255), 0.75, "bankgothic", "center", "center", false, false, false, false, false) 
        vidacolete = dxDrawText("Vida\n Colete", 690, 400, 789, 482, tocolor(255, 255, 255, 255), 0.75, "bankgothic", "center", "center", false, false, false, false, false) 
        armas = dxDrawText("Armas", 551, 400, 650, 482, tocolor(255, 255, 255, 255), 0.75, "bankgothic", "center", "center", false, false, false, false, false) 
        fechar = dxDrawText("X", 755, 244, 789, 274, tocolor(209, 0, 0, 254), 1.00, "bankgothic", "center", "center", false, false, false, false, false) 
        showCursor(true) 
        addEventHandler("onClientRender", root, pm) 
         
        addEventHandler ("onClientGUIClick", viatura, viatura1, false) 
        addEventHandler ("onClientGUIClick", skin, skin1, false) 
        addEventHandler ("onClientGUIClick", vidacolete, vc1, false) 
        addEventHandler ("onClientGUIClick", armas, armas1, false) 
        addEventHandler ("onClientGUIClick", fechar, closea, false) 
end 
addCommandHandler("tut1", pm) 
  
------------------------------------------------------------------- 
  
-- Incluir codigo fonte da função isMouseInPosition 
function isMouseInPosition ( x, y, width, height ) 
    if ( not isCursorShowing ( ) ) then 
        return false 
    end 
  
    local sx, sy = guiGetScreenSize ( ) 
    local cx, cy = getCursorPosition ( ) 
    local cx, cy = ( cx * sx ), ( cy * sy ) 
    if ( cx >= x and cx <= x + width ) and ( cy >= y and cy <= y + height ) then 
        return true 
    else 
        return false 
    end 
end 
  
addEventHandler ( "onClientClick", root, 
    function ( ) 
        --[[ 
            Checar a posição do mouse com a função isMouseInPosition 
            
            os parametros da função isMouseInPosition são as posições do retangulo 
            no caso 100, 100, 200, 200 
        --]] 
        if isMouseInPosition ( 552, 281, 651, 363 ) then 
            outputChatBox ( "você clicou dentro do retangulo" ) 
        else 
            outputChatBox ( "você clicou fora do retangulo" ) 
        end 
    end 
  
------------------------------------------------------------------- 
  
function armas1 () 
showCursor (true) 
triggerServerEvent ( "onGreeting", getLocalPlayer() ) 
end 
  
function skin1 () 
showCursor (true) 
triggerServerEvent ( "onGreetinC", getLocalPlayer() ) 
end 
  
function closea () 
showCursor (false) 
guiSetVisible (PanelPolice, not guiGetVisible ( PanelPolice ) ) 
end 
  
function viatura1 () 
showCursor (true) 
triggerServerEvent ( "darAuto", getLocalPlayer() ) 
end 
  
function vc1 () 
showCursor (true) 
triggerServerEvent ( "VidaColete", getLocalPlayer() ) 
end 

Server

function greetingHandler () 
    giveWeapon(source, 23, 10000, true) 
    giveWeapon(source, 27, 10000, true) 
    giveWeapon(source, 28, 10000, true) 
    giveWeapon(source, 31, 10000, true) 
    giveWeapon(source, 34, 10000, true) 
    giveWeapon(source, 17, 10000, true) 
    giveWeapon(source, 3, 10000, true) 
end 
addEvent( "onGreeting", true ) 
addEventHandler( "onGreeting", getRootElement(), greetingHandler ) 
  
------------------------------------------------------------------------------ 
  
function ccss1 () 
    setElementModel ( source, 287 ) 
end 
addEvent( "onGreetinC", true ) 
addEventHandler( "onGreetinC", getRootElement(), ccss1 ) 
  
------------------------------------------------------------------------------ 
  
function ccss2 () 
    local luckyBugger = getRandomPlayer () -- get a random player 
    local x, y, z = getElementPosition ( luckyBugger ) -- retrive the player's position 
    createVehicle ( 596, x + 3, y, z ) 
end 
addEvent( "darAuto", true ) 
addEventHandler( "darAuto", getRootElement(), ccss2 ) 
  
------------------------------------------------------------------------------ 
  
function ccss3 ()    
  setElementHealth(source, 200) 
  setPedArmor(source, 100) 
end 
addEvent( "VidaColete", true ) 
addEventHandler( "VidaColete", getRootElement(), ccss3 ) 
  
------------------------------------------------------------------------------ 

Link to comment

  • Você esqueceu de fechar o addEventHandler na linha 60.
  • Como eu já falei, funções dx* NÃO retornam nenhum elemento, sendo assim você não pode usar o evento onClientGUIClick (muito menos adicionar o evento a cada frame), Ele só funciona com GUIs.
  • Você não precisa adicionar o evento onClientRender toda vez, Bastava outra função que fazia isso
  • Você usou (na função isMouseInPosition) os parâmetros da função dxDrawText quando é necessario usar as do retângulo
  • Você não pode usar guiSetVisible em dxs, Você deve remover o evento onClientRender.

function pm() 
    dxDrawRectangle(541, 215, 258, 352, tocolor(0, 0, 0, 179), false) 
    dxDrawRectangle(540, 213, 259, 29, tocolor(129, 0, 0, 254), false) 
    dxDrawText("Painel da Policia", 539, 212, 799, 242, tocolor(255, 255, 255, 255), 0.80, "bankgothic", "center", "center", false, false, false, false, false) 
    dxDrawRectangle(538, 562, 159, 0, tocolor(255, 255, 255, 255), false) 
    dxDrawRectangle(540, 524, 259, 28, tocolor(129, 0, 0, 254), false) 
    dxDrawText("Script Criado Por : +Stronger", 538, 521, 799, 552, tocolor(255, 255, 255, 255), 0.50, "bankgothic", "center", "center", false, false, false, false, false) 
    dxDrawRectangle(553, 284, 98, 79, tocolor(129, 0, 0, 254), false)   -- Viatura 
    dxDrawRectangle(691, 284, 98, 79, tocolor(129, 0, 0, 254), false)   -- Skin 
    dxDrawRectangle(691, 403, 98, 79, tocolor(129, 0, 0, 254), false)   -- Vida/Colete 
    dxDrawRectangle(551, 403, 98, 79, tocolor(129, 0, 0, 254), false)   -- Armas 
    dxDrawText("Viatura", 552, 281, 651, 363, tocolor(255, 255, 255, 255), 0.75, "bankgothic", "center", "center", false, false, false, false, false) 
    dxDrawText("Skin", 690, 281, 789, 363, tocolor(255, 255, 255, 255), 0.75, "bankgothic", "center", "center", false, false, false, false, false) 
    dxDrawText("Vida\n Colete", 690, 400, 789, 482, tocolor(255, 255, 255, 255), 0.75, "bankgothic", "center", "center", false, false, false, false, false) 
    dxDrawText("Armas", 551, 400, 650, 482, tocolor(255, 255, 255, 255), 0.75, "bankgothic", "center", "center", false, false, false, false, false) 
    dxDrawText("X", 755, 244, 789, 274, tocolor(209, 0, 0, 254), 1.00, "bankgothic", "center", "center", false, false, false, false, false) 
end 
  
function iniciarRenderizacao ( ) 
    addEventHandler("onClientRender", root, pm) 
    showCursor(true) 
end 
addCommandHandler("tut1", iniciarRenderizacao) 
  
------------------------------------------------------------------- 
  
function isMouseInPosition ( x, y, width, height ) 
    if ( not isCursorShowing ( ) ) then 
        return false 
    end 
  
    local sx, sy = guiGetScreenSize ( ) 
    local cx, cy = getCursorPosition ( ) 
    local cx, cy = ( cx * sx ), ( cy * sy ) 
    if ( cx >= x and cx <= x + width ) and ( cy >= y and cy <= y + height ) then 
        return true 
    else 
        return false 
    end 
end 
  
addEventHandler ( "onClientClick", root, 
    function ( _, state ) 
        if state == "down" then 
            -- Viatura 
            if isMouseInPosition ( 553, 284, 98, 79 ) then 
                triggerServerEvent ( "darAuto", getLocalPlayer() ) 
             
            -- Skin 
            elseif isMouseInPosition ( 691, 284, 98, 79 ) then 
                triggerServerEvent ( "onGreetinC", getLocalPlayer() ) 
             
            -- Vida / Colete 
            elseif isMouseInPosition ( 691, 403, 98, 79 ) then 
                triggerServerEvent ( "VidaColete", getLocalPlayer() ) 
             
            -- Armas 
            elseif isMouseInPosition ( 551, 403, 98, 79 ) then 
                triggerServerEvent ( "onGreeting", getLocalPlayer() ) 
             
            -- Fechar 
            elseif isMouseInPosition ( 755, 244, 34, 30 ) then 
                removeEventHandler ( "onClientRender", root, pm ) 
                showCursor ( false ) 
            end 
        end 
    end 
) 

Tente entender o código.

dica: use /debugscript 3, Ele irá lhe 'dizer' todos os erros do seu script.

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...