Ir para conteúdo
  • Cadastre-se

Aula [8] Loops: while e repeat


Posts Recomendados

While & repeat

Aula 8

Primeiramente desculpe a demora por essa aula, ficou meio aquela de; ah faz você, não faz você, anem faz você; Mais em fim estamos de volta com uma coisa indispensável em scripting que são os loops. Antes de tudo devo avisa que loops são perigosos, você pode travar seu servidor inteiro usando errado um loop.

Os loops são usados para inicialmente quando temos varias funções juntas iguais, por exemplo, fazendo um jogador falar oi 10 vezes. Sem os loops você faria assim:


doPlayerSay(cid,'oi',1)

doPlayerSay(cid,'oi',1)

doPlayerSay(cid,'oi',1)

doPlayerSay(cid,'oi',1)

doPlayerSay(cid,'oi',1)

doPlayerSay(cid,'oi',1)

doPlayerSay(cid,'oi',1)

doPlayerSay(cid,'oi',1)

Com loops você resume isso a 4 linhas, e ainda pode fazer milhares de coisas com eles! While Sintaxe:

while (sentença) do

(bloco)

end

Traduzindo:

enquanto (algo for verdadeiro) Fazer

(coisas)

fim

Entao repare, enquanto algo for verdadeiro fazer... Ele vai executar o que estiver dentro do loop infinitas veses até que o ((sentença)) seja falso ou você mande ele parar. Veja um exemplo:

while getPlayerLevel(cid) < 10 do --- Enquanto o level for menor que 10

	  doPlayerAddExp(cid,1000) adcionar 1k de exp por vez

end

Viram? enquanto o nível for menor que 10 ele vai adicionar 1k de exp. Ele ira verificar, se for false (maior que 10) ele pula tudo e vai para o que estiver depois do end, se for true (for menor que 10) ele ira adicionar 1k de exp e depois ira verificar dinovo, ele vai executar até que seje 10. Nessa hora que se tem que tomar cuidado, é na verificação. Se você colocar algo como: while 1 < 2 do, ele vai executar eternamente, até que vc encerre o programa forçadamente (ctrl-alt-del) ou reinicie o
pc, ou entao fexe o programa no X coolface.png Veja mais alguns exemplos:

pos = {x=100,y=100,z=100,stackpos=0}

local stack = 0

while stack < 255 do

	 pos.stackpos = stack

	 local item = getThingFromPos(pos)

	 if item.itemid ~= 0 and isCreature(item.uid) == false then

		doRemoveItem(item.uid,item.type)

	 end

	 stack = stack+1

end

player ou monster ele ira remover o item e no final adcionar +1 numero a nossa variavel stack, Nisso repare, ele ira executar 255 veze e ira deletar todos os items daquela posição ;D imagina vc escrevendo isso 255 vezes sem o loop ermm.gif. Repeat Ao contrario do while ele é tudo ao contrario, a verificação é no fim e ele só repete se for false (contrario de while que é se for true) Sintaxe:

repeat

(bloco)

until (sentença)

Tradução:

Repetir

(coisas)

até (bloco)

Bem nao seria até seria até que nao, pois se você usar: until true ele vai parar, e se usar: until false ele vai continuar. è ao contrario especificando mais. Diferente do while, o repeat ele executa primeiro o bloco para depois verificar, a verificação é no final. Tambem perigoso pois se usado incorretamente vc vai travar seu server tambem. Mais nao ligue pra isso todos que começam a mexer com loops sempre travam seus servidores no começo é normal. Veja o repeat em uso:

local n = 0

repeat

n = n+1

print('ola pessoas este é o loop numero:'..n)

until n == 10

Ele ira executar 10 vezes, ele ira parar quando n for 10. Agora veja o exemplo de limpar o char adaptado para o repeat e veja a diferença (repare nos sinais de > e< )

pos = {x=100,y=100,z=100,stackpos=0}

local stack = 0

repeat

	 pos.stackpos = stack

	 local item = getThingFromPos(pos)

	 if item.itemid ~= 0 and isCreature(item.uid) == false then

		doRemoveItem(item.uid,item.type)

	 end

	 stack = stack+1

until stack > 255

Viram? Ao invez da verificação ser no começo do loop ela é feita no final, entao ao final do lopp antes da verificação eu adciono +1 no valor da variavel stack, e ele so ira parar o loop assim que stack for maior que 255 (ou seja 256), entao assim que o script dentro do loop temrinar com o valor 256 ele ira parar o loop e prosseguir com o resto do script. break Antes de terminarmos irei falar rapidamente sobre o break. Ele é usado APENAS em loops e serve para "quebrar" o loop, acontece quando vc quer parar o loop sem a verificação, ou parar antes de algo. Veja:

local parar = 0

while os.date('%S') == '45' do

	  print('Verificando se agora são 45 segundos')

	  if parar > 25 then

		 break

	  end

	  print('Nem é agora são:'..os.date('%S')..' segundos')

	  parar = para+1

end

print('oi')

Nesse caso criei um script para ver se agora são X horas X minutos e 45 segundos (não importa quantas horas e minutos só os segundos), e se depois de 25 verificações não for 45 segundos ele ira usar o break. Quando usado ele ira finalizar o loop e irar continuar a executar o script depois do loop, no caso o print('oi') ai e o resto do script (caso exista)

Exercicios

Faça seguinte:

  1. Crie um loop que execute enquanto o player estiver online, e enquanto ele estiver online colocar para kickar ele.
  2. Use o repeat para criar um script que solte 25 magic effects diferentes.
  3. Use qualquer loop para criar um scritp que mova um player por 5 sqm em direções aleatorias (o script deve parar com o break!)

DESAFIO

Crie um script que gere um loop infinite que so pare depois de 10 segundos de execução.

Creditos:

99% Mock

1% Vittu

Editado por Vittu (veja o histórico de edições)
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.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo