From 4615a425e2f55504af30477154218329e7d7c6e9 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 18 Mar 2026 21:44:26 +0300 Subject: [PATCH 1/6] fix doc/ru/scripting/builtins/libtime.md --- doc/ru/scripting/builtins/libtime.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/ru/scripting/builtins/libtime.md b/doc/ru/scripting/builtins/libtime.md index c4be679be..81bae58f7 100644 --- a/doc/ru/scripting/builtins/libtime.md +++ b/doc/ru/scripting/builtins/libtime.md @@ -1,4 +1,4 @@ -# Библиотека time +# Библиотека *time* ```lua -- Возвращает время с момента запуска движка в секундах и милисекундах. @@ -15,4 +15,4 @@ time.local_time() -> int -- Возвращает смещение локального времени от UTC в секундах time.utc_offset() -> int -``` \ No newline at end of file +``` From c9f9838747e2eaeb774ad9b96fc710a075b2ce9b Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 18 Mar 2026 21:48:23 +0300 Subject: [PATCH 2/6] move session library implementation to a separate module --- res/modules/internal/session.lua | 17 +++++++++++++++++ res/scripts/stdlib.lua | 18 +----------------- 2 files changed, 18 insertions(+), 17 deletions(-) create mode 100644 res/modules/internal/session.lua diff --git a/res/modules/internal/session.lua b/res/modules/internal/session.lua new file mode 100644 index 000000000..39d5c74fc --- /dev/null +++ b/res/modules/internal/session.lua @@ -0,0 +1,17 @@ +local entries = {} +local this = {} + +function this.get_entry(name) + local entry = entries[name] + if entry == nil then + entry = {} + entries[name] = entry + end + return entry +end + +function this.reset_entry(name) + entries[name] = nil +end + +return this diff --git a/res/scripts/stdlib.lua b/res/scripts/stdlib.lua index 3aa149972..900b71b2e 100644 --- a/res/scripts/stdlib.lua +++ b/res/scripts/stdlib.lua @@ -345,23 +345,7 @@ function gui.template(name, params) return text end -session = { - entries={} -} - -function session.get_entry(name) - local entry = session.entries[name] - if entry == nil then - entry = {} - session.entries[name] = entry - end - return entry -end - -function session.reset_entry(name) - session.entries[name] = nil -end - +session = require "core:internal/session" stdcomp = require "core:internal/stdcomp" entities.get = stdcomp.get_Entity entities.get_all = function(uids) From 3cb295fd5866ad77832f347bf6ccc9d2fbac81cc Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 18 Mar 2026 21:52:24 +0300 Subject: [PATCH 3/6] update session library --- res/layouts/console.xml.lua | 2 +- res/layouts/pages/generators.xml.lua | 2 +- res/layouts/pages/new_world.xml.lua | 4 ++-- res/modules/internal/session.lua | 8 ++++++-- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/res/layouts/console.xml.lua b/res/layouts/console.xml.lua index f7e47d9bb..edb03d977 100644 --- a/res/layouts/console.xml.lua +++ b/res/layouts/console.xml.lua @@ -1,6 +1,6 @@ console_mode = "console" -history = session.get_entry("commands_history") +history = session.get("commands_history") history_pointer = #history events.on("core:open_traceback", function() diff --git a/res/layouts/pages/generators.xml.lua b/res/layouts/pages/generators.xml.lua index 64649cd52..157b7e9b9 100644 --- a/res/layouts/pages/generators.xml.lua +++ b/res/layouts/pages/generators.xml.lua @@ -1,4 +1,4 @@ -settings = session.get_entry('new_world') +settings = session.get('new_world') function on_open() local names = generation.get_generators() diff --git a/res/layouts/pages/new_world.xml.lua b/res/layouts/pages/new_world.xml.lua index ad95aad0d..7e3421ff8 100644 --- a/res/layouts/pages/new_world.xml.lua +++ b/res/layouts/pages/new_world.xml.lua @@ -1,4 +1,4 @@ -settings = session.get_entry('new_world') +settings = session.get('new_world') function world_name_validator(name) return name:match("^[%w-\\.\\ ]+$") ~= nil and not world.exists(name) @@ -20,7 +20,7 @@ function create_world() local name = document.name_box.text local seed = document.seed_box.text local generator = settings.generator - session.reset_entry('new_world') + session.reset('new_world') app.new_world(name, seed, generator) end diff --git a/res/modules/internal/session.lua b/res/modules/internal/session.lua index 39d5c74fc..466094332 100644 --- a/res/modules/internal/session.lua +++ b/res/modules/internal/session.lua @@ -1,7 +1,7 @@ local entries = {} local this = {} -function this.get_entry(name) +function this.get(name) local entry = entries[name] if entry == nil then entry = {} @@ -10,7 +10,11 @@ function this.get_entry(name) return entry end -function this.reset_entry(name) +function this.has(name) + return entries[name] ~= nil +end + +function this.reset(name) entries[name] = nil end From 7caa118fd6df7165b1f038f5b49c4fbaafc229e2 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 18 Mar 2026 22:08:42 +0300 Subject: [PATCH 4/6] add doc/ru/scripting/builtins/libsession.md --- doc/ru/scripting/builtins/libsession.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 doc/ru/scripting/builtins/libsession.md diff --git a/doc/ru/scripting/builtins/libsession.md b/doc/ru/scripting/builtins/libsession.md new file mode 100644 index 000000000..17bc218cd --- /dev/null +++ b/doc/ru/scripting/builtins/libsession.md @@ -0,0 +1,18 @@ +# Библиотека *session* + +Библиотека используется для хранения данных, не сбрасывающихся при загрузке/выгрузке контента, являясь рекомендованной альтернативой использованию таблицы `_G`. + +Хранимые данные не сохраняются при завершении работы движка. + +Для минимизации риска коллизий имён рекомендуется использовать префиксы паков (`id_пака:имя_таблицы`), либо, если пак хранит одну таблицу в *session*, использовать имя пака как имя записи. + +```lua +-- Возвращает таблицу по имени. Создаёт пустую таблицу при отсутствии. +session.get(name: str) -> table + +-- Удаляет таблицу по имени. +session.reset(name: str) + +-- Возвращает true если таблица уже была создана вызовом session.get +session.has(name: str) -> boolean +``` From b3352011607b10a5945f6c25f6dbc871a00c2db3 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 18 Mar 2026 22:10:53 +0300 Subject: [PATCH 5/6] add doc/en/scripting/builtins/libsession.md --- doc/en/scripting/builtins/libsession.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 doc/en/scripting/builtins/libsession.md diff --git a/doc/en/scripting/builtins/libsession.md b/doc/en/scripting/builtins/libsession.md new file mode 100644 index 000000000..bf2086096 --- /dev/null +++ b/doc/en/scripting/builtins/libsession.md @@ -0,0 +1,18 @@ +# *session* Library + +This library is used to store data that is not reset when loading/unloading content, and is a recommended alternative to using the `_G` table. + +The stored data is not saved when the engine terminates. + +To minimize the risk of name collisions, it is recommended to use pack prefixes (`pack_id:table_name`), or, if a pack stores a single table in *session*, use the pack name as the entry name. + +```lua +-- Returns a table by name. Creates an empty table if it does not exist. +session.get(name: str) -> table + +-- Deletes a table by name. +session.reset(name: str) + +-- Returns true if the table has already been created by calling session.get +session.has(name: str) -> boolean +``` From 030d36c5f2d8d486f35836be2c16533ca0c20632 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 18 Mar 2026 22:11:52 +0300 Subject: [PATCH 6/6] update doc/*/scripting.md --- doc/en/scripting.md | 1 + doc/ru/scripting.md | 1 + 2 files changed, 2 insertions(+) diff --git a/doc/en/scripting.md b/doc/en/scripting.md index 9b2a0297a..a21b959ed 100644 --- a/doc/en/scripting.md +++ b/doc/en/scripting.md @@ -37,6 +37,7 @@ Subsections: - [quat](scripting/builtins/libquat.md) - [random](scripting/builtins/librandom.md) - [rules](scripting/builtins/librules.md) + - [session](scripting/builtins/libsession.md) - [time](scripting/builtins/libtime.md) - [utf8](scripting/builtins/libutf8.md) - [vec2, vec3, vec4](scripting/builtins/libvecn.md) diff --git a/doc/ru/scripting.md b/doc/ru/scripting.md index 95a62007c..cd8a3b00a 100644 --- a/doc/ru/scripting.md +++ b/doc/ru/scripting.md @@ -37,6 +37,7 @@ - [quat](scripting/builtins/libquat.md) - [random](scripting/builtins/librandom.md) - [rules](scripting/builtins/librules.md) + - [session](scripting/builtins/libsession.md) - [time](scripting/builtins/libtime.md) - [utf8](scripting/builtins/libutf8.md) - [vec2, vec3, vec4](scripting/builtins/libvecn.md)