Структура плагина
Все плагины находятся вaddons/lua/plugins/. Каждый плагин имеет собственную папку:
addons/lua
plugins
my_plugin
manifest.lua
init.lua
core
lib
manifest.lua— описывает плагин и его настройкиinit.lua— содержит основной код плагина
Файлы плагина
manifest.lua
manifest.lua загружается перед init.lua и определяет метаданные и настройки плагина.
plugin() в manifest.lua. Если этого не произошло, init.lua не будет загружен.
init.lua
init.lua загружается после manifest.lua и содержит основной код плагина.
cs-lua.
Системные директории
Помимоplugins/, в addons/lua/ находятся директории, которые используются самим cs-lua.
core/
core/
Содержит базовый Lua-код
cs-lua, который загружается до плагинов.Файлы из core/ определяют общие функции и API, доступные плагинам.lib/
lib/
Содержит общие Lua-модули, которые можно подключать через
require().В отличие от core/, файлы из lib/ не загружаются автоматически.plugins/
plugins/
Содержит установленные Lua-плагины. Каждый плагин располагается в отдельной папке.
Подключение модулей
Для подключения Lua-модулей используется стандартная функцияrequire().
Модули плагина ищутся сначала в его собственной папке, а затем в общей директории addons/lua/lib/.
Например, если структура плагина выглядит так:
init.lua модуль можно подключить:
lib/ подключаются таким же образом:
require, поэтому одинаковые локальные модули разных плагинов не конфликтуют между собой.
Окружение плагина
Каждый плагин запускается в собственном Lua-окружении. Это означает, что глобальные переменные и локальные модули одного плагина не влияют на другие плагины:cs-lua и стандартные возможности Lua доступны каждому плагину.
Такое разделение позволяет плагинам использовать одинаковые имена переменных и собственные модули без конфликтов.
Порядок загрузки
По умолчанию плагины загружаются в алфавитном порядке. Если порядок имеет значение, его можно задать вload_order.txt.
Файл находится в:
load_order.txt загружаются строго в указанном порядке. Все остальные загружаются после них в алфавитном порядке.
Пустые строки и комментарии, начинающиеся с #, игнорируются.
load_order.txt не обязан содержать все плагины. Указывайте только те, для которых порядок загрузки действительно важен.Взаимодействие между плагинами
Плагины изолированы друг от друга и не могут напрямую обращаться к глобальным переменным другого плагина. Для взаимодействия между плагинами используютсяexport(), import() и optional().
import() создаёт жёсткую зависимость от указанного плагина. Если плагин не найден, загрузка зависимого плагина завершится ошибкой.
Если зависимость необязательна, используйте optional():
Если взаимодействие между плагинами не является прямым вызовом функции, используйте систему событий через
hook.Дальше
Первый плагин
Создайте свой первый Lua-плагин и добавьте команду.
Справочник API
Все пространства имён: игроки, сущности, события, таймеры, команды и т.д.
Готовые плагины
Примеры и готовые решения, которые можно установить сразу.