RO
tfs 0.3.6

Dúvida em getItemsInContainerById

Por rorix, 05 de jan. de 2016 em Scripts

7
1.3k
rorixR
05 de janeiro de 2016 às 19:19

Galera, estava estudando esta função "getItemsInContainerById" para usar no meu server que estou criando...

function onMoveItem(moveItem, frompos, position, cid, toPosition)

if(isContainer(moveItem.uid)) then
doBroadcastMessage("reconheceu container!")
if #getItemsInContainerById(moveItem.uid, 1212) > 0 then
doBroadcastMessage("reconheceu item dentro!")
end

nesse script acima, se eu mover um item contaier (bag,backpack,bau), vai receber a mensagem reconheceu container.

Se eu mover um container (bag,backpack,bau), com o item 1212 dentro, vai aparecer "reconheceu item dentro"

 

o que eu quero fazer é adicionar mais items na lista de items (dentro do container), por exemplo:

local items = {1212, 1215, 1218, 1239}

function onMoveItem(moveItem, frompos, position, cid, toPosition)

if(isContainer(moveItem.uid)) then
doBroadcastMessage("reconheceu container!")
if #getItemsInContainerById(moveItem.uid, ITEMS) > 0 then
doBroadcastMessage("reconheceu item dentro!")
end

>>tentei fazer dessa maneira, mas está dando errado. Como eu faço para a parte ITEMS verificar toda a tabela de items?

>>quero fazer com que se o container tenha algum item da lista dentro dele, o container nao possa ser jogado no chao, jogado em house, possa apenas ser colocado no depot e ser movido na propria backpack do personagem

 

edit: tentei fazer por isInArray(iitems, moveItem.itemid), mas não obtive sucesso, não sei mexer muito com essa função

Editado Janeiro 5 por rorix

Luga03L
05 de janeiro de 2016 às 19:46
local items = {1212, 1215, 1218, 1239}


function onMoveItem(moveItem, frompos, position, cid, toPosition)


if(isContainer(moveItem.uid)) then

doBroadcastMessage("reconheceu container!")

if #getItemsInContainerById(moveItem.uid, #ITEMS) > 0 then

doBroadcastMessage("reconheceu item dentro!")

end

end


tenta isto kkk

zipter98Z
05 de janeiro de 2016 às 20:19

A correção do seu código seria a seguinte:

local items = {1212, 1215, 1218, 1239}

function onMoveItem(moveItem, frompos, position, cid, toPosition)

    if isContainer(moveItem.uid) then
        doBroadcastMessage("reconheceu container!")
        
        for i = 1, #items do
            if #getItemsInContainerById(moveItem.uid, items[i]) > 0 then
                doBroadcastMessage("reconheceu um dos itens dentro!")
                break
            end
        end

Para fazer o que você quer, ajudaria se este callback tivesse mais parâmetros. Caso contrário, recomendaria usar um outro onMoveItem. Mesma funcionalidade, porém parâmetros diferentes e mais abrangentes.

rorixR
05 de janeiro de 2016 às 22:36

A correção do seu código seria a seguinte:

Para fazer o que você quer, ajudaria se este callback tivesse mais parâmetros. Caso contrário, recomendaria usar um outro onMoveItem. Mesma funcionalidade, porém parâmetros diferentes e mais abrangentes.

 

Então no caso com esse callback apenas que eu tenho, seria Impssivel impedir que o player jogue um container backpack,bag, bau (com os items da lista dentro dele), no chao?

Luga03L
05 de janeiro de 2016 às 22:55

Não, não é impossível com o calback atual, mas se utilizar o que o Zipter Recomendou fica mais fácil de fazer :D

rorixR
05 de janeiro de 2016 às 23:45

sempre tenho erro quando tento compilar esse outro onmove, por isso queria um jeito no callback q eu tenho

Luga03L
05 de janeiro de 2016 às 23:55

Qual erro que dá?