LO
dúvida

Erro Com "remove Item"

Por Lolksky, 02 de set. de 2012 em Scripts

script
erro
teleport
remove
17
3k
LolkskyL
02 de setembro de 2012 às 16:22

Boa tarde amiguinhos,

 

Bom, seguinte, eu sempre usei os script a seguir no meu servidor. Portanto, de repente (devo ter feito algo, sei lá) eles começaram a dar erro. (eu mudei para TFS 0.4 - talvez seja isso) o erro que apresentam é:

 

 

(luaDoRemoveItem) Item not found

 

Segue abaixo alguns scripts que estão dando esse erro:

 

1.

local tpId = 1387

local tps = {

["Annihilon"] = {pos = {x=1193, y=629, z=10}, toPos = {x=1325, y=699, z=10}, time = 180},

}

function removeTp(tp)

local t = getTileItemById(tp.pos, tpId)

if t then

doRemoveItem(t.uid, 1)

doSendMagicEffect(tp.pos, CONST_ME_POFF)

end

end

function onDeath(cid)

local tp = tps[getCreatureName(cid)]

if tp then

doCreateTeleport(tpId, tp.toPos, tp.pos)

doCreatureSay(cid, "The Annihilon portal will close at "..tp.time.." seconds.", TALKTYPE_ORANGE_1)

addEvent(removeTp, tp.time*1000, tp)

end

return TRUE

end

 

 

2.

--- By Gaonner ---

 

function onUse (cid, item, fromPos, item2, toPos)

lixos = {"2228","2223","2251","2254","2250"} -- Items que serao varridos

 

 

if (isInArray(lixos, item2.itemid)) then

doRemoveItem(item2,uid, 1)

doPlayerAddItem (cid,2148,10) -- Item que o player ira ganhar

doPlayerSendTextMessage (cid,19,'The garbage was swept away and you got 10 gold coins.') -- Frase de sucesso

else

doPlayerSendCancel (cid,19,'This object can not be removed.') -- Frase de fracasso

return true

end

end

 

 

 

PORTANTO, alguns scripts o treco de "remover item" funciona normalmente... Então, creio eu que seja os scripts que estejam com erros, sei lá.

Ajudem aí xD

SkymagnumS
02 de setembro de 2012 às 16:34

 

local tp = tps[getCreatureName(cid)]
local tpId = 1387
local tps = {
["Annihilon"] = {pos = {x=1193, y=629, z=10}, toPos = {x=1325, y=699, z=10}, time = 180}
}
function removeTp(tp)
local t = getTileItemById(tp.pos, tpId)
if t then
doRemoveItem(t.uid, 1)
doSendMagicEffect(tp.pos, CONST_ME_POFF)
end
end
function onDeath(cid)
if tp then
doCreateTeleport(tpId, tp.toPos, tp.pos)
doCreatureSay(cid, "The Annihilon portal will close at "..tp.time.." seconds.", TALKTYPE_ORANGE_1)
addEvent(removeTp, tp.time*1000, tp)
end
return TRUE
end

 

 

 

--- By Gaonner ---
function onUse (cid, item, fromPos, item2, toPos)
lixos = {"2228","2223","2251","2254","2250"} -- Items que serao varridos


if (isInArray(lixos, item2.itemid)) then
doRemoveItem(item2.uid, 1)
doPlayerAddItem (cid,2148,10) -- Item que o player ira ganhar
doPlayerSendTextMessage (cid,19,'The garbage was swept away and you got 10 gold coins.') -- Frase de sucesso
else
doPlayerSendCancel (cid,19,'This object can not be removed.') -- Frase de fracasso
return true
end
end

 

Editado Setembro 2 por Skymagnum

LolkskyL
02 de setembro de 2012 às 16:37

 

 

[/size][/font][/color]--- By Gaonner ---

function onUse (cid, item, fromPos, item2, toPos)
lixos = {"2228","2223","2251","2254","2250"} -- Items que serao varridos


if (isInArray(lixos, item2.itemid)) then
doRemoveItem(item2.uid, 1)
doPlayerAddItem (cid,2148,10) -- Item que o player ira ganhar
doPlayerSendTextMessage (cid,19,'The garbage was swept away and you got 10 gold coins.') -- Frase de sucesso
else
doPlayerSendCancel (cid,19,'This object can not be removed.') -- Frase de fracasso
return true
end
end

 

 

 

IAHsiauhsua a cara, não entendo de script. mas nesse caso, era isso mesmo, valeu aí, REP

 

mas você saberia o erro do outro script? '-'

SkymagnumS
02 de setembro de 2012 às 16:41

