Первый Reflex-модуль
Reflex-модуль состоит из двух частей:
scripts/main.luaвыполняется на клиенте игрока;scripts/server.luaвыполняется в серверном контексте этого игрока.
Они имеют разные наборы API и обмениваются Lua-таблицами через Network.
1. Создайте проект
Заголовок раздела «1. Создайте проект»- Откройте меню модулей и нажмите Create.
- Назовите модуль
HelloReflex. - Включите Is Reflex.
- Подтвердите создание и выберите этот Reflex-модуль активным.
- Запустите пользовательскую игровую сессию.
В папке проекта должны находиться обе точки входа:
HelloReflex/├── module.json└── scripts/ ├── main.lua └── server.lua2. Добавьте клиентский код
Заголовок раздела «2. Добавьте клиентский код»Откройте scripts/main.lua:
Network:OnTableReceived(function(data) if data.kind == "server_tick" then print("Server tick: " .. tostring(data.tick)) endend)
Network:SendTable({ kind = "get_server_tick"})Клиент регистрирует обработчик ответа, а затем отправляет запрос серверной части того же модуля.
3. Добавьте серверный код
Заголовок раздела «3. Добавьте серверный код»Откройте scripts/server.lua:
Network:OnTableReceived(function(data) if data.kind == "get_server_tick" then Network:SendTable({ kind = "server_tick", tick = Time.Tick }) endend)Сервер проверяет тип сообщения и отправляет текущий тик обратно. После загрузки обеих частей в консоли клиента появится строка Server tick: ....
Если ответ не появился сразу после hot reload, сохраните main.lua ещё раз: клиентский запрос должен отправиться после готовности серверной части.
Контексты API
Заголовок раздела «Контексты API»Не переносите клиентский код в server.lua без проверки справочника.
| Возможность | main.lua |
server.lua |
|---|---|---|
ImGui, UI, Cameras |
✅ | ❌ |
Scheduler:OnFrame() |
✅ | ❌ |
Scheduler:OnTick() |
❌ | ✅ |
Network |
✅ | ✅ |
| Серверные методы игрового API | Ограничено | ✅ |
На страницах API клиентские и серверные методы отмечены отдельно.
Какие данные передаёт Network
Заголовок раздела «Какие данные передаёт Network»Можно передавать строки, числа, boolean и вложенные Lua-таблицы. Функции и объекты API, например Agent или Vector3, не сериализуются.
Передавайте составные значения как числа:
Network:SendTable({ position = { x = position.x, y = position.y, z = position.z }})Правила серверной логики
Заголовок раздела «Правила серверной логики»- проверяйте поле типа сообщения, например
kind; - проверяйте диапазон и смысл каждого значения от клиента;
- не считайте клиентские данные достоверными только потому, что они пришли через
Network; - не вызывайте клиентские API из
server.lua; - используйте
Scheduler:OnTick()для повторяющейся серверной работы.
Дальше изучите Network, Scheduler и страницы нужных игровых объектов.