SL
dúvida

Duvida Sobre Depot

Por Slicer, 09 de set. de 2012 em Scripts

resolvido
10
2.1k
SlicerS
09 de setembro de 2012 às 12:50

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!

jhon992J
09 de setembro de 2012 às 13:25

getPlayerDepotItems(cid, depotid)

...

brun123B
09 de setembro de 2012 às 13:35

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

SlicerS
09 de setembro de 2012 às 13:41

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

VodkartV
11 de setembro de 2012 às 10:42

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?

SlicerS
11 de setembro de 2012 às 10:45

a idea era pegar o uniqueID ms... mas pelo q vi achu q soh da pra pegar o itemid neh? '-' vlw ae vodkart

brun123B
11 de setembro de 2012 às 11:55

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 Setembro 11 por brun123

SlicerS
11 de setembro de 2012 às 14:26

@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

1 mês depois...
SkyLighS
20 de outubro de 2012 às 15:14

Duvida Sanada

reportado

 

Para Um Superior

dwhfmsD
20 de outubro de 2012 às 15:15

Tópico movido para a seção de dúvidas e pedidos resolvidos.