Структура модуля
Папочный модуль — обычная директория внутри Modules. Минимальный клиентский проект выглядит так:
MyModule/├── module.json└── scripts/ └── main.luaПосле создания через игру также появляются каталоги ресурсов и настройки редактора:
MyModule/├── module.json├── config.json # необязательно├── inputs.json # необязательно├── localization.csv # необязательно├── images/├── sounds/├── scripts/│ ├── main.lua│ └── server.lua # только для Reflex├── ui/ # добавляется при необходимости└── .vscode/Основные файлы
Заголовок раздела «Основные файлы»| Путь | Назначение |
|---|---|
module.json |
Обязательные метаданные и тип модуля. |
scripts/main.lua |
Точка входа клиентской части. |
scripts/server.lua |
Серверная часть Reflex-модуля. |
config.json |
Настройки, отображаемые пользователю. |
inputs.json |
Собственные действия и начальные привязки ввода. |
localization.csv |
Строки модуля на разных языках. |
Подробные форматы дополнительных файлов описаны на страницах Config, InputAction и Localization. Разделение main.lua и server.lua разобрано в архитектуре Reflex, а подключение дополнительных клиентских файлов — в организации Lua-кода.
module.json
Заголовок раздела «module.json»Пример метаданных обычного модуля:
{ "Id": "d70e52dc-2fa0-4b53-a040-a36c987b9adb", "Name": "MyModule", "Version": "0.1.0", "Author": "YourName", "Description": "My first KILLSCRIPT module", "IsReflex": false, "Tags": []}| Поле | Описание |
|---|---|
Id |
Уникальный идентификатор. Игра создаёт его автоматически. |
Name |
Отображаемое имя модуля. |
Version |
Версия модуля. |
Author |
Имя автора. |
Description |
Краткое описание или null. |
IsReflex |
true, если модулю нужна серверная часть. |
Tags |
Категории функциональности модуля. |
Не копируйте один и тот же Id в разные проекты. При создании нового модуля через игру идентификатор генерируется автоматически.
Теги помогают игре обнаружить модули, которые решают одну задачу. Совпадение тега показывает предупреждение о возможном конфликте, но не запрещает одновременный запуск.
| Тег | Назначение |
|---|---|
Minimap |
Миникарта |
PingMarks |
Метки и ping |
OverheadLabels |
Подписи над объектами |
Crosshair |
Прицел |
Health |
Здоровье |
Notifications |
Уведомления |
MatchStatus |
Состояние матча |
CombatReport |
Боевой отчёт |
Scoreboard |
Таблица счёта |
Loadout |
Экипировка |
BuyMenu |
Меню покупки |
GrenadePreview |
Предпросмотр гранат |
Chat |
Чат |
ThreatIndicator |
Индикаторы угроз |
KillFeed |
Лента убийств |
Spectator |
Режим наблюдателя |
DebugInfo |
Отладочная информация |
Ресурсы
Заголовок раздела «Ресурсы»| Каталог | Поддерживаемые файлы |
|---|---|
images/ |
.png, .jpg, .jpeg |
sounds/ |
.wav, .mp3, .ogg |
scripts/ |
.lua |
ui/ |
.uxml, .uss |
Специальные изображения:
images/Icon.png— иконка модуля;images/DescriptionImage.png— изображение в подробном описании.
Имена и регистр файлов лучше сохранять точно такими, как указано. Правила путей к изображениям разобраны на странице Texture.
Ограничения размера
Заголовок раздела «Ограничения размера»- один файл ресурса — не больше
10 MiB; - весь модуль — не больше
50 MiB; config.json— не больше64 KiB.
У отдельных API могут быть дополнительные ограничения. Например, загрузчик текстур проверяет формат и размеры изображения.
Lua-среда
Заголовок раздела «Lua-среда»Код работает в ограниченной Lua-среде, а не в полном системном Lua. Доступны игровые глобальные объекты и небольшой набор стандартных возможностей:
- функции
print,tostring,tonumber,pairs,ipairs,setmetatable; - клиентский
requireдля дополнительных файлов изscripts/; - таблицы
string,math,table,coroutine.
Не рассчитывайте на остальные стандартные глобальные функции без проверки. В частности, pcall и type недоступны. Доступность игрового API также зависит от клиентского или Reflex server-контекста.