Ir para conteúdo
  • Cadastre-se

(Resolvido)(HELP) Action Autoloot System


Ir para solução Resolvido por Lurk,

Posts Recomendados

                                                                                                                           BOA NOITE A TODOS DO TK!!

Preciso de uma ajudinha com um systema de Autoloot do Meu Projeto de Poketibia!

Eu Gostaria que alguem Pudese Fazer uma Pequena Modificação nele.

a modificação seria adicionar uma lista aonde iria bloquear de o autoloot puxar para pokebag.

Exemplo: Fire Stone

Se alguem puder fazer essa modificação Ja Agradeço!! Irei deixar o codigo para edição!

 

 

Spoiler

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if getItemAttribute(item.uid, "corpseowner") ~= cid then
        return doPlayerSendCancel(cid, "You're not the owner.")
    end
    local items = {}
    for i = 0, getContainerSize(item.uid) do
        local it = getContainerItem(item.uid, i)
        if it.uid > 0 then
            table.insert(items, {it.itemid, it.type})
            doRemoveItem(it.uid)
        end
    end
    if #items > 0 then
        for k = 1, #items do
            local playerItem = getPlayerItemById(cid, true, items[k][1])
            if playerItem.uid > 0 then
                if (playerItem.type + items[k][2]) > 100 then
                    doPlayerAddItem(cid, items[k][1], (playerItem.type + items[k][2]) - 100)
                    doTransformItem(playerItem.uid, items[k][1], 100)
                else
                    doTransformItem(playerItem.uid, items[k][1], playerItem.type + items[k][2])
                end
            else
                doPlayerAddItem(cid, items[k][1], items[k][2])
            end
        end
        return true
    end
    doSetItemActionId(item.uid, 0)
    return false
end

 

