본문으로 건너뛰기

보이스 핸들러 (Voiced Handlers)

보이스 핸들러(Voiced Handlers)는 플레이어가 .명령어 형식의 새로운 명령어를 사용할 수 있게 해주는 서버 기능입니다. 이러한 명령어는 주로 작업을 자동화하거나 특정 창에 액세스하는 데 사용됩니다.

새로운 보이스 명령어를 만들려면 몇 가지 옵션이 있습니다. 기존 파일을 복사하거나, 제공된 예제를 템플릿으로 사용하거나, 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 클래스는 simplewithparams라는 두 가지 명령어를 처리합니다. 이러한 명령어는 switch 블록을 사용하여 처리되지만, if-else-if 구조를 사용할 수도 있습니다. simple의 경우, 커스텀 로직 추가를 권장하는 주석과 함께 플레이어에게 메시지를 보냅니다. withparams의 경우, 공백을 기준으로 매개변수를 파싱합니다. params 매개변수는 빈 문자열이거나 플레이어가 제공한 실제 입력값일 수 있음에 유의하십시오.

코드는 최소 하나의 매개변수가 전달되었는지 확인합니다. 그렇지 않으면 플레이어에게 메시지가 표시되고, 명령어는 실패를 나타내기 위해 false를 반환합니다. 반면에 하나 이상의 매개변수가 제공된 경우, 첫 번째 매개변수를 포함하여 플레이어에게 다른 메시지를 보냅니다.

설정을 완료하려면 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,
};

// ...

MasterHandler 클래스에 BasicVoicedCommand 클래스를 임포트(import)하는 것도 잊지 마십시오.