Loops

Repetir código várias vezes

Loop Times

Repita um bloco de código um número específico de vezes:

loop 5 times:
    send "Hello!" to player

loop 10 times:
    give diamond to player

Loop Range

Itere sobre um intervalo de números:

loop numbers from 1 to 10:
    send "Number: %loop-number%" to player

loop numbers from 0 to 5:
    set {slot::%loop-number%} to loop-number

Loop List

Itere sobre uma lista de valores:

# Adicionar itens à lista
add "apple" to {fruits::*}
add "banana" to {fruits::*}
add "orange" to {fruits::*}

# Loop pela lista
loop {fruits::*}:
    send "Fruit: %loop-value%" to player

Loop Players

Itere sobre todos os jogadores online:

loop all players:
    send "Hello %loop-player%!" to loop-player

loop all players:
    if loop-player has permission "vip":
        give diamond to loop-player

Expressões de Loop

ExpressãoDescrição
loop-numberNúmero atual em loops numéricos
loop-valueValor atual em loops de lista
loop-playerPlayer atual em loops de players
loop-indexÍndice atual (1-based)

Continue & Stop

Continue

Pula para a próxima iteração:

loop all players:
    if loop-player has permission "admin":
        continue  # Pula admins
    send "Regular player: %loop-player%" to console

Stop Loop

Para o loop completamente:

loop {items::*}:
    if loop-value is "stop":
        stop loop  # Para o loop
    send "%loop-value%" to player

Loops Aninhados

loop numbers from 1 to 3:
    set {_outer} to loop-number
    loop numbers from 1 to 3:
        set {_inner} to loop-number
        send "%{_outer}% x %{_inner}% = %{_outer} * {_inner}%" to player

Performance

Evite loops muito grandes ou aninhados demais. O Lazuli tem um limite configurável de iterações para prevenir travamentos.

Exemplos Práticos

Countdown
command /countdown:
    permission: admin.countdown
    trigger:
        loop numbers from 10 to 1:
            broadcast "&e%loop-number%..."
            wait 1 second
        broadcast "&a&lGO!"
Top Players
command /top:
    trigger:
        send "&6=== Top Players ===" to player
        set {_count} to 0
        
        loop {kills::*}:
            add 1 to {_count}
            if {_count} > 10:
                stop loop
            send "&e%{_count}%. &f%loop-index%: &a%loop-value% kills" to player
VIP Broadcast
every 10 minutes:
    set {_vips} to 0
    loop all players:
        if loop-player has permission "vip":
            add 1 to {_vips}
    
    if {_vips} > 0:
        broadcast "&6There are %{_vips}% VIP players online!"