Jump to content

Loja de roupas


Recommended Posts

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

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

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

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