Pronto arrumei la essa pora de code buga

VodkartV
02 de setembro de 2012 às 16:49

em qual dos script dá esse erro? no do actions?

LolkskyL
02 de setembro de 2012 às 16:51

@skymagnum

vou testar

_______

 

EDIT

 

deu erro :s

 

 

 

 

(luagetCreatureName) Creature not found

 

attempt to index global 'tps' (a nil value)

Editado Setembro 2 por Lolksky

brun123B
02 de setembro de 2012 às 16:56

No primeiro script, substitua essa linha:

 

if t then

 

por essa:

 

if t.uid > 1 then

 

no segundo, substitua essa linha:

 

doRemoveItem(item2,uid, 1)

 

por essa:

 

doRemoveItem(item2.uid, 1)

LolkskyL
02 de setembro de 2012 às 17:05

No primeiro script, substitua essa linha:

 

if t then

 

por essa:

 

if t.uid > 1 then

 

no segundo, substitua essa linha:

 

doRemoveItem(item2,uid, 1)

 

por essa:

 

doRemoveItem(item2.uid, 1)

 

 

Deu a mesma coisa cara: (luaDoRemoveItem) item not found

 

em qual dos script dá esse erro? no do actions?

 

em ambos, no creature script e no do actions

 

PS: do action já foi resolvido)

brun123B
02 de setembro de 2012 às 17:07

Me mostra como ficou suas scripts depois da sua edição

LolkskyL
02 de setembro de 2012 às 17:09

Me mostra como ficou suas scripts depois da sua edição

 

 

--[[ Script By Vodkart and Kydrai ]]--

local tpId = 1387

local tps = {

["Annihilon"] = {pos = {x=1193, y=629, z=10}, toPos = {x=1325, y=699, z=10}, time = 10}

}

function removeTp(tp)

local t = getTileItemById(tp.pos, tpId)

if t.uid > 1 then

doRemoveItem(t.uid, 1)

doSendMagicEffect(tp.pos, CONST_ME_POFF)

end

end

function onDeath(cid)

local tp = tps[getCreatureName(cid)]

if tp then

doCreateTeleport(tpId, tp.toPos, tp.pos)

doCreatureSay(cid, "The Hellgorak portal will close at "..tp.time.." seconds. Enterin portal to complete the Inquisition Quest, and pick your reward.", TALKTYPE_ORANGE_1)

addEvent(removeTp, tp.time*1000, tp)

end

return TRUE

end

brun123B
02 de setembro de 2012 às 17:45

e a outra script?

 

tem que editar as 2

LolkskyL
02 de setembro de 2012 às 17:52

e a outra script?

 

tem que editar as 2

 

o outro deu certo,

 

só esse aí do teleport que continua o erro

VodkartV
02 de setembro de 2012 às 22:22

o certo não é 't.uid > 1' e sim 't.uid > 0'

 

> 1 é 2,3,4,5...

 

tenta trocar

 

 

if t.uid > 1 then

 

por

if t > 0 then

 

ou

if t.uid > 0 then

LolkskyL
02 de setembro de 2012 às 22:41

o certo não é 't.uid > 1' e sim 't.uid > 0'

 

> 1 é 2,3,4,5...

 

tenta trocar

 

 

if t.uid > 1 then

 

por

if t > 0 then

 

ou

if t.uid > 0 then

 

Ambos deu o mesmo problema (doLuaRemoveItem) item not found

brun123B
02 de setembro de 2012 às 22:59

Na vodkart, pode colocar até t.uid > 50000 que vai funcionar, pois os unique ids que são atribuídos aos itens podem no mínimo ter valor 70.000.

A menos que você use doItemSetAttribute(itemUid, "uid", xxxx) ou então modifique seu UID pelo map editor, ele não pode ter valor menor que 70k.

Caso editado manualmente, via map editor ou scripts, seu valor pode variar de 1000 até 65536, algum número assim...

Colocar > 0 ou > 1 não faz diferença mesmo.

 

Quando se usa a função getTileItemById e não encontra nenhum item, retorna uma tabela assim:

{uid = 0, itemid = 0}, algo do tipo...

 

Se você tentar remover o item cujo uid é 0 (item não existente), vai aparecer esse erro que o item não foi encontrado.

Por isso checa-se antes de o uid do item é maior que 0 ou 1 (tanto faz), pois dessa forma o item certamente irá existir e não tem como possivelmente dar erros.

 

Lolksky, eu testei a script aqui e não deu nenhum erro... Vou analisar aqui de novo e ver se consigo descobrir algo...

Editado Setembro 2 por brun123