Stronger Posted August 26, 2015 Share Posted August 26, 2015 (edited) 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 September 14, 2015 by Guest Link to comment
n3wage Posted August 26, 2015 Share Posted August 26, 2015 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 Link to comment
Stronger Posted August 27, 2015 Author Share Posted August 27, 2015 Só que quando a resource é ativa e eu clico fora das cordernadas sem abrir o painel apareçe o chat box Link to comment
n3wage Posted August 27, 2015 Share Posted August 27, 2015 Só que quando a resource é ativa e eu clico fora das cordernadas sem abrir o painel apareçe o chat box Isso era um exemplo só para você entender como usar as funções que eu mencionei, você tem que adaptar o código as suas necessidades. Link to comment
Stronger Posted August 27, 2015 Author Share Posted August 27, 2015 Mais eu fiz um teste com o meu código utilizando a função mais não consigo quando click pegue o objeto Link to comment
n3wage Posted August 27, 2015 Share Posted August 27, 2015 Mais eu fiz um teste com o meu código utilizando a função mais não consigo quando click pegue o objeto Poste seu código aqui ou me mande por PM. Link to comment
Stronger Posted August 27, 2015 Author Share Posted August 27, 2015 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
n3wage Posted August 27, 2015 Share Posted August 27, 2015 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
Stronger Posted August 27, 2015 Author Share Posted August 27, 2015 Muito Obrigado pela ajuda, e desculpas por alguns erros estou aprendendo aos poucos lua, Vlw pelas dicas ! 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