Voiced Handler (Commandes vocales)
Les Voiced Handlers sont des fonctionnalités du serveur qui permettent aux joueurs d'utiliser de nouvelles commandes au format .commande. Ces commandes sont souvent utilisées pour automatiser des tâches ou accéder à des fenêtres spécifiques.
Pour créer un nouveau gestionnaire de commande vocale (Voiced Command), vous avez plusieurs options : vous pouvez copier un fichier existant, utiliser l'exemple fourni comme modèle, ou créer une nouvelle classe à partir de zéro en implémentant l'interface IVoicedCommandHandler.
Quelle que soit la méthode choisie pour créer la classe, vous devez implémenter la méthode useVoicedCommand pour gérer la commande. Un seul fichier Java peut gérer plusieurs commandes, généralement regroupées par fonctionnalités similaires.
Il existe deux types de commandes : les commandes simples et les commandes avec paramètres. Actuellement, il n'existe pas de méthode standard pour segmenter (tokeniser) les paramètres. Certaines techniques consistent à diviser le texte par des espaces, mais si vos paramètres peuvent contenir des espaces, diviser par des virgules peut être une meilleure option. C'est à vous de choisir la méthode de segmentation.
Examinons maintenant la structure d'une commande vocale simple.
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 {
// Ce sont les commandes que vous souhaitez inclure.
private static final String[] VOICED_COMMANDS = {
"simple",
"avecparam"
};
@Override
public boolean useVoicedCommand(String command, L2PcInstance player, String params) {
switch (command) {
case "simple": {
player.sendMessage("La commande simple 'simple' a été appelée !");
// Ajoutez ci-dessous la logique associée à cette commande.
break;
}
case "avecparam": {
final var parameters = params.split(" ");
// Vérification si au moins un paramètre a été fourni.
if (parameters.length == 0) {
player.sendMessage("La commande 'avecparam' a été appelée sans paramètres !");
return false;
}
player.sendMessage("La commande 'avecparam' a été appelée avec le premier paramètre : " + parameters[0] + " !");
// Ajoutez ci-dessous la logique associée à cette commande.
break;
}
}
return true;
}
@Override
public String[] getVoicedCommandList() {
return VOICED_COMMANDS;
}
}
La classe BasicVoicedCommand gère deux commandes : simple et avecparam. Ces commandes sont traitées par un bloc switch, bien qu'une structure if-else-if puisse également être utilisée. Pour la commande simple, un message est envoyé au joueur avec un commentaire vous invitant à ajouter votre propre logique. Avec la commande avecparam, les paramètres sont divisés par des espaces. Notez que l'argument params peut être soit une chaîne vide, soit les données réelles saisies par le joueur.
Le code vérifie si au moins un paramètre a été transmis. Si ce n'est pas le cas, un message est affiché au joueur et la commande renvoie false, indiquant un échec. En revanche, si un ou plusieurs paramètres sont fournis, un autre message est envoyé au joueur, incluant le premier des paramètres.
Pour terminer la configuration, vous devez apporter des modifications à la classe MasterHandler située dans le paquet com.l2jserver.datapack.handlers. Localisez le tableau VOICED_COMMAND_HANDLERS dans la classe et ajoutez votre nouvelle classe en conséquence.
import com.l2jserver.datapack.handlers.voicedcommandhandlers.BasicVoicedCommand;
// ...
private static final Class<?>[] VOICED_COMMAND_HANDLERS = {
AutoLoot.class,
StatsVCmd.class,
// TODO: Ajouter des options de configuration pour ces commandes :
// 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,
};
// ...
N'oubliez pas d'importer également la classe BasicVoicedCommand dans la classe MasterHandler.