Editado por El Reverso
Erros (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@El Reverso não testei mas tenta ai, ve o que da

 

---- REPOSTA EDITADA ----

esse é o script funcional, pra vcs n precisarem ir até a pag 2 p pegar o sistema funcionando

local blocked_items = {8413, 5726} -- adicione aqui os itens que vc quer bloquear separados por ,
function onUse(cid, item, fromPosition, itemEx, toPosition)
    if getItemAttribute(item.uid, "corpseowner") ~= cid then
        return doPlayerSendCancel(cid, "You're not the owner.")
    end
    local items = {}
    for i = 0, getContainerSize(item.uid) do
        local it = getContainerItem(item.uid, i)
        if it.uid > 0 and not isInArray(blocked_items,it.itemid) then
            table.insert(items, {it.itemid, it.type})
            doRemoveItem(it.uid)
        end
    end
    if #items > 0 then
        for k = 1, #items do
            local playerItem = getPlayerItemById(cid, true, items[k][1])
            if playerItem.uid > 0 then
                if (playerItem.type + items[k][2]) > 100 then
                    doPlayerAddItem(cid, items[k][1], (playerItem.type + items[k][2]) - 100)
                    doTransformItem(playerItem.uid, items[k][1], 100)
                else
                    doTransformItem(playerItem.uid, items[k][1], playerItem.type + items[k][2])
                end
            else
                doPlayerAddItem(cid, items[k][1], items[k][2])
            end
        end
        return true
    end
    doSetItemActionId(item.uid, 0)
    return false
end
Editado por Lurk (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@Gabrieldsadaxas boa tarde, desculpe a demora por responder irei testa-lo imediatamente!.

@Gabrieldsadaxas testei aqui amigo, ele coletou o loot normalmente, é ocorreu este erro na distro.

[12/08/2020 14:03:05] [Error - Action Interface] 
[12/08/2020 14:03:05] data/actions/scripts/autoloot.lua:onUse
[12/08/2020 14:03:05] Description: 
[12/08/2020 14:03:05] data/actions/scripts/autoloot.lua:17: attempt to index global 'it' (a nil value)
[12/08/2020 14:03:05] stack traceback:
[12/08/2020 14:03:05]     data/actions/scripts/autoloot.lua:17: in function <data/actions/scripts/autoloot.lua:2>

Link para o post
Compartilhar em outros sites

@El Reverso kkkkkkkkkkkkkkkkk comi umas 5 letras da palavra foi mal, troca

if playerItem.uid > 0 and not isInArray(blocked_items,it.uid) then

por

 

if playerItem.uid > 0 and not isInArray(blocked_items, playerItem.uid) then

e me diz o que rola

Link para o post
Compartilhar em outros sites

@Gabrieldsadaxas kk fiz a troca de linhas, esta coletando normalmente, não esta aparecendo nemhum erro na distro so que ainda esta coletando o ''item'' que era pra ser bloqueado no autoloot.

Link para o post
Compartilhar em outros sites

@El Reverso troca também o

if it.uid > 0 and not isInArray(blocked_items,it.uid) then

por

 

if it.uid > 0 and not isInArray(blocked_items, item.uid) then
Editado por Gabrieldsadaxas (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@Gabrieldsadaxas troquei a linha, mais ainda esta coletando o item.

@Gabrieldsadaxas queria esta emplementação para evita um bug que esta ocorrendo um exemplo. se eu colocar uma pokeball com ''o pokemon'' capturado a pokeball vai vir sem o pokemon.

Link para o post
Compartilhar em outros sites

@El Reverso troca todo o código por

local blocked_items = {8413, 5726} -- adicione aqui os itens que vc quer bloquear separados por ,
function onUse(cid, item, fromPosition, itemEx, toPosition)
    if getItemAttribute(item.uid, "corpseowner") ~= cid then
        return doPlayerSendCancel(cid, "You're not the owner.")
    end
    local items = {}
    for i = 0, getContainerSize(item.uid) do
        local it = getContainerItem(item.uid, i)
        if it.uid > 0 and not isInArray(blocked_items, getContainerItem(item.uid)) then
            table.insert(items, {it.itemid, it.type})
            doRemoveItem(it.uid)
        end
    end
    if #items > 0 then
        for k = 1, #items do
            local playerItem = getPlayerItemById(cid, true, items[k][1])
            if playerItem.uid > 0 then
                if (playerItem.type + items[k][2]) > 100 then
                    doPlayerAddItem(cid, items[k][1], (playerItem.type + items[k][2]) - 100)
                    doTransformItem(playerItem.uid, items[k][1], 100)
                else
                    doTransformItem(playerItem.uid, items[k][1], playerItem.type + items[k][2])
                end
            else
                doPlayerAddItem(cid, items[k][1], items[k][2])
            end
        end
        return true
    end
    doSetItemActionId(item.uid, 0)
    return false
end

acho que agora vai

Link para o post
Compartilhar em outros sites

@Lurk ocorreu este erro na distro.

[12/08/2020 14:38:36] [Error - Action Interface] 
[12/08/2020 14:38:36] data/actions/scripts/autoloot.lua:onUse
[12/08/2020 14:38:36] Description: 
[12/08/2020 14:38:36] (luaGetContainerItem) Container not found

 

 

 

@Lurk se não houver solução, acho que irei tentar procura um outro systema de autoloot. obrigado pela atenção! <3

Link para o post
Compartilhar em outros sites

@El Reverso tem sim vei calmai q vamo resolver

troca

        local it = getContainerItem(item.uid, i)
        if it.uid > 0 and not isInArray(blocked_items, getContainerItem(item.uid)) then

por

 

        local it = getContainerItem(item.uid, i)
        local itt = getContainerItem(item.uid)
        if it.uid > 0 and not isInArray(blocked_items, itt) then

é exatamente desse jeito que bloqueia, só to apanhando p pegar o id do item, n tinha lido o código muito bem antes, agora acho que vai

se isso não der certo, poe

print("Isso aqui: " ..getContainerItem(item.uid))

em baixo do local it = getContainer(item.uid, i) e me diz o que aparece no console

Editado por Lurk (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@Lurk ocorreu o mesmo erro 

[12/08/2020 14:55:48] [Error - Action Interface] 
[12/08/2020 14:55:48] data/actions/scripts/autoloot.lua:onUse
[12/08/2020 14:55:48] Description: 
[12/08/2020 14:55:48] (luaGetContainerItem) Container not found

Link para o post
Compartilhar em outros sites

@El Reverso troca tudo por

 

local blocked_items = {8413, 5726} -- adicione aqui os itens que vc quer bloquear separados por ,
function onUse(cid, item, fromPosition, itemEx, toPosition)
    if getItemAttribute(item.uid, "corpseowner") ~= cid then
        return doPlayerSendCancel(cid, "You're not the owner.")
    end
    local items = {}
    for i = 0, getContainerSize(item.uid) do
        local it = getContainerItem(item.uid, i)
        if it.uid > 0 then
            table.insert(items, {it.itemid, it.type})
            doRemoveItem(it.uid)
        end
    end
    if #items > 0 then
        for k = 1, #items do
            local playerItem = getPlayerItemById(cid, true, items[k][1])
            if playerItem.uid > 0 and not isInArray(blocked_items, item.uid) then
                if (playerItem.type + items[k][2]) > 100 then
                    doPlayerAddItem(cid, items[k][1], (playerItem.type + items[k][2]) - 100)
                    doTransformItem(playerItem.uid, items[k][1], 100)
                else
                    doTransformItem(playerItem.uid, items[k][1], playerItem.type + items[k][2])
                end
            elseif not isInArray(blocked_items, item.uid) then
                doPlayerAddItem(cid, items[k][1], items[k][2])
            end
        end
        return true
    end
    doSetItemActionId(item.uid, 0)
    return false
end
Link para o post
Compartilhar em outros sites

em baixo de

local playerItem = getPlayerItemById(cid, true, items[k][1])

poe

 

print("Item id: " ..item.uid)

e me diz o que aparece no console qnd o player pega um item com o sistema p eu ver o que ta retornando 

Link para o post
Compartilhar em outros sites

@El Reverso imagino q n exista um item com o id de 72005 no seu ot..

em baixo de 

local it = getContainerItem(item.uid, i)

poe

 

print("Item do container: " ..getContainerItem(item.uid))
print("Item do container2: " ..getContainerItem(item.uid, i))
Editado por Lurk (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@Lurk [12/08/2020 15:28:26] [Error - Action Interface] 
[12/08/2020 15:28:26] data/actions/scripts/autoloot.lua:onUse
[12/08/2020 15:28:26] Description: 
[12/08/2020 15:28:26] data/actions/scripts/autoloot.lua:9: attempt to concatenate a table value
[12/08/2020 15:28:26] stack traceback:
[12/08/2020 15:28:26]     data/actions/scripts/autoloot.lua:9: in function <data/actions/scripts/autoloot.lua:2>

 

 

apareceu este erro na distro

Link para o post
Compartilhar em outros sites

@Lurk ocorreu o mesmo erro

[12/08/2020 15:31:30] [Error - Action Interface] 
[12/08/2020 15:31:30] data/actions/scripts/autoloot.lua:onUse
[12/08/2020 15:31:30] Description: 
[12/08/2020 15:31:30] data/actions/scripts/autoloot.lua:9: attempt to concatenate a table value
[12/08/2020 15:31:30] stack traceback:
[12/08/2020 15:31:30]     data/actions/scripts/autoloot.lua:9: in function <data/actions/scripts/autoloot.lua:2>

Link para o post
Compartilhar em outros sites

@El Reverso tenta

local blocked_items = {8413, 5726} -- adicione aqui os itens que vc quer bloquear separados por ,
function onUse(cid, item, fromPosition, itemEx, toPosition)
    if getItemAttribute(item.uid, "corpseowner") ~= cid then
        return doPlayerSendCancel(cid, "You're not the owner.")
    end
    local items = {}
    for i = 0, getContainerSize(item.uid) do
        local it = getContainerItem(item.uid, i)
        if it.uid > 0 and not isInArray(blocked_items,it.itemid) then
            table.insert(items, {it.itemid, it.type})
            doRemoveItem(it.uid)
        end
    end
    if #items > 0 then
        for k = 1, #items do
            local playerItem = getPlayerItemById(cid, true, items[k][1])
            if playerItem.uid > 0 then
                if (playerItem.type + items[k][2]) > 100 then
                    doPlayerAddItem(cid, items[k][1], (playerItem.type + items[k][2]) - 100)
                    doTransformItem(playerItem.uid, items[k][1], 100)
                else
                    doTransformItem(playerItem.uid, items[k][1], playerItem.type + items[k][2])
                end
            elseif not isInArray(blocked_items, item.uid) then
                doPlayerAddItem(cid, items[k][1], items[k][2])
            end
        end
        return true
    end
    doSetItemActionId(item.uid, 0)
    return false
end
Editado por Lurk (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo