SDK для скриптов · Luau
Создавайте свои режимы.
Статус: ранняя альфа. В пределах мажорной версии API скриптов только расширяется, так что написанные сегодня ресурсы продолжат работать. Следующими появятся свои модели, текстуры и звуки.
Ресурсы
Ресурс — это папка внутри папки сервера recursos/: манифест resource.toml и его скрипты. Серверные скрипты работают на сервере; клиентские отправляются каждому игроку и выполняются на его ПК. Каждый игровой режим, который идёт с сервером, — это просто ресурс: скопируйте, переименуйте и меняйте что угодно.
recursos/
hello/
resource.toml
server/main.luau
client/hud.luau -- optional: runs on each player's PCname = "hello"
version = "1.0.0"
description = "Says hello"
author = "You"
server_scripts = ["server/main.luau"]
client_scripts = [] # sent to each player and run on their PC
dependencies = [] # resources that must be running first
gamemode = false # true: this resource runs the rounds
autostart = trueВаш первый ресурс
Поприветствуйте игроков при входе и добавьте команду /dice. Запустите сервер — ресурс заработает; после правок введите restart hello в консоли сервера, и он мгновенно перезагрузится.
on("playerJoin", function(player: number)
players.message(player, "Hello, " .. (players.name(player) or "?") .. "!")
end)
registerCommand("dice", function(player: number)
chat.broadcast((players.name(player) or "?") .. " rolls " .. math.random(1, 6))
end)> resources # list what's running
> restart hello # reload after editing — no server restart
> players
> say Round starts in 1 minute
> ban 7 60 spamming # by player number, for 60 minutesЧто умеет API
Серверный API разбит на небольшие специализированные библиотеки. Игрок определяется номером — тем, что все видят рядом с его ником в списке игроков.
События
Входы, выходы, удары, нокауты, предметы, раунды, граффити, выбор в меню — и ваши собственные события между ресурсами.
Чат и команды
Цветной чат, /команды с аргументами, подсказки и сообщения отдельным игрокам.
Таймеры
setTimeout, setInterval и clearTimer для всего, что выполняется позже или повторяется.
Игроки
Ники, цвета и теги имён, админы, кики, временные баны и постоянные идентификаторы игроков.
Бойцы
Здоровье, команды, точки появления, телепорты, персонажи, заморозка, неуязвимость и возрождения.
Копы
Сделайте любого бойца полицейским, надевайте и снимайте наручники, раздавайте ключи от них.
Банды и приказы
Читайте и отдавайте шесть приказов банде, работайте с бандами игры и их участниками.
Предметы
Выдавайте, забирайте и бросайте оружие и предметы, получайте список лежащего на земле, настраивайте вес.
NPC
Расставляйте неподвижных персонажей с именем, значком и анимацией ожидания — продавцов, вербовщиков, тех, кто выдаёт задания.
Измерения
Запускайте несколько карт одновременно, перемещайте бойцов между ними и меняйте карты между матчами.
Маркеры и двери
Парящие маркеры, показывающие, где что-то происходит, и управление дверями каждой карты.
Объекты
Размещайте, двигайте и удаляйте объекты на карте из скриптов или во встроенном редакторе (до 5000 на сервер).
Граффити
Создавайте стены для граффити, блокируйте и сбрасывайте их и реагируйте на каждый законченный слой.
Раунды и режимы
Запускайте, завершайте и останавливайте раунды — или обходитесь без них в свободном режиме, deathmatch и ролевой игре.
Экранный интерфейс
Тексты, панели, полосы, изображения, крупные объявления, нумерованные меню и поля ввода.
Окна и клики
Кликабельные элементы, подписи, изображения предметов и свободный курсор для ваших собственных окон.
Значки и зоны
Значки и цветные зоны на карте каждого игрока.
Сохранённые данные
Хранилище «ключ — значение» для каждого ресурса, которое переживает перезапуск сервера.
Пароли и баны
Солёное и намеренно медленное хеширование паролей для серверных аккаунтов, баны по идентификатору и IP с необязательным сроком.
Клиентские скрипты
Клиентские скрипты — для того, что принадлежит каждому игроку: HUD, меню, горячие клавиши, локальные команды чата, камера и звуки. Каждый ресурс работает в своей изолированной среде на ПК игрока.
Они могут читать состояние боя, но никогда его не меняют — иначе каждый ПК видел бы своё, а читерство стало бы элементарным. Чтобы что-то изменить, клиентский скрипт просит сервер, и решение принимает сервер.
-- client/hud.luau
setInterval(function()
local me = fighters.get(localPlayer.fighter() or -1)
if me then
ui.text("hp", "Health " .. math.floor(me.health), { position = "bottom-right" })
end
end, 200)
on("keyDown", function(key)
if key == "F3" then
emitServer("askStats") -- handled on the server with onClient("askStats", ...)
end
end)Изоляция и ограничения
Нет доступа наружу
Скрипты не могут работать с файлами, сетью или операционной системой и не могут подменять функции API.
250 мс на запуск
Скрипт, который слишком долго работает за один раз, останавливается — бесконечный цикл не повесит сервер.
64 МБ на ресурс
У каждого ресурса свой лимит памяти.
Ошибки изолированы
Ошибки пишутся в журнал сервера с именем ресурса; ресурс продолжает работать.
Поддержка в редакторе: SDK включает определения типов для серверного и клиентского API. Подключите их к luau-lsp (откроется в новой вкладке) (например, через расширение Luau для VS Code), чтобы получить автодополнение и проверку типов.
Встроенные шаблоны
Эти ресурсы есть на каждом сервере. В них нет ничего особенного для игры — ваши собственные ресурсы могут то же самое и больше.
- welcome
- Приветствует игроков и считает их визиты с помощью сохранённых данных.
- basic-commands
- /players и периодическая подсказка в чате.
- player-hud
- Клиентские скрипты: HUD, F2 — скрыть, F3 — запросить у сервера вашу статистику.
- scoreboard
- Таблица нокаутов, номер раунда крупными буквами и меню /stats.
- fight-basics
- Объявляет нокауты и победителей раунда, плюс /heal и /where.
- deathmatch
- Режим без раундов: возрождения, лента нокаутов, побеждает первый, набравший 10.
- roleplay
- Аккаунты, персонажи, сохранённая позиция, больница и метро между районами.
- roleplay-chat
- Локальный чат, /me, /do, /shout, /ooc и другие.
- mapvote
- Голосование за следующую карту в конце каждого матча.
- mapping
- Объекты на карте и встроенный редактор их размещения.
- admin
- Инструменты администратора, например свободный полёт по карте.
Запуск сервера
Создайте сервер из меню игры для быстрых матчей или соберите пакет выделенного сервера с помощью CreateServer.bat в папке игры. Он спросит целевую систему (Windows или Linux) и карты и создаст папку с программой сервера, её данными, вашими ресурсами, файлом servidor.cfg и документацией SDK.
- Linux: Ubuntu 24.04+ или Debian 12+, 64 бита, с установленными библиотеками ALSA и udev.
- Порты: UDP 27015 для игры и UDP 27016 для поиска серверов (или настроенный вами порт и следующий за ним).
- Обновления: при запуске сервер сообщает о новой версии. Обновите игру, пересоберите пакет и замените программу и данные — настройки и ресурсы останутся.
- Личные данные: папка
data/в пакете создаётся из вашей собственной копии оригинальной игры. Никогда не публикуйте её.
Полный справочник
Полный справочник по API — каждая функция, событие и параметр — поставляется с каждым пакетом сервера в sdk/README.md вместе с определениями типов для редактора в sdk/types/. Он всегда соответствует вашей версии.