Direkt zum Inhalt

Voiced Handler

Voiced Handler sind Serverfunktionen, die es Spielern ermöglichen, neue Befehle im Format .befehl zu verwenden. Diese Befehle werden oft verwendet, um Aufgaben zu automatisieren oder auf bestimmte Fenster zuzugreifen.

Um einen neuen Voiced-Befehl zu erstellen, haben Sie mehrere Möglichkeiten: Sie können eine vorhandene Datei kopieren, das bereitgestellte Beispiel als Vorlage verwenden oder eine neue Klasse von Grund auf erstellen, indem Sie das Interface IVoicedCommandHandler implementieren.

Unabhängig von der gewählten Methode zur Erstellung der Klasse müssen Sie die Methode useVoicedCommand implementieren, um den Befehl zu verarbeiten. Eine einzelne Java-Datei kann mehrere Befehle verarbeiten, die typischerweise nach ähnlichen Funktionalitäten gruppiert sind.

Es gibt zwei Arten von Befehlen: einfache Befehle und Befehle mit Parametern. Derzeit gibt es keine Standardmethode zur Tokenisierung von Parametern. Einige Techniken beinhalten das Aufteilen nach Leerzeichen, aber wenn Ihre Token Leerzeichen enthalten können, könnte das Aufteilen nach Kommas eine praktikable Option sein. Die Wahl der Tokenisierungsmethode bleibt Ihrem Ermessen überlassen.

Lassen Sie uns nun die Struktur eines einfachen Voiced-Befehls untersuchen.

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 {
// Dies sind die Befehle, die Sie einschließen möchten.
private static final String[] VOICED_COMMANDS = {
"simple",
"withparams"
};

@Override
public boolean useVoicedCommand(String command, L2PcInstance player, String params) {
switch (command) {
case "simple": {
player.sendMessage("Einfacher Voiced-Befehl 'simple' aufgerufen!");
// Fügen Sie unten die mit diesem Befehl verknüpfte Logik hinzu.

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

// Überprüfung, ob mindestens ein Parameter angegeben wurde.
if (parameters.length == 0) {
player.sendMessage("Voiced-Befehl 'withparams' ohne Parameter aufgerufen!");
return false;
}

player.sendMessage("Voiced-Befehl 'withparams' aufgerufen, mit dem ersten Parameter " + parameters[0] + "!");
// Fügen Sie unten die mit diesem Befehl verknüpfte Logik hinzu.

break;
}
}
return true;
}

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

Die Klasse BasicVoicedCommand verarbeitet zwei Befehle: simple und withparams. Diese Befehle werden mithilfe eines switch-Blocks verarbeitet, obwohl auch eine if-else-if-Struktur verwendet werden könnte. Im Fall von simple wird eine Nachricht an den Spieler gesendet, zusammen mit einem Kommentar, der dazu anregt, benutzerdefinierte Logik hinzuzufügen. Bei withparams werden die Parameter durch Aufteilen nach Leerzeichen analysiert. Es ist wichtig zu beachten, dass der Parameter params entweder ein leerer String oder die tatsächliche Eingabe des Spielers sein kann.

Der Code überprüft, ob mindestens ein Parameter übergeben wurde. Wenn nicht, wird dem Spieler eine Nachricht angezeigt und der Befehl gibt false zurück, um sein Fehlschlagen anzuzeigen. Wenn andererseits ein oder mehrere Parameter angegeben wurden, wird eine andere Nachricht an den Spieler gesendet, die den ersten Parameter enthält.

Um die Einrichtung abzuschließen, müssen Sie Änderungen an der Klasse MasterHandler vornehmen, die sich im Paket com.l2jserver.datapack.handlers befindet. Suchen Sie das Array VOICED_COMMAND_HANDLERS in der Klasse und fügen Sie Ihre Klasse entsprechend hinzu.

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

// ...

private static final Class<?>[] VOICED_COMMAND_HANDLERS = {
AutoLoot.class,
StatsVCmd.class,
// TODO: Konfigurationsoptionen für diese Voiced-Befehle hinzufügen:
// 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,
};

// ...

Stellen Sie sicher, dass Sie die Klasse BasicVoicedCommand ebenfalls in die Klasse MasterHandler importieren.