Ir para conteúdo
Entre para seguir isso  
Oddie

searchContainers

Recommended Posts

Oddie    0
Oddie

Função
searchContainers
(cid, value [, mode [, containers]])

Testado em
TFS 0.3.6pl1
, por
Oddie
.

Funcionalidade:

Faz uma busca pelos containers especificados -verificando se há outros containers dentro dos mesmos-, pode ser usado para procurar um item por UID, ou vários com o mesmo ID.

 

Parâmetros:

[TABLE=class: grid, width: 700]

[TR]

[TD]cid[/TD]

[TD]ID do player onde vai ser efetuada a busca.[/TD]

[/TR]

[TR]

[TD]value[/TD]

[TD]Valor que será procurado, será usado UID ou ID do item.[/TD]

[/TR]

[TR]

[TD]mode[/TD]

[TD][Opcional] Modo de busca, 0 para UID ou qualquer outro valor para buscar por ID. O modo padrão é por UID, caso não seja especificado.[/TD]

[/TR]

[TR]

[TD]containers[/TD]

[TD][Opcional] Array com UID dos containers de onde vai começar a busca, como padrão vai procurar nos slots das mãos, backpack e munição do personagem.[/TD]

[/TR]

[/TABLE]

 

Valores retornados:

Modo 0 ou default, por UID: Array com o UID do container e o slot onde o item especificado está, onde array[1] é o UID e array[2] é o slot.

Modo 1 (ou qualquer outro valor), por ID: Array 2D contendo UID do item, UID do container e slot em que o item se encontra, da seguinte forma: array[n][1] é o UID do item, array[n][2] é o UID do container onde o item está e array[n][3] é slot do container onde o item se posiciona.

 

Exemplos de utilização:

[spoiler=Action]

function onUse(cid, item, fromPosition, itemEx, toPosition)
   search=searchContainers(cid, item.uid, 0) 
   if search then doTransformItem(search[1], 2002) end
   return true
end

Transforma o container onde foi usado o item para uma backpack azul (ID: 2002).

 

[spoiler=NPC]

Adicionei o seguinte no script de um NPC:

    if msgcontains(msg, 'plate armor') then
   npc_msg = ''
   search=searchContainers(cid, 2463, 'qualquer valor que não seja 0') --2463 é o ID da plate armor
   if search then
   for a = 1, table.maxIndex(search) do
   npc_msg = npc_msg..' '..a..'ª: '..getItemAttribute(search[a][1], "description")
   end
   end
   if npc_msg == '' then npc_msg = "Você não tem nenhuma plate armor :/"
   else npc_msg = "Vejo que você tem "..table.maxIndex(search).." plate armors, cada uma com as seguintes especificações:\n"..npc_msg end
   npcHandler:say(npc_msg, cid)
   end

Ele procurou por todas as
plate armors
que eu tinha, e disse a
description
de cada uma delas.

oRRVq.png

 

 

 

Como instalar:

Vá na pasta data/lib/ e abra o arquivo 050-functions.lua, copie e cole o código em qualquer lugar (que não seja dentro de outra função).

 

-----    Modos de busca:
---    # [m=0 [default]] Procura pelo item com o UID (v) especificado;
--    ret[1] = UID do container
--    ret[2] = Slot do item no container

---    # [m <> 0] Procura por todos itens com o ID (v);
--    ret[X][1] = UID do item
--    ret[X][2] = UID do container
--    ret[X][3] = Slot do container
---    #Nota: também dá pra mudar o valor dos containers onde vai ser efetuada a procura (f) colocando um array com os UIDs dos contaiers.
---    #Exemplo: searchContainers(cid, 2463, 1, {getPlayerSlotItem(cid, 5).uid, getPlayerSlotItem(cid, 6).uid}) faria procurar nos prováveis containers que estariam nas mãos do personagem pelo item 2463 (plate armor).
function searchContainers(cid, v, m, f, ret)
if not f then f={getPlayerSlotItem(cid, 3).uid, getPlayerSlotItem(cid, 10).uid, getPlayerSlotItem(cid, 5).uid, getPlayerSlotItem(cid, 6).uid} end
if not ret then ret={} end
c={}

for a, b in ipairs(f) do
if isContainer( then
   for e=0, getContainerCap( do
   slot_item = getContainerItem(b, e)
   if slot_item.uid == v and (not m or m==0) then return {b, e}
   elseif slot_item.itemid == v then table.insert(ret, {slot_item.uid, b, e}) end
   if isContainer(slot_item.uid) then
   table.insert(c, slot_item.uid)
   end
   end
end
end
if table.maxIndex(c) and table.maxIndex(c)>0 then
asduf=searchContainers(cid, v, m, c, ret)
if asduf then return asduf end
elseif table.maxIndex(ret) then return ret end
end

Editado por Oddie

Compartilhar este post


Link para o post
Pliubio    0
Pliubio

Oddie arrebentando, como sempre (:

e o tópico tá lindaço XD

Editado por Pliubio

Compartilhar este post


Link para o post
Ekasus    0
Ekasus

Seria otimo se todos os topicos tivessem esta formataçao

Muito bom ;D

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×