🚀Сервисы
Информация
Сервисы — это особый тип системных объектов в bLua, предоставляющих доступ к внутренним возможностям движка.
Каждый сервис является уникальным экземпляром, который нужно запросить у системного ядра с помощью метода system:GetService()
Получение сервиса
Для работы с сервисами используется системный метод:
local service = system:GetService("ServiceName")После этого переменная service хранит ссылку на уникальный объект, который можно использовать для вызова его методов.
⚠️ Каждый сервис существует в единственном экземпляре. Получение сервиса не создаёт новый объект - возвращается общий доступ к уже существующему.
Пример использования
Пример обращения к сервису VariableManager:
local vm = system:GetService("VariableManager")
local result = vm:save("key", "value")system:GetService("VariableManager")— получает сервис управления переменными.:save("key", "value")— вызывает методsave, передаваяself(сервисный контекст).
Принцип "уникального доступа"
bLua не допускает "мгновенных" вызовов сервисов без сохранения ссылки:
Это предотвращает создание временных ссылок, которые не контролируются системой. Перед использованием всегда сохраняйте сервис в переменную:
Правила синтаксиса
Методы сервисов вызываются только через двоеточие (
:)Вызов через точку (
.) запрещён:Ссылку на сервис нужно обязательно сохранить в переменную:
- вызов методов непосредственно у результата
GetServiceнедопустим.Результат вызова метода сервиса должен присваиваться — вызов как выражение без присваивания считается синтаксической ошибкой в bLua. То есть:
Это правило распространяется на все методы сервисов: вызов должен быть в контексте присваивания (или использоваться там, где результат явно нужен — например, в выражении присвоения/условии).
Нельзя перезаписывать переменную-ссылку на сервис другим типом:
Почему вызов должен быть сохранён в переменной?
bLua намеренно запрещает «мгновенные» вызовы ради безопасности и явного управления результатами: язык требует, чтобы разработчик явно обработал и/или сохранил результат (
local result = ...), а не проигнорировал возможную ошибку или данные.Передача
selfчерез:требует, чтобы инструкция имела корректный операнд-объект; явное сохранение ссылки уменьшает шанс ошибок и делает код читабельнее.Запрет вызовов в стиле
system:GetService(...):method()и вызовов без присваивания упрощает анализ кода и статическую проверку (lint).
Сервисы
VariableManager
Добавляет расширинное взаимодействие с переменными.
Максимальное количество сохраненных переменных - 48 штук.
Сохраняет переменную на сервер вышки.
Если duration не указан, значение сохранится навсегда. Указывать в виде 1s или 124m. Несколько букв запрещено: 1m30s не будет работать
Возвращает true при успешном сохранении.
Загружает переменную из памяти сервера вышки.
Возвращает сохраненное значение или nil.
Загружает все сохраненные переменные из памяти сервера вышки в виде таблицы.
Принудительно удаляет значение с сервера вышки.
Возвращает true, если операция прошла успешно.
Last updated