Ir para conteúdo
  • 0

Duvida Sobre Depot


Slicer

Pergunta

Ola gostaria de saber se tem algum jeito, em .lua, de pegar os itens q estao no depot de um player... NAO eh para pegar qnts items tem, e sim 'os' itens q estao no depot, de preferencia os uids... ;p Obrigado desde ja!

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Essa função retorna o nº de itens, foi criada só pra quando o player pisar no tile que fica nos depots mostar "Your depot contains x items."

 

Tem que pegar os itens usando a database, fala com o vodkart que o cara entende bem disso

Link para o comentário
Compartilhar em outros sites

  • 0

@Jhon992

como o brun flo essa function retorna a qntdade '-'

 

@brun

eh bem ele q eu estava esperando hehe tb pensei nisso... alias tenhu q aprender a mexer no database ainda.. hehe vlw ms assim..

Link para o comentário
Compartilhar em outros sites

  • 0

como o brun123 citou, usando db fica fácil de retornar os items, quantidade, valores...

 

oque você quis dizer com 'uid' do item? o id do item em si? ou o 'uniqueid' que o item possui?

Link para o comentário
Compartilhar em outros sites

  • 0

cara esse negócio de unique id em itens é uma questão complicada, porque esses ids não são estáticos... pode perceber que quando você usa pega o uid de um item, ele retorna um valor, se você depois for pegar uid de outro item, pode retornar esse mesmo valor... o mesmo item, caso você pegue o uid em tempos diferentes, pode retornar uids diferentes.

 

o único jeito de tornar o uid de um item estático é usando a função doItemSetAttribute(item, "uid", xxxx), ou então colocando algum unique id no item pelo map editor... esse número só tem alcance de 1000 até 65536.

se você atribuir um unique id a esse item, por exemplo, 1500, em outra script você pode simplesmente fazer "doRemoveItem(1500)" e o server já vai saber qual item você está falando...

 

por isso que numa script desse jeito:

 

local removeItem = getTileItemById(pos, 1285)
addEvent(doRemoveItem, 5000, removeItem.uid)

 

é muito provável que dê erro dizendo que o item não foi encontrado ou então remova até algum outro item.

quando você usa qualquer função que retorna uma tabela com o uid/itemid/type do item (getTileItemById, getTileThingFromPos, getPlayerSlotItem são exemplos), esse uid é temporário, ele dura alguns milisegundos antes de serem apagados da memória, como quando alguma script é lida tudo é executado quase que instantaneamente, usar uma dessas funções e já manipular esse item na mesma script não é problema, mas quando você mistura com delay (addEvent), você cria um problema...

se exatamente na hora do addEvent ocorrer algum outro item for atribuído temporariamente um uid que foi igual ao do item que utilizei addEvent, as ações do addEvent vão ocorrer nesse outro item... a chance de isso acontecer é extremamente pequena, é como se fosse a chance do seu coração parar ao receber algum impacto no meio de uma contração ventricular (uma contração dura aprox. 0,025 segundos, se nesse intervalo a pessoa receber um impacto com força relativamente alta, o coração pode parar de bater)

 

é algo semelhante, entende? no caso, para corrigir essa script, teria que fazer algo assim:

 

local removeItem = getTileItemById(pos, 1285)

local function doRemoveMyItem(pos, id)
local i = getTileItemById(pos, id).uid
if i.uid > 1 then -- sempre essa averiguada para evitar erros no console
	doRemoveItem(i.uid)
end
end

addEvent(doRemoveMyItem, 5000, pos, 1285)

 

Mesmo que o addEvent aconteça exatamente no mesmo intervalo de tempo que outra script foi executada, um novo uid será atribuído quando a local function for executada nesse tal item, e após a script ser lida esse uid é apagado da memória.

 

Tem que ser dessa forma, vou pegar um mapa que eu tava fazendo como exemplo:

 

Total number of items: 1255569

 

o mapa tem apenas 10 mb, imagina um mapa que tem 40 mb (tem mapa por aí que tem muito mais que isso), ainda mais um mapa de tibia, que o pessoal fica colocando lixo no chão, vários detalhes etc etc... vai dar uma quantidade absurda de itens, e se fosse pra atribuir um valor estático a cada um desses itens... já deu pra entender ne

Editado por brun123
Link para o comentário
Compartilhar em outros sites

  • 0

@brun

eita mano.. sempre pensei q cada item vinha com sua tabela de id e uid... kkk eh conserteza tenhu muita coisa pra intender ainda '-' vlw ae pela 'aula' xD eu soh tava tentando pegar os uids para trasformar as balls no depot pro sistema de icone da pxg ^^ mas tb tanto faz.. hehe vlw ae

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...