Skip to content

Latest commit

 

History

History
65 lines (52 loc) · 3.24 KB

File metadata and controls

65 lines (52 loc) · 3.24 KB

О кнопках диалога

Кнопки диалога применяются в диалогах(логино) для взаимодействия с NPC.

Структура данных

Кнопка диалога - это JSON-объект, внутри которого описаны параметры кнопки диалога. Ниже приведена таблица с KV-парами данного JSON-объекта).

Ключ Описание Тип Стандартное значение
text Текст данной кнопки string
action Действие данной кнопки. Список всех действий кнопок находится в следующем разделе string "none"
conditions Условия при выполнения которых данная кнопка будет видна игроку string[] []

*Все элементы у которого отсутствует стандартное значение обязательны для ввода

Примеры кнопок диалога

{
  "text": "Пока"
}
{
  "text": "Как дела?",
  "action": "question Да нормально.",
  "conditions": [
    "day"
  ]
}

Список стандартных кнопок диалога

Ниже представлен список всех стандартных кнопок диалога:

Создание собственной кнопки диалога

Для создания собственной кнопки диалога вам потребуется наследовать класс кнопки от класса ButtonInstance.

public class DispatchCommandButtonInstance extends ButtonInstance {

    public DispatchCommandButtonInstance() {
        super("command"); //В конструктор суперкласса передаем id данной кнопки диалога
    }

    @Override
    public void handle(PlayerData playerData, DialogueSender sender, Dialogue dialogue, String text, String[] args) throws DialogueError {
        if(args.length == 0) throw new DialogueError("Неверное кол-во аргументов.");

        playerData.getPlayer().getServer().dispatchCommand(playerData.getPlayer(), String.join(" ", args));
    }

}

Здесь метод handle вызывается при нажиме кнопки игроком.

Также мы можем переопределить методы getButtonIcon для смены иконки кнопки и convertButtonText для того чтобы изменить формат текста кнопки.

После создания класса нам потребуется зарегистрировать данную кнопку в менеджере диалогов, а также регистрация кнопок должна происходить при загрузке плагина(в методе onLoad в главном классе плагина).

@Override
public void onLoad(){
    DialogueManager dialogueManager = Expo.getInstance().getDialogueManager();
    
    dialogueManager.registerButtonInstance(new DispatchCommandButtonInstance());
}