Голосовые обработчики (Voiced Handlers)
Голосовые обработчики — это функции сервера, которые позволяют игрокам использовать новые команды в формате .command. Эти команды часто используются для автоматизации задач или доступа к определенным окнам.
Для создания новой голосовой команды у вас есть несколько вариантов: вы можете скопировать существующий файл, использовать предоставленный пример в качестве шаблона или создать новый класс с н уля, реализовав интерфейс IVoicedCommandHandler.
Независимо от выбранного метода создания класса, вам нужно будет реализовать метод useVoicedCommand для обработки команды. Один Java-файл может обрабатывать несколько команд, обычно сгруппированных по схожей функциональности.
Существует два типа команд: простые команды и команды с параметрами. На данный момент стандартного метода токенизации параметров не существует. Некоторые техники включают разделение по пробелам, но если ваши токены могут содержать пробелы, разделение по запятым может быть жизнеспособным вариантом. Выбор метода токенизации остается на ваше усмотрение.
Теперь давайте изучим структуру базовой голосовой команды.
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 {
// Это команды, которые вы хотите включить.
private static final String[] VOICED_COMMANDS = {
"simple",
"withparams"
};
@Override
public boolean useVoicedCommand(String command, L2PcInstance player, String params) {
switch (command) {
case "simple": {
player.sendMessage("Вызвана простая голосовая команда simple!");
// Добавьте логику, связанную с этой командой, ниже.
break;
}
case "withparams": {
final var parameters = params.split(" ");
// Просто проверяем, был ли предоставлен хотя бы один параметр.
if (parameters.length == 0) {
player.sendMessage("Вызвана голосовая команда withparams без параметров!");
return false;
}
player.sendMessage("Вызвана голосовая команда withparams, с первым параметром " + parameters[0] + "!");
// Добавьте логику, связанну ю с этой командой, ниже.
break;
}
}
return true;
}
@Override
public String[] getVoicedCommandList() {
return VOICED_COMMANDS;
}
}
Класс BasicVoicedCommand обрабатывает две команды: simple и withparams. Эти команды обрабатываются с помощью блока switch, хотя также можно использовать структуру if-else-if. В случае simple игроку отправляется сообщение вместе с комментарием, призывающим добавить пользовательскую логику. Для withparams параметры анализируются путем их разделения по пробелам. Важно отметить, что параметр params может быть либо пустой строкой, либо фактическим вводом игрока.
Код проверяет, был ли передан хотя бы один параметр. Если нет, игроку выводится сообщение, и команда возвращает false, указывая на ее неудачу. С другой стороны, если был предоставлен один или несколько параметров, игроку отправляется другое сообщение, включающее первый параметр.
Для завершения настройки вам необходимо внести изменения в класс MasterHandler, расположенный в пакете com.l2jserver.datapack.handlers. Найдите массив VOICED_COMMAND_HANDLERS внутри класса и добавьте свой класс соответствующим образом.
import com.l2jserver.datapack.handlers.voicedcommandhandlers.BasicVoicedCommand;
// ...
private static final Class<?>[] VOICED_COMMAND_HANDLERS = {
AutoLoot.class,
StatsVCmd.class,
// TODO: Добавьте параметры конфигурации для этих голосовых команд:
// 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,
};
// ...
Убедитесь, что вы также импортировали класс BasicVoicedCommand в класс MasterHandler.