EV

Iterator

Por Eventide, 29 de jan. de 2009 em Tutoriais de Scripting

script
10
1.7k
EventideE
29 de janeiro de 2009 às 03:14

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 Abril 2 por VaL

Arrumar um problema mínimo de identação

29 de janeiro de 2009 às 08:35
(o tuto pode ser curto, mas garanto que é util..)

 

Útil é mesmo, de vez em quando eu sempre tento diminuir alguns scripts...as vezes consigo, as vezes não huahuah

noobinhuN
29 de janeiro de 2009 às 08:48

Bom, só faltou um return TRUE ali depois do if item... pro script ficar melhor né =O

 

Iniciantes não entenderão este tutorial =o

1 mês depois...
RedZLR
08 de fevereiro de 2009 às 17:44

Estarei colocando entre '[]' como nível mediano, certo?

 

Tutorial aprovado e movido para Tutoriais - OTServ > Tutoriais de Scripting.

ZaforZ
10 de fevereiro de 2009 às 19:51

Pena que novatos na area de script's não entedem isso ( tipo eu ) uheuheuheuh mais pelo que deu para entender ta bem dahora o tuto ;O

EventideE
11 de fevereiro de 2009 às 16:35

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)

3 semanas depois...
TprocheiraT
28 de fevereiro de 2009 às 09:49

Não vale a pena lembrar que isso ai não é Iterator :s

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

for key, value in iterator do

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

 

\\

Holly AngelH
04 de março de 2009 às 18:43

Muito bom! Parábens!

EventideE
07 de março de 2009 às 18:58
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

TprocheiraT
08 de março de 2009 às 00:34

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

 

\\