Ir para conteúdo

Iterator


Eventide

Posts Recomendados

aviso: para entender esse tutorial é preciso um conhecimento de for e de arrays.

 

Iterator é uma forma de percorrer uma array, elemento por elemento.

Exemplo de sistema de food reduzido :

-- Exemplo de iterator
-- food system simplificado por eventide :D --
function onUse(cid, item, fromPosition, itemEx, toPosition)
	local foodId = {100, 200, 300, 500} -- IDs
	local foodHun = {1020, 2000, 1348, 3450} -- essas hungrys não são verdadeiras
	local som = {"hmmm", "chomp", "nhac", "chomp"} -- nem o som..;p
		for I = 1,#foodId do
			food = {foodHun[I], som[I]}
				if food[1] == item.itemid then
					doPlayerFeed(cid, food[1])
					doRemoveItem(item.uid, 1)
					doCreatureSay(cid, food[2], TALKTYPE_ORANGE_1)
				end
		end
end

 

Nesse exemplo, eu percorro a array foodId que deve ter o mesmo tamanho de som, do seu elemento 1 até o ultimo elemento, tendo sempre I como referencia do elemento. (para quem não sabe, #array pega o numero de elementos da array)

 

E com isso, eu verifico todos os tipos de comidas, de uma só vez, reduzindo o numero de linhas e tornando o script "melhor" e até mais fácil de se fazer futuras edições.

 

isso pode se aplicar a muitas³ coisas, principalmente quando se quer reduzir linhas, e se tem tudo feito por tabelas.. :D

 

(o tuto pode ser curto, mas garanto que é util..)

 

edit: bugs fixed.. ;p

Editado por VaL
Arrumar um problema mínimo de identação
Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

lembrando que esse sistema de food é apenas um exemplo, o que interessa ali é o iterator em si.. x.x

(senão já vem nego enchendo falando que o sistema de food não funciona e etc)

 

@zafor

em breve vou fazer tutorial de for e de arrays.. (for já tá feito, só to aguardando avaliação.. x.x)

Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...
Não vale a pena lembrar que isso ai não é Iterator :s

Iterator são aqueles que você usa com 2 valores.

 

Exemplos bons são ipairs() ou pairs()...

 

\\

a base é a mesma.. u.u

Link para o comentário
Compartilhar em outros sites

Na verdade não.

O comando #table é para você 'loopar' uma tabela, e os iterators são para você retornar valores (na maioria dos casos de uma tabela).

Não é a mesma base pois todos os iterators usam a palavra in na sua sintaxe :p

 

\\

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...