From db2795eb4f2ababe468f5dfc217b70c9b05ce0ef Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 22 Jan 2025 09:30:32 +0300 Subject: [PATCH] update console commands execution pipeline --- doc/en/console.md | 7 +++++++ doc/ru/console.md | 7 +++++++ res/layouts/console.xml.lua | 19 ++++++++++++------- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/doc/en/console.md b/doc/en/console.md index 04d3d48d..f4ff8aff 100644 --- a/doc/en/console.md +++ b/doc/en/console.md @@ -2,6 +2,13 @@ To work with the command interpreter, use the **console** library. +When sending a command via the standard console (core:console layout): +1. the `allow-cheats` rule is checked +2. the `pos.x|y|z`, `entity.id`, `entity.selected` variables are automatically set. +3. the command handler is called - console.submit or the default one. + +The default handler calls console.execute, passing the result to the console.log call. + ## Commands creation To create a console command, use the following function: diff --git a/doc/ru/console.md b/doc/ru/console.md index a142f84f..b4099bc5 100644 --- a/doc/ru/console.md +++ b/doc/ru/console.md @@ -2,6 +2,13 @@ Для работы с командным интерпретатором предоставляется библиотека **console**. +При отправке команды через стандартную консоль (макет core:console): +1. проверяется правило `allow-cheats` +2. автоматически устанавливаются переменные `pos.x|y|z`, `entity.id`, `entity.selected`. +3. вызывается обработчик команд - console.submit или по-умолчанию. + +Обработчик по-умолчанию вызывает console.execute, передавая результат в вызов console.log. + ## Создание команд Для создания команды консоли используется следующая функция: diff --git a/res/layouts/console.xml.lua b/res/layouts/console.xml.lua index 7e41ddf6..b8f71b75 100644 --- a/res/layouts/console.xml.lua +++ b/res/layouts/console.xml.lua @@ -101,7 +101,7 @@ function setup_variables() console.set('pos.y', y) console.set('pos.z', z) local pentity = player.get_entity(pid) - if pentity ~= 0 then + if pentity > 0 then console.set('entity.id', pentity) end local sentity = player.get_selected_entity(pid) @@ -148,8 +148,6 @@ function submit(text) text = text:sub(2) end end - - setup_variables() local name for s in text:gmatch("%S+") do @@ -167,12 +165,19 @@ function submit(text) end document.log.caret = -1 - local status, result = pcall(console.execute, text) - if result then - console.log(result) - end document.prompt.text = "" document.prompt.focused = true + + setup_variables() + + if console.submit then + console.submit(text) + else + local status, result = pcall(console.execute, text) + if result then + console.log(result) + end + end end function set_mode(mode)