Variáveis

Armazenar dados para uso posterior

Tipos de Variáveis

TipoSintaxePersistência
{_variavel}LocalApenas durante execução
{variavel}GlobalPersiste entre restarts

Variáveis Locais

Variáveis locais começam com _ e existem apenas durante a execução do bloco:

on join:
    set {_name} to player's name
    set {_level} to 1
    send "Hello %{_name}%, level %{_level}%!" to player
    
# {_name} e {_level} não existem mais aqui

Variáveis Globais

Variáveis globais são salvas automaticamente e persistem entre restarts:

# Armazenar dados de player
set {coins::%player's uuid%} to 500
set {home::%player's uuid%} to player's location

# Dados globais do servidor
set {total_joins} to {total_joins} + 1

UUID vs Nome

Sempre use player's uuid ao invés de player's name para indexar dados de player. Nomes podem mudar, UUIDs são permanentes.

Operações

Definir Valores

set {_score} to 100
set {_name} to "Steve"
set {_location} to player's location

Matemática

set {_a} to 10
set {_b} to 5

set {_sum} to {_a} + {_b}           # 15
set {_diff} to {_a} - {_b}          # 5
set {_product} to {_a} * {_b}       # 50
set {_quotient} to {_a} / {_b}      # 2

add 10 to {_a}                       # {_a} = 20
remove 3 from {_a}                   # {_a} = 17

Listas

Use ::* para trabalhar com listas:

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

# Acessar por índice
set {_first} to {fruits::1}         # "apple"

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

# Tamanho da lista
set {_count} to size of {fruits::*}

# Remover da lista
remove "banana" from {fruits::*}

# Limpar lista
clear {fruits::*}
delete {fruits::*}

Variáveis Aninhadas

Organize dados complexos com aninhamento:

# Dados de player
set {player::%player's uuid%::coins} to 100
set {player::%player's uuid%::kills} to 0
set {player::%player's uuid%::deaths} to 0

# Acessar
send "Coins: %{player::%player's uuid%::coins}%" to player

# Deletar todos os dados de um player
delete {player::%player's uuid%::*}

Verificações

# Verificar se definida
if {home::%player%} is set:
    teleport player to {home::%player%}
else:
    send "No home set!" to player

# Verificar se vazia
if {list::*} is empty:
    send "List is empty!"

# Deletar variável
delete {variable}
delete {player::%player%::*}        # Deleta todos aninhados

Valores Padrão

Use ? para definir um valor padrão se a variável não existir:

set {_coins} to {coins::%player%} ? 0
# Se não definida, usa 0

send "Balance: %{coins::%player%} ? 0%" to player

Exemplo Prático

sistema-de-economia.lzl
# Sistema de economia simples

on first join:
    set {balance::%player's uuid%} to 100
    send "&aYou received 100 coins as a welcome bonus!" to player

command /balance:
    aliases: /bal, /money
    trigger:
        set {_bal} to {balance::%player's uuid%} ? 0
        send "&eYour balance: &f%{_bal}% coins" to player

command /pay <player> <number>:
    trigger:
        set {_target} to arg-1 parsed as player
        set {_amount} to arg-2
        
        # Validações
        if {_amount} <= 0:
            send "&cAmount must be positive!" to player
            stop
            
        set {_balance} to {balance::%player's uuid%} ? 0
        if {_balance} < {_amount}:
            send "&cInsufficient funds!" to player
            stop
        
        # Transferir
        remove {_amount} from {balance::%player's uuid%}
        add {_amount} to {balance::%{_target}'s uuid%}
        
        send "&aSent %{_amount}% coins to %{_target}%!" to player
        send "&a%player% sent you %{_amount}% coins!" to {_target}