Voiced Handler (Komendy głosowe)
Voiced Handlers to funkcje serwera, które pozwalają graczom na używanie nowych komend w formacie .komenda. Komendy te są często używane do automatyzacji zadań lub uzyskiwania dostępu do określonych okien.
Aby utworzyć nową komendę głosową (Voiced Command), masz kilka opcji: możesz skopiować istniejący plik, użyć dostarczonego przykładu jako szablonu lub stworzyć nową klasę od podstaw, implementując interfejs IVoicedCommandHandler.
Niezależnie od wybranej metody tworzenia klasy, musisz zaimplementować metodę useVoicedCommand, aby obsłużyć komendę. Pojedynczy plik Java może obsługiwać wiele komend, zazwyczaj pogrupowanych według podobnych funkcjonalności.
Istnieją dwa rodzaje komend: zwykłe komendy oraz komendy z parametrami. Obecnie nie ma standardowej metody do tokenizacji parametrów. Niektóre techniki obejmują dzielenie tekstu według spacji, ale jeśli Twoje parametry mogą zawierać spacje, dzielenie według przecinków może być lepszą opcją. Wybór metody tokenizacji zależy od Ciebie.
Przyjrzyjmy się teraz strukturze prostej komendy głosowej.
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 {
// To są komendy, które chcesz uwzględnić.
private static final String[] VOICED_COMMANDS = {
"prosta",
"zparametrami"
};
@Override
public boolean useVoicedCommand(String command, L2PcInstance player, String params) {
switch (command) {
case "prosta": {
player.sendMessage("Wywołano prostą komendę 'prosta'!");
// Dodaj poniżej logikę powiązaną z tą komendą.
break;
}
case "zparametrami": {
final var parameters = params.split(" ");
// Sprawdzenie, czy podano przynajmniej jeden parametr.
if (parameters.length == 0) {
player.sendMessage("Wywołano komendę 'zparametrami' bez parametrów!");
return false;
}
player.sendMessage("Wywołano komendę 'zparametrami' z pierwszym parametrem: " + parameters[0] + "!");
// Dodaj poniżej logikę powiązaną z tą komendą.
break;
}
}
return true;
}
@Override
public String[] getVoicedCommandList() {
return VOICED_COMMANDS;
}
}
Klasa BasicVoicedCommand obsługuje dwie komendy: prosta i zparametrami. Komendy te są przetwarzane za pomocą bloku switch, choć można by również użyć struktury if-else-if. W przypadku komendy prosta, do gracza wysyłana jest wiadomość wraz z komentarzem zachęcającym do dodania własnej logiki. Przy komendzie zparametrami, parametry są dzielone według spacji. Należy zauważyć, że argument params może być pustym ciągiem znaków lub rzeczywistymi danymi wprowadzonymi przez gracza.
Kod sprawdza, czy przekazano przynajmniej jeden parametr. Jeśli nie, graczowi wyświetlana jest wiadomość, a komenda zwraca false, informując o niepowodzeniu. Z drugiej strony, jeśli podano jeden lub więcej parametrów, do gracza wysyłana jest inna wiadomość, zawierająca pierwszy z parametrów.
Aby ukończyć konfigurację, musisz wprowadzić zmiany w klasie MasterHandler znajdującej się w pakiecie com.l2jserver.datapack.handlers. Znajdź tablicę VOICED_COMMAND_HANDLERS w klasie i odpowiednio dodaj swoją nową klasę.
import com.l2jserver.datapack.handlers.voicedcommandhandlers.BasicVoicedCommand;
// ...
private static final Class<?>[] VOICED_COMMAND_HANDLERS = {
AutoLoot.class,
StatsVCmd.class,
// TODO: Dodaj opcje konfiguracji dla tych komend:
// 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,
};
// ...
Pamiętaj, aby zaimportować klasę BasicVoicedCommand również do klasy MasterHandler.