Ir para conteúdo
  • Cadastre-se

(Resolvido)Excluir bau addEvent 0.4


Ir para solução Resolvido por Rusherzin,

Posts Recomendados

Então galera, estou tentando fazer um determinado bau sumir depoist de tanto tempo, tentei usar addEvent porém todas as formas que tentei acusava o erro de Item Not Found ou "attempt to call global 'getThingfromPosition' (a nil value)"

a baixo segue o script... como faço para sumir este bau? lembrando que ele não tem uma localização fixa, ou seja tem que verificar qual a posição do bau e exclui o .uid

tfs: 0.4

 

Spoiler

function onUse(cid, item, frompos, item2, topos)
	local rand = math.random(0,100)	
	tempo = 5
	local bau = item.uid
	local pos = getThingPos(item.uid)
	
	
	if rand >= 0 and rand <= 50 then
		if getPlayerStorageValue(cid, 84456) <= os.time() then
			doAddContainerItem(bau, 2160, 1)
			
				addEvent (
					function ()
						doRemoveItem(getThingfromPosition(pos).uid, 1)  
					end, 5 * 1000
					)
					
			setPlayerStorageValue(cid, 84456, os.time() + tempo)
		end
	end
end

 

 

Scriptszinhos:

 

Não abandone seu tópico, quando você tiver a dúvida resolvida sozinho tente ensinar aos outros como resolve-la (você pode não ser o único com o problema) e quando ela for resolvida por outra pessoa não se esqueça de marcar como melhor resposta e deixar o gostei.

Link para o post
Compartilhar em outros sites

Tenta usar getThingfromPos ao invés de getThingfromPosition. Se não der, tenta adicionar a stackpos = 1 na variável que contém a posição.

                                                                     Ajudei? De nada \o/                                            Att Rusherzin

Link para o post
Compartilhar em outros sites

@Rusherzin

" R6025
- pure virtual function call "

 

da esse erro muito louco...

 

oq eu faço? (esse negocio de remove item sempre me bugo todo kkkk)

 

to usando o script assim agora... quando alguém tenta abri-lo e ele estiver vazio queria q sumisse

 e se puder me explica como usar esse tal de stackpos = 1

 

Spoiler

function onUse(cid, item, frompos, item2, topos)
	local bau = item.uid
	local pos = getThingPos(item.uid)
	
if getContainerSize(item.uid) == 0 then
doRemoveItem(getThingFromPos(pos).uid, 1)

end
end		
			
	

 

 

Editado por pablobion (veja o histórico de edições)

Scriptszinhos:

 

Não abandone seu tópico, quando você tiver a dúvida resolvida sozinho tente ensinar aos outros como resolve-la (você pode não ser o único com o problema) e quando ela for resolvida por outra pessoa não se esqueça de marcar como melhor resposta e deixar o gostei.

Link para o post
Compartilhar em outros sites

Tenta fazer assim:
 

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

	local bau = item.uid

	if getContainerSize(bau) == 0 then
		doRemoveItem(bau, 1)
	end
	return true
end	

 

                                                                     Ajudei? De nada \o/                                            Att Rusherzin

Link para o post
Compartilhar em outros sites
4 minutos atrás, Rusherzin disse:

Tenta fazer assim:
 


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

	local bau = item.uid

	if getContainerSize(bau) == 0 then
		doRemoveItem(bau, 1)
	end
	return true
end	

 



assim nem abre o bau...
abre só se eu tirar o return true. 
e quando tiro da erro no console apos abrir o bau com containersize no 0 

 

"  R6025
- pure virtual function call   "

nunca vi esse erro na vida  :C mas obrigado mesmo assim.. se souber de mais alguma coisa me avise.

Scriptszinhos:

 

Não abandone seu tópico, quando você tiver a dúvida resolvida sozinho tente ensinar aos outros como resolve-la (você pode não ser o único com o problema) e quando ela for resolvida por outra pessoa não se esqueça de marcar como melhor resposta e deixar o gostei.

Link para o post
Compartilhar em outros sites

Aqui funcionou numa boa, deve ter algum problema com a função de getContainerSize na sua base.

                                                                     Ajudei? De nada \o/                                            Att Rusherzin

Link para o post
Compartilhar em outros sites
45 minutos atrás, Rusherzin disse:

Aqui funcionou numa boa, deve ter algum problema com a função de getContainerSize na sua base.


