From 2fe9109178500bd74d3e222fd747c42e305b17f7 Mon Sep 17 00:00:00 2001 From: ScarletRedMan Date: Sun, 13 Apr 2025 14:39:13 +0700 Subject: [PATCH] feat: implemented 'script' action for dialogues --- .../msb3/api/boot/ServerBootstrap.java | 2 ++ .../action/ScriptDialogActionHandler.java | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 api/src/main/java/ru/dragonestia/msb3/api/dialog/action/ScriptDialogActionHandler.java diff --git a/api/src/main/java/ru/dragonestia/msb3/api/boot/ServerBootstrap.java b/api/src/main/java/ru/dragonestia/msb3/api/boot/ServerBootstrap.java index 3b084b5..5dcf30b 100644 --- a/api/src/main/java/ru/dragonestia/msb3/api/boot/ServerBootstrap.java +++ b/api/src/main/java/ru/dragonestia/msb3/api/boot/ServerBootstrap.java @@ -12,6 +12,7 @@ import ru.dragonestia.msb3.api.command.DebugCommands; import ru.dragonestia.msb3.api.dialog.DialogRegistry; import ru.dragonestia.msb3.api.dialog.action.CloseDialogActionHandler; import ru.dragonestia.msb3.api.dialog.action.DialogDialogActionHandler; +import ru.dragonestia.msb3.api.dialog.action.ScriptDialogActionHandler; import ru.dragonestia.msb3.api.dialog.condition.AlwaysDialogConditionHandler; import ru.dragonestia.msb3.api.dialog.condition.NeverDialogConditionHandler; import ru.dragonestia.msb3.api.entity.PickableItem; @@ -203,6 +204,7 @@ public final class ServerBootstrap { private void initDefaultDialogActionsAndConditions() { DialogRegistry.registerActionHandler("close", new CloseDialogActionHandler()); DialogRegistry.registerActionHandler("dialog", new DialogDialogActionHandler()); + DialogRegistry.registerActionHandler("script", new ScriptDialogActionHandler()); DialogRegistry.registerConditionHandler("always", new AlwaysDialogConditionHandler()); DialogRegistry.registerConditionHandler("never", new NeverDialogConditionHandler()); diff --git a/api/src/main/java/ru/dragonestia/msb3/api/dialog/action/ScriptDialogActionHandler.java b/api/src/main/java/ru/dragonestia/msb3/api/dialog/action/ScriptDialogActionHandler.java new file mode 100644 index 0000000..e48e458 --- /dev/null +++ b/api/src/main/java/ru/dragonestia/msb3/api/dialog/action/ScriptDialogActionHandler.java @@ -0,0 +1,32 @@ +package ru.dragonestia.msb3.api.dialog.action; + +import lombok.extern.log4j.Log4j2; +import ru.dragonestia.msb3.api.debug.DebugMessage; +import ru.dragonestia.msb3.api.dialog.DialogButtonClick; +import ru.dragonestia.msb3.api.script.ScriptRegistry; +import ru.dragonestia.msb3.api.script.ScriptService; + +import java.util.Map; + +@Log4j2 +public class ScriptDialogActionHandler implements DialogActionHandler { + + @Override + public void handle(DialogButtonClick click, Map params) { + var player = click.player(); + var scriptId = params.get("scriptId"); + if (scriptId == null) { + DebugMessage.sendError(player, "Отсутствует обязательный параметр scriptId для команды script"); + return; + } + + var script = ScriptRegistry.findAndCreateScript(scriptId); + if (script.isEmpty()) { + log.error("Script {} not found", scriptId); + DebugMessage.sendError(player, "Скрипт с идентификатором %s не найден".formatted(scriptId)); + return; + } + + ScriptService.ofPlayer(player).start(script.get()); + } +}