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
.