talvez... também achei estranho, só acusa o erro quando é um container. :( 

Scriptszinhos:

 

Não abandone seu tópico, quando você tiver a dúvida resolvida sozinho tente ensinar aos outros como resolve-la (você pode não ser o único com o problema) e quando ela for resolvida por outra pessoa não se esqueça de marcar como melhor resposta e deixar o gostei.

Link para o post
Compartilhar em outros sites

Tive uma ideia, tu pode checar se o peso do item está maior do que o peso original, usando getItemWeight(bau) para pegar o peso do baú (virá mais pesado se tiver algo dentro) e o peso do item pelo id com getItemWeightById(item.itemid).
 

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

	local bau = item.uid
	if getItemWeightById(item.itemid) - getItemWeight(bau) == 0 then
		doRemoveItem(bau, 1)
		return true
	end
end	

 

                                                                     Ajudei? De nada \o/                                            Att Rusherzin

Link para o post
Compartilhar em outros sites
1 hora atrás, Rusherzin disse:

Tive uma ideia, tu pode checar se o peso do item está maior do que o peso original, usando getItemWeight(bau) para pegar o peso do baú (virá mais pesado se tiver algo dentro) e o peso do item pelo id com getItemWeightById(item.itemid).
 


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

	local bau = item.uid
	if getItemWeightById(item.itemid) - getItemWeight(bau) == 0 then
		doRemoveItem(bau, 1)
		return true
	end
end	

 



Funcionou!!! Obrigado mais uma vez... ahsauhasa não entendi muito bem mas aparentemente tudo certo :D <3

@Rusherzin

 

agora so voltando ao primeiro script onde eu queria adicionar um addevent junto...

tentei assim..
para que apos 10 segundos a pessoa abrir o bau se estiver vazio ele some...
no caso se o player retirar o item de dentro em 10 segundos o bau some

but da esse erro.
"attempt to perform arithmetic on a boolean value stack traceback"
alguma ideia? juro que nao incomodo mais XD XD  

 

function onUse(cid, item, frompos, item2, topos)
pos = getThingPos(item.uid)
bau = item.uid

		addEvent (function (cid)
			if getItemWeightById(item.itemid) - getItemWeight(bau) == 0 then
				doRemoveItem(getTileItemById(pos,1989).uid, 1)
			end	
		end, 10 * 1000) 
end	


 

Editado por pablobion (veja o histórico de edições)

Scriptszinhos:

 

Não abandone seu tópico, quando você tiver a dúvida resolvida sozinho tente ensinar aos outros como resolve-la (você pode não ser o único com o problema) e quando ela for resolvida por outra pessoa não se esqueça de marcar como melhor resposta e deixar o gostei.

Link para o post
Compartilhar em outros sites

Tenta assim:
 

function removeGroundItem(pos, itemid)
	local item = getTileItemById(pos, itemid).uid
	return item ~= 0 and doRemoveItem(item, 1)
end

function onUse(cid, item, frompos, item2, topos)
	local bau = item.uid
	local pos = getThingPos(bau)

	if getItemWeightById(item.itemid) - getItemWeight(bau) == 0 then
		addEvent(removeGroundItem, 10000, pos, item.itemid)
		return true
	end
end	

 

Editado por Rusherzin (veja o histórico de edições)

                                                                     Ajudei? De nada \o/                                            Att Rusherzin

Link para o post
Compartilhar em outros sites
1 hora atrás, Rusherzin disse:

Tenta assim:
 


function removeGroundItem(pos, itemid)
	local item = getTileItemById(pos, itemid).uid
	return item ~= 0 and doRemoveItem(item, 1)
end

function onUse(cid, item, frompos, item2, topos)
	local bau = item.uid
	local pos = getThingPos(bau)

	if getItemWeightById(item.itemid) - getItemWeight(bau) == 0 then
		addEvent(removeGroundItem, 10000, pos, item.itemid)
		return true
	end
end	

 



eu não sei realmente se é possivel fazer o que quero, mas acredito que sim... eu não consigo porque não entendo de callback

mas tem que realizer o addevent e depois fazer a verificação se tem 0 itens dentro.. vou usar portugol pra ve se vc consegue me entender.

> player abriu bau
> pegou ou não pegou item (tanto faz)
> aciona um addevent(de 10 segundos) para verificar se tem coisa dentro do bau ainda
    > se não tiver nada dentro exclui.
   > se ainda tiver coisa dentro não faz nada.

Scriptszinhos:

 

Não abandone seu tópico, quando você tiver a dúvida resolvida sozinho tente ensinar aos outros como resolve-la (você pode não ser o único com o problema) e quando ela for resolvida por outra pessoa não se esqueça de marcar como melhor resposta e deixar o gostei.

Link para o post
Compartilhar em outros sites
  • Solução

Acho que entendi, seria assim:
 

function removeEmptyChest(pos, itemid)
	local item = getTileItemById(pos, itemid).uid

	if getItemWeightById(itemid) - getItemWeight(item) == 0 then
		return item ~= 0 and doRemoveItem(item, 1)
	end
end

function onUse(cid, item, frompos, item2, topos)
	local bau = item.uid
	local pos = getThingPos(bau)

	addEvent(removeEmptyChest, 10000, pos, item.itemid)
end	

Se o cara abrir o baú e tirar o item antes desses 10s, o baú vai ser removido.

                                                                     Ajudei? De nada \o/                                            Att Rusherzin

Link para o post
Compartilhar em outros sites
1 hora atrás, Rusherzin disse:

Acho que entendi, seria assim:
 


function removeEmptyChest(pos, itemid)
	local item = getTileItemById(pos, itemid).uid

	if getItemWeightById(itemid) - getItemWeight(item) == 0 then
		return item ~= 0 and doRemoveItem(item, 1)
	end
end

function onUse(cid, item, frompos, item2, topos)
	local bau = item.uid
	local pos = getThingPos(bau)

	addEvent(removeEmptyChest, 10000, pos, item.itemid)
end	

Se o cara abrir o baú e tirar o item antes desses 10s, o baú vai ser removido.


Pronto agora sim! funcionou.. +rep <3 

 

mas caso o player abrir de novo nesses 10 segundos depois que tiver vazio da erro do tipo :/


(LuaInterface::luaGetItemWeight) Item not found
attempt to perform arithmetic on a boolean value

 

.. mas enfim muito obrigado :D caso n der pra arrumar ja ta otimo kk

 

@Rusherzin acho que resolveria com na function onUse colocasse um if se o bau tivesse vazio apenas sumiria o item (precausão caso 1 player abrisse o bau depois de o outro juntar o item) e outro if que se caso isso acontecer não rodar mais o addevent. ficou confuso o.O

 

Editado por pablobion (veja o histórico de edições)

Scriptszinhos:

 

Não abandone seu tópico, quando você tiver a dúvida resolvida sozinho tente ensinar aos outros como resolve-la (você pode não ser o único com o problema) e quando ela for resolvida por outra pessoa não se esqueça de marcar como melhor resposta e deixar o gostei.

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo