Перейти до основного вмісту

Голосові обробники (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.