🔀Command

Documentação da Classe Commands

A classe Commands é usada para processar comandos de jogadores, permitindo extrair números ou strings de argumentos fornecidos. Esta documentação explica as funções de forma clara, intuitiva e com exemplos práticos para facilitar o uso.


Como Usar a Classe Commands

  1. Declaração: A classe Commands já está declarada no arquivo GameServer.lua, então não é necessário declará-la novamente. Use diretamente o objeto commands para acessar suas funções.

  2. Uso de Funções: As funções são chamadas com a sintaxe commands:função(argumentos), onde os argumentos geralmente são a string do comando digitada pelo jogador.

  3. Observação:

    • Os comandos são baseados nos argumentos fornecidos pelo jogador, e as funções ajudam a extrair números ou strings de posições específicas na string do comando.

    • Os comandos são registrados usando Commands.Register, associando um comando a uma função personalizada.


Funções da Classe Commands

Abaixo estão as funções disponíveis, explicadas de forma simples com exemplos práticos:

1. getNumber(String, Position)

  • Descrição: Extrai um número da string do comando na posição especificada. Cada posição é separada por espaços.

  • Exemplo:

    local number = commands:getNumber("addmonster 500 3", 1) -- Extrai o número na posição 1 (500)
    LogAdd(string.format("[Command] - Número extraído na posição 1: %d", number), 0)

2. getString(String, Position, FullString)

  • Descrição: Retorna a string na posição especificada da string do comando. Se FullString for true, retorna a string completa (sem o comando inicial).

  • Exemplo:

    local str = commands:getString("say hello world", 1, false) -- Extrai "hello"
    LogAdd(string.format("[Command] - String extraída na posição 1: %s", str), 0)
    
    local fullStr = commands:getString("say hello world", 0, true) -- Extrai "hello world"
    LogAdd(string.format("[Command] - String completa: %s", fullStr), 0)

Como Criar um Comando

Os comandos são criados em scripts Lua, geralmente em arquivos separados, e registrados com Commands.Register. Abaixo está um exemplo de como criar e registrar um comando personalizado.

Estrutura de um Comando

  • Função do Comando: Recebe o índice do jogador (aIndex) e os argumentos do comando (Args).

  • Verificações: Valide permissões (ex.: nível de Game Master) e configurações antes de executar a lógica.

  • Registro: Use Commands.Register(nomeComando, função) para associar o comando à função.


Exemplo Prático Completo

Abaixo está um exemplo fictício que cria um comando para invocar monstros no mapa do jogador, usando as funções da classe Commands. Este código verifica permissões, extrai argumentos e realiza ações com base nos dados fornecidos.

-- Sistema de invocação de monstros
MONSTER_SPAWN = {}

function MONSTER_SPAWN.Command(aIndex, Args)
    -- Cria um objeto User para o jogador
    local player = User.new(aIndex)
    local playerName = player:getName()

    -- Verifica se o comando está ativado
    if MONSTER_SPAWN_COMMAND_SWITCH == 0 then
        SendMessage(string.format("O comando não está ativado."), aIndex, 1)
        LogAdd(string.format("[MonsterSpawn] - [%s] tentou usar o comando, mas está desativado", playerName), 0)
        return
    end

    -- Verifica permissão de Game Master
    if CheckGameMasterLevel(player:getAccountID(), playerName, MONSTER_SPAWN_COMMAND_GAME_MASTER_LEVEL) == 0 then
        SendMessage(string.format("Você não tem permissão para usar este comando."), aIndex, 1)
        LogAdd(string.format("[MonsterSpawn] - [%s] não tem permissão para usar o comando", playerName), 0)
        return
    end

    -- Obtém informações do jogador
    local map = player:getMapNumber()
    local x = player:getX()
    local y = player:getY()

    -- Extrai argumentos do comando
    local monsterClass = commands:getNumber(Args, 1) -- Classe do monstro
    local quantity = commands:getNumber(Args, 2) -- Quantidade de monstros

    -- Loga os argumentos extraídos
    LogAdd(string.format("[MonsterSpawn] - [%s] invocando monstro classe %d, quantidade: %d", playerName, monsterClass, quantity), 0)

    -- Invoca os monstros
    if quantity > 0 then
        for i = 1, quantity do
            local monster = AddMonster(map)
            SetMapMonster(monster, map, math.floor(x + math.random(-2, 2)), math.floor(y + math.random(-2, 2)))
            SetMonster(monster, monsterClass)
        end
        LogAdd(string.format("[MonsterSpawn] - [%s] invocou %d monstro(s) da classe %d", playerName, quantity, monsterClass), 0)
    else
        local monster = AddMonster(map)
        SetMapMonster(monster, map, x, y)
        SetMonster(monster, monsterClass)
        LogAdd(string.format("[MonsterSpawn] - [%s] invocou 1 monstro da classe %d", playerName, monsterClass), 0)
    end
end

-- Registra o comando
Commands.Register(MONSTER_SPAWN_COMMAND, MONSTER_SPAWN.Command)

return MONSTER_SPAWN

Resumo

  • A classe Commands simplifica a extração de números (getNumber) e strings (getString) de comandos digitados pelos jogadores.

  • Os comandos são registrados com Commands.Register, associando um nome a uma função personalizada.

  • O exemplo prático mostra como criar um comando para invocar monstros, verificando permissões, extraindo argumentos e logando ações com LogAdd.

Last updated