SO
dúvida

Addevent

Por SoulProst, 01 de nov. de 2012 em Scripts

script
7
1.6k
SoulProstS
01 de novembro de 2012 às 17:18

Olá pessoal, estava com grande dúvida em relação ao uso da função addEvent.

Pesquisei bastante sobre, e em alguns lugares, li que do terceiro parâmetro em diante , seria os parâmetros da função colocada no 1º parâmetro do addEvent.

 

Exemplo:

addEvent(doPlayerSendCancel, 3 * 1000, cid, "oi")

 

Bem, como está no exemplo, a função

doPlayerSendCancel

Requer 2 parâmetros, que são "cid" e a "mensagem"

 

Resumindo, eu fiz um script para testar isso ,e não funcionou. Pelo que entendi, fazendo deste jeito, não tem nenhum mistério, então não sei porque não funcionou.

 

Então a pergunta é: o addEvent pode ser usado desse jeito que citei acima? Caso sim , irei postar o script que fiz e vcs me digam oq está de errado. Obrigado a todos.

SlicerS
01 de novembro de 2012 às 18:38

sim eh bem assim q se usa... ;x

soh tem q tomar cuidado com os addEvents, pq se o player deslogar ou morrer nesse meio tempo vai da erro no console ^^

SoulProstS
01 de novembro de 2012 às 19:54

me diga oque está errado aqui:

 

local arvores = {2706, 2701}
function onUse(cid, item, fromPosition, itemEx, toPosition)
addEvent(doTransformItem, 3 * 1000, itemEx.uid, math.random(1, #arvores))

 

E o erro que dá no distro:

<LuadoTransformItem> Item not Found

SlicerS
01 de novembro de 2012 às 21:05

q item tas usando nesse script? eh um item 'usable'? q quando tu clica nele o ponteiro do mouse muda e tu pode clicar em outro lugar? pq esse itemEx eh o item q tu clicou com esse 'ponteiro diferente'... qlqr coisa.. se tu tiver soh clicando na arvores e querendo q ela mude, troca o itemEx.lua para item.uid

SoulProstS
01 de novembro de 2012 às 22:00

Este item q estou usando é sim Usable

 

-------- edit ---------

fiz o teste de mudar o ItemEx.uid para item.uid e mesmo assim continua dando o mesmo erro.

Editado Novembro 1 por thales93

brun123B
01 de novembro de 2012 às 22:24

é porque o unique ID de itens não são estáticos, eles variam...

imagine se o servidor fosse atribuir um valor diferente pra cada chão, grama, árvore, motanha, itens dos players, itens nas houses, itens nos depot dos players, corpses dos monstros que morrem, loot desses monstros, itens que são agrupáveis podem ser divididos em 100 itens diferentes...

resumindo, é muito item pra atribuir estaticamente um id, então eles são atribuídos dinamicamente, o servidor gera um uid pro item no memento requisitado e esse uid só dura um instante, e depois esse id é destruído da memória.

é possível fazer UID estáticos, mas não é viável, já que itens contáveis podem ser separados e itens estão sumindo o tempo todo... então não rola

 

Outro erro associável ao seu script, é que o itemEx.uid pode ser um monstro, player etc... então ia dar erro se usasse a função de transformar item sendo que o alvo seria uma criatura

 

eu tinha feito um post parecido com esse antes, se quiser entender mais sobre o assunto:

 

http://www.xtibia.com/forum/topic/193795-duvida-sobre-depot/page__view__findpost__p__1336914

 

seu script vai funcionar dessa forma:

 

function onUse(cid, item, frompos, item2, topos)

   local arvores = {2706, 2701}

   if isCreature(item2.uid) or (item2.itemid or 0) <= 1 then
   return doPlayerSendCancel(cid, "Use somente em itens.")
   end

   local function doTransformToTree(itemId, itemPos, trees)
    local i = getTileItemById(itemPos, itemId).uid
    if i > 0 then
	    doTransformItem(i, trees[math.random(#trees)])
    end
   end

   addEvent(doTransformToTree, 3 * 1000, item2.itemid, topos, arvores)

return true
end

SoulProstS
01 de novembro de 2012 às 22:51

E se eu usasse o os.date?

Eu dei uma breve lida sobre esta função , nunca usei, mas pelo oq entendi, ela trabalha com tudo relacionado a hora e tal.

 

E se então usasse ela como por exemplo:

Pegar o valor atual, +5 minutos, iria nascer a arvore novamente?

Seria mais difícil fazer do que o addEvent?