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
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.
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.
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:
localnumber=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:
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.
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.
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)
-- 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