メインコンテンツへスキップ

ボイスハンドラー (Voiced Handlers)

ボイスハンドラーは、プレイヤーが .command 形式の新しいコマンドを使用できるようにするサーバー機能です。これらのコマンドは、タスクの自動化や特定のウィンドウへのアクセスによく使用されます。

新しいボイスコマンドを作成するには、いくつかのオプションがあります。既存のファイルをコピーする、提供された例をテンプレートとして使用する、または IVoicedCommandHandler インターフェースを実装してゼロから新しいクラスを作成することができます。

どの方法を選んでも、コマンドを処理するために useVoicedCommand メソッドを実装する必要があります。1つのJavaファイルで複数のコマンドを処理でき、通常は似たような機能に基づいてグループ化されます。

コマンドには、単純なコマンドとパラメータ付きのコマンドの2種類があります。現時点では、パラメータを分割するための標準的な方法は用意されていません。一般的な手法はスペースによる分割ですが、トークンにスペースが含まれる可能性がある場合は、カンマによる分割も検討できます。分割方法の選択は開発者に委ねられています。

では、基本的なボイスコマンドの構造を見てみましょう。

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(" ");

// 少なくとも1つのパラメータが提供されているか確認します。
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 クラスは simplewithparams の2つのコマンドを処理します。これらのコマンドは switch ブロックを使用して処理されますが、if-else-if 構造を使用することもできます。simple の場合、プレイヤーにメッセージが送信され、カスタムロジックの追加を促すコメントが表示されます。withparams の場合、パラメータはスペースで分割して解析されます。注意点として、params 引数は空の文字列、あるいはプレイヤーが入力した実際の引数になり得ます。

コードは少なくとも1つのパラメータが渡されたかどうかを検証します。渡されていない場合、プレイヤーにメッセージが表示され、コマンドは失敗を示すために false を返します。一方、1つ以上のパラメータが提供された場合、最初のパラメータを含む別のメッセージがプレイヤーに送信されます。

設定を完了するには、com.l2jserver.datapack.handlers パッケージにある MasterHandler クラスを変更する必要があります。クラス内の 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 クラスにもインポートすることを忘れないでください。