Rakashy Posted August 6, 2021 Share Posted August 6, 2021 Opa, to com um probleminha e queria uma opinião de pessoas que entendem melhor do que eu.. Estou desenvolvendo um sistema de inventário baseado no sistema do FiveM, o sistema possui 5 slots rápidos e meu intuito era arrastar os itens do inventário para esses slots rápidos que seriam puxados com bind 1 ao 5, o problema é que não estou conseguindo fazer o sistema de arrastar funcionar como devia, ao invés de arrastar 1 item, ele puxa todos, como na imagem abaixo : Só pra esclarecer, os itens do inventário são puxados de um arquivo config, e no dx são gerados da seguinte forma : dxDrawImage(x + Slot_X * (120*sx), y + Slot_Y * (130*sy), w, h, "gfx/items/"..tostring(value.img)..".png", 0, 0, 0, tocolor(255, 255, 255, 255), true) O valor x, y, w, h são referentes a posição do mouse. Como os itens são gerados no inventário a partir de uma tabela, acho que está dando conflito, e acaba puxando todas as imagens ao invés de apenas 1, abaixo o código de mover que estou utilizando : screenW, screenH = guiGetScreenSize() x,y,w,h = 548,438,75,70 -- Aqui seria a posição do mouse, no caso teria que referenciar essa posição com todos os ícones gerados no inventário, e por estar uma posição fixa, creio que seja o motivo pra estar puxando todos os ícones. slots = { {179, 184, 143, 163, imgx = 200, imgy = 200}, {364, 184, 143, 163, imgx = 385, imgy = 200} } showCursor(true) temp = {} movendo = false addEventHandler("onClientClick", root, function(b, s) if b == "left" then if s == "down" then if isMouseInPosition(x,y,w,h) then movendo = true addEventHandler("onClientRender", root, Mover) end else if movendo then movendo = false --> criando uma variavel local para uso mais a frente local inSlot = false --> loop para verificar se eu soltei o item dentro de algum slot for i,v in ipairs(slots) do --> verificar se o mouse estava dentro de algum slot quando foi solto if isMouseInPosition(v[1], v[2], v[3], v[4]) then --> define a variavel para saber que o item foi para um novo slot inSlot = true --> define a posição da imagem do item para a posição correta dentro do novo slot x,y = v.imgx, v.imgy break end end --> verificar se a imagem não foi solta em um slot e retorna para o local de origem if not inSlot then x,y = temp[1], temp[2] end --> zerar tudo para o proximo item ser movido temp = {} difx, dify = nil,nil removeEventHandler("onClientRender", root, Mover) end end end end) difx, dify = nil,nil function Mover() --> salva a posição inicial do item para caso seja necessario voltar para a origem if #temp == 0 then temp[1], temp[2] = x, y end --> obtem a posição do mouse (isto retorna em relativo) local mx, my = getCursorPosition() --> verifica se não diferença deifinida e define if not difx then difx, dify = (screenW * mx) - x, (screenH * my) - y end --> define a posição com a diferença local cx, cy = (screenW * mx) - difx, (screenH * my) - dify --> define a posição da imagem com os calculos feitos x, y = cx, cy end 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 ) return ( ( cx >= x and cx <= x + width ) and ( cy >= y and cy <= y + height ) ) end 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