Funções

Criar blocos de código reutilizáveis

Sintaxe

function NOME(PARÂMETROS):
    # código

function NOME(PARÂMETROS) returns TIPO:
    return VALOR

Função Básica

function hello_world():
    broadcast "&aHello, World!"

# Uso
on join:
    hello_world()

Função com Parâmetros

function greet(player: player):
    send "&aWelcome, %{player}%!" to {player}

function greet_message(player: player, message: text):
    send "&a%{message}%, %{player}%!" to {player}

# Uso
on join:
    greet(player)
    greet_message(player, "Hello")

Tipos de Parâmetros

TipoDescrição
playerJogador
numberNúmero (inteiro ou decimal)
textTexto/String
booleanTrue/False
locationLocalização no mundo
itemItem do Minecraft

Função com Retorno

function double(n: number) returns number:
    return {n} * 2

function get_prefix(player: player) returns text:
    if player has permission "admin":
        return "&c[Admin]"
    else if player has permission "vip":
        return "&6[VIP]"
    else:
        return "&7[Player]"

# Uso
on join:
    set {_doubled} to double(5)         # 10
    set {_prefix} to get_prefix(player)
    broadcast "%{_prefix}% %player% joined!"

Parâmetros Padrão

Defina valores padrão para parâmetros opcionais:

function give_coins(player: player, amount: number = 100):
    add {amount} to {coins::%{player}'s uuid%}
    send "&a+%{amount}% coins!" to {player}

# Uso
give_coins(player)          # Dá 100 coins (padrão)
give_coins(player, 500)     # Dá 500 coins

Funções Utilitárias

lib/utils.lzl
# Biblioteca de funções úteis

function format_number(n: number) returns text:
    if {n} >= 1000000:
        return "%{n} / 1000000%M"
    else if {n} >= 1000:
        return "%{n} / 1000%K"
    else:
        return "%{n}%"

function is_staff(player: player) returns boolean:
    if player has permission "staff":
        return true
    return false

function random_between(min: number, max: number) returns number:
    return random integer between {min} and {max}

function teleport_safe(player: player, loc: location):
    # Teleporta para cima até encontrar espaço
    teleport {player} to {loc}
    send "&aTeleported!" to {player}

Exemplo Prático

rank-system.lzl
# Sistema de ranks com funções

function get_rank(player: player) returns text:
    if {rank::%{player}'s uuid%} is set:
        return {rank::%{player}'s uuid%}
    return "member"

function get_rank_prefix(rank: text) returns text:
    switch {rank}:
        case "owner":
            return "&4[OWNER]"
        case "admin":
            return "&c[ADMIN]"
        case "mod":
            return "&e[MOD]"
        case "vip":
            return "&6[VIP]"
        default:
            return "&7[MEMBER]"

function get_rank_color(rank: text) returns text:
    switch {rank}:
        case "owner":
            return "&4"
        case "admin":
            return "&c"
        case "mod":
            return "&e"
        case "vip":
            return "&6"
        default:
            return "&7"

function format_player_name(player: player) returns text:
    set {_rank} to get_rank({player})
    set {_prefix} to get_rank_prefix({_rank})
    set {_color} to get_rank_color({_rank})
    return "%{_prefix}% %{_color}%%{player}%"

# Uso
on chat:
    cancel event
    set {_formatted} to format_player_name(player)
    broadcast "%{_formatted}%&r: %message%"

on join:
    set {_formatted} to format_player_name(player)
    broadcast "%{_formatted}% &7joined the server!"

Organização

Coloque funções utilitárias em arquivos separados na pasta scripts/lib/para reutilizá-las em múltiplos scripts.