Pular para o conteúdo principal

Manipuladores de Comandos Voz

Os Manipuladores de Comandos Voz são funcionalidades do servidor que permitem aos jogadores usar novos comandos no formato .comando. Esses comandos costumam ser usados para automatizar tarefas ou acessar janelas específicas.

Para criar um comando voz, você tem várias opções: pode copiar um arquivo existente, usar o exemplo fornecido como modelo ou criar uma classe do zero implementando a interface IVoicedCommandHandler.

Independentemente do método escolhido para criar a classe, você precisará implementar o método useVoicedCommand para processar o comando. Um único arquivo Java pode lidar com vários comandos, geralmente agrupados com base em funcionalidades semelhantes.

Existem dois tipos de comandos: comandos simples e comandos com parâmetros. Até o momento, não existe um método padrão para tokenizar parâmetros. Algumas técnicas envolvem a divisão por espaços, mas se os seus tokens puderem conter espaços, dividir por vírgulas pode ser uma opção viável. A escolha do método de tokenização fica a seu critério.

Agora, vamos explorar a estrutura de um comando voz básico.

package com.l2jserver.datapack.handlers.voicedcommandhandlers;

import com.l2jserver.gameserver.handler.IVoicedCommandHandler;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;

public class BasicVoicedCommand implements IVoicedCommandHandler {
// These are the commands you want to include.
private static final String[] VOICED_COMMANDS = {
"simple",
"withparams"
};

@Override
public boolean useVoicedCommand(String command, L2PcInstance player, String params) {
switch (command) {
case "simple": {
player.sendMessage("Invoked simple voiced command simple!");
// Add the logic associated to this command below.

break;
}
case "withparams": {
final var parameters = params.split(" ");

// Just checking if at least one parameter has been provided.
if (parameters.length == 0) {
player.sendMessage("Invoked voiced command withparams without parameters!");
return false;
}

player.sendMessage("Invoked voiced command withparams, with first parameter " + parameters[0] + "!");
// Add the logic associated to this command below.

break;
}
}
return true;
}

@Override
public String[] getVoicedCommandList() {
return VOICED_COMMANDS;
}
}

A classe BasicVoicedCommand manipula dois comandos: simple e withparams. Esses comandos são processados usando um bloco switch, embora uma estrutura if-else-if também possa ser usada. No caso de simple, é enviado uma mensagem ao jogador junto com um comentário incentivando a adição de lógica personalizada. Para withparams, os parâmetros são analisados dividindo-os em espaços. É importante notar que o parâmetro params pode ser uma string vazia ou a entrada real fornecida pelo jogador.

O código verifica se pelo menos um parâmetro foi passado. Se não, uma mensagem é exibida ao jogador e o comando retorna false para indicar a sua falha. Por outro lado, se um ou mais parâmetros foram fornecidos, uma mensagem diferente é enviada ao jogador, incluindo o primeiro parâmetro.

Para completar a configuração, você precisa fazer modificações na classe MasterHandler localizada no pacote com.l2jserver.datapack.handlers. Localize o array VOICED_COMMAND_HANDLERS dentro da classe e adicione a sua classe conforme necessário.

import com.l2jserver.datapack.handlers.voicedcommandhandlers.BasicVoicedCommand;

// ...

private static final Class<?>[] VOICED_COMMAND_HANDLERS = {
AutoLoot.class,
StatsVCmd.class,
// TODO: Add configuration options for this voiced commands:
// CastleVCmd.class,
// SetVCmd.class,
(customs().allowWedding() ? Wedding.class : null),
(customs().bankingEnabled() ? Banking.class : null),
(customs().chatAdmin() ? ChatAdmin.class : null),
(customs().multiLangEnable() && customs().multiLangVoiceCommand() ? Lang.class : null),
(customs().debugVoiceCommand() ? Debug.class : null),
(customs().allowChangePassword() ? ChangePassword.class : null),
BasicVoicedCommand.class,
};

// ...

Certifique-se de importar também a classe BasicVoicedCommand na classe MasterHandler.