Jump to content

Arrastar item inventário


Recommended Posts

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 :
spacer.png

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"000tocolor(255255255255), 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 = {
    {179184143163, imgx = 200, imgy = 200},
    {364184143163, imgx = 385, imgy = 200}
}
showCursor(true)
 
temp = {}
 
movendo = false
addEventHandler("onClientClick", root, function(bs)
    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 ( xywidthheight )
    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

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