feat: implemented 'script' action for dialogues

This commit is contained in:
Andrey Terentev 2025-04-13 14:39:13 +07:00
parent bc9ca3113c
commit 2fe9109178
2 changed files with 34 additions and 0 deletions

View File

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

View File

@ -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<String, String> 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());
}
}