Gaimo Posted February 21, 2020 Share Posted February 21, 2020 Quero fazer um script de lojas de roupas, o meu problema inicial é o seguinte, como vou detectar que o jogador está no marker da table enterMarker? Imagino que com o addEventHandler("onPlayerMarkerHit" Porém não sei como fazer a verificação, como posso verificar se o marker que o player está pertence a tabela enterMarker? Segue o script: -- Posição dos marker para entrar enterMarker = { {1170.88306, -1489.64990, 22.75516}, {1147.24207, -1487.55115, 22.76903}, } -- Posição dos marker para sair exitMarker = { } -- Posição dos marker para comprar buyMarker = { } for i, v in pairs (enterMarker) do enterMarker = createMarker(v[1], v[2], v[3]-0.85, "cylinder", 2, 0, 20, 255, 160) end Link to comment
Developer. Posted February 21, 2020 Share Posted February 21, 2020 (edited) Bom eu faria desta forma, ao meu ver é mais fácil: enterMarker = { -- index valor [1] = {createMarker(1170.88306, -1489.64990, 22.75516 - 1, "cylinder", 2, 0, 20, 255, 160)}, -- marker 1 [2] = {createMarker(1147.24207, -1487.55115, 22.76903 - 1, "cylinder", 2, 0, 20, 255, 160)}, -- marker 2 [3] = {createMarker(1159.714, -1511.431, 22.748 - 1, "cylinder", 2, 0, 20, 255, 160)}, -- marker 3 }; for i=1, #enterMarker do createBlipAttachedTo(enterMarker[i][1], 45) -- mesma coisa do seu createMarker porém com blip e com um for diferente. end -- abaixo a funcaoExemplo, vc pode criar funções proprias e automatizar seu script. -- em vez de eu colocar setElementModel em cada if/elseif, eu chamo a função que já faz isso por mim. function funcaoExemplo(playerSource, number) -- abaixo o setElementModel. -- se vc for na wiki essa função requer um player ou um ped (playerSource), e tambem o modelo no caso o (number) setElementModel(playerSource, number) end function hitarMarker(marker, dim) if dim then -- abaixo ele verifica se o marker hitado é equivalente ao index [1] valor [1] da tabela enterMarker, ou seja a marker criada 1. if marker == enterMarker[1][1] then outputChatBox("loja 1", source, 0, 255, 0) funcaoExemplo(source, 1) -- chamando a função criada por mim, setando ao source (player) a skin (1) elseif marker == enterMarker[2][1] then -- verificação no index [2] valor [1] outputChatBox("loja 2", source, 0, 255, 0) funcaoExemplo(source, 2) -- chamando a função criada por mim, setando ao source (player) a skin (2) elseif marker == enterMarker[3][1] then -- verificação no index [3] valor [1] outputChatBox("loja 3", source, 0, 255, 0) funcaoExemplo(source, 7) -- chamando a função criada por mim, setando ao source (player) a skin (7) end end end addEventHandler("onPlayerMarkerHit", getRootElement(), hitarMarker) Edited February 21, 2020 by Developer. 1 Link to comment
Gaimo Posted February 22, 2020 Author Share Posted February 22, 2020 Como eu transformo uma imagem em botão? quero detectar se o player clicou nela, tentei usar o addEventHandler("onClientClick" mas não consegui, não se se é com ele ou usei de forma indevida. Link to comment
Developer. Posted February 26, 2020 Share Posted February 26, 2020 @Gaimo Bom tem duas formas, para dx em especifico tem a função util IsCursorOnElement ou você pode criar um botão com gui GuiCreateButton Exemplo Dx: local posX, posY, posW, posH = 500, 500, 200, 200 local painel = true function teste(button,state) if painel == true then if state == "down" then if isCursorOnElement(posX, posY, posW, posH ) then outPutChatBox("Teste Dx bem-sucedido") end end end end addEventHandler ("onClientClick", root, teste) -- função util function isCursorOnElement(x,y,w,h) local mx,my = getCursorPosition () local fullx,fully = guiGetScreenSize() cursorx,cursory = mx*fullx,my*fully if cursorx > x and cursorx < x + w and cursory > y and cursory < y + h then return true else return false end end Exemplo Gui: function testeGui() botao = guiCreateButton(500, 500, 50, 32, "testeGui", false) -- guiSetAlpha(botao, 0) -- deixa o botão invisivel addEventHandler("onClientGUIClick", botao, testeGui2) end addEventHandler("onClientResourceStart", resourceRoot, testeGui) function testeGui2() outputChatBox("Teste gui bem-sucedido") end No exemplo do gui, vc criaria os botão embaixo das imagens. Então tipo a imagem é só algo realmente visual, o que importa é o botão onde o player clicou que estará invisível. Link to comment
beast99 Posted February 26, 2020 Share Posted February 26, 2020 14 hours ago, Developer. said: local posX, posY, posW, posH = 500, 500, 200, 200 local painel = true function teste(button,state) if painel == true then if state == "down" then if isCursorOnElement(posX, posY, posW, posH ) then outPutChatBox("Teste Dx bem-sucedido") end end end end addEventHandler ("onClientClick", root, teste) -- função util function isCursorOnElement(x,y,w,h) local mx,my = getCursorPosition () local fullx,fully = guiGetScreenSize() cursorx,cursory = mx*fullx,my*fully if cursorx > x and cursorx < x + w and cursory > y and cursory < y + h then return true else return false end end Apenas uma duvida developer, o que significa o comando state? Serve para verificar que o click está sendo executado? Link to comment
Developer. Posted February 26, 2020 Share Posted February 26, 2020 (edited) @MesaDowN O state é um parâmetro do evento onClientClick (no caso o segundo parâmetro). o state ele verifica se o player Pressionou o botão ("down") ou se ele solto o botão ("up"). Edited February 26, 2020 by Developer. 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