Как запустить сервер SL:MP
Пошагово: что нужно для сервера SL:MP на LuaJIT, как заполнить server.cfg, какой порт открыть и как зайти на свой сервер через лаунчер.
SL:MP – мультиплеер для GTA: San Andreas, который мы с SEVEN писали на Lua в 2020–2021 годах. Последняя сборка – 1.0.0-alpha.1 от 18 января 2021 года, дальше проект не развивался. Это альфа: многое работает, но рассчитывать на стабильность уровня SA:MP не стоит. Поднять сервер для себя и пары друзей при этом несложно.
Что понадобится
Клиент и сервер – две разные вещи с разными требованиями.
| Сторона | Что нужно |
|---|---|
| Клиент (игрок) | Чистая GTA: San Andreas 1.0 US, ASI Loader и MoonLoader, клиент SL:MP |
| Сервер | LuaJIT на Windows или Linux, сборка сервера SL:MP |
| Сеть | Открытый UDP-порт (по умолчанию 7777) |
SA:MP для клиента не нужен. Первые прототипы работали поверх него, но зависимость мы убрали ещё в 2020 году. Версия игры важна: MoonLoader и сам клиент рассчитаны на 1.0 US, на других версиях адреса в памяти не совпадут.
Сборки клиента и сервера (для Windows и Linux) выкладывались в теме проекта на BLAST.HK.
Настройка server.cfg
Все параметры сервера лежат в server.cfg:
serverName = My SL:MP Server
version = 1.0.0
gamemode = freeroam
maxSlots = 10
stream = 200
address = 0.0.0.0
port = 7777
Что значит каждое поле:
serverName– название, которое игроки увидят в лаунчере;version– строка версии сервера;gamemode– игровой режим, который сервер загрузит при старте;maxSlots– максимум игроков; в альфе рекомендую не больше 10;stream– размер зоны стрима: игроки дальше этой границы не синхронизируются, что экономит трафик;address– адрес, на котором сервер слушает;0.0.0.0значит «на всех сетевых интерфейсах»;port– UDP-порт, по умолчанию 7777, как у SA:MP.
Значения serverName, gamemode и stream в примере условные, подставьте свои. Если на той же машине уже работает SA:MP-сервер на 7777, одному из них придётся сменить порт.
Зону стрима не стоит раздувать. Чем она больше, тем больше игроков попадает в синхронизацию каждого клиента и тем больше пакетов уходит по сети.
Открываем UDP-порт
SL:MP общается по UDP через собственный протокол SL:NET. Если порт закрыт, сервер запустится, вы даже сможете зайти на него с этой же машины, а все остальные будут видеть пустоту.
На Windows входящее правило добавляется через «Брандмауэр Защитника Windows» → «Дополнительные параметры» → «Правила для входящих подключений», либо одной командой из консоли администратора:
netsh advfirewall firewall add rule name="SL:MP" dir=in action=allow protocol=UDP localport=7777
На Linux с ufw:
sudo ufw allow 7777/udp
Дальше два частых случая:
- Сервер дома за роутером. Нужно пробросить UDP 7777 на локальный IP компьютера (раздел Port Forwarding или «Виртуальные серверы» в настройках роутера). Если провайдер выдаёт серый IP за CGNAT, проброс не поможет – выручит VPS или VPN с белым адресом.
- Сервер на VPS. Кроме системного файрвола, у многих хостеров есть свой сетевой фильтр в панели управления. Порт открывают и там.
Самая частая ошибка – открыть TCP вместо UDP.
Запуск и подключение
Сервер стартует под LuaJIT из папки, где лежат его файлы и server.cfg. На Linux удобно держать его в screen или tmux, чтобы процесс не умирал при закрытии SSH-сессии. Перед тем как звать людей, проверьте вывод консоли и зайдите на сервер сами.
Игроки подключаются через лаунчер SL:MP. Он написан на Java с интерфейсом на ImGui и отвечает за список серверов и подключение. Для внешних игроков сервер должен быть доступен по вашему публичному IP (или домену) и порту из конфига.
Если сами вы заходите, а друзья нет, проблема почти наверняка в сети: порт, проброс, фильтр хостера.
Чего ждать от альфы
В 1.0.0-alpha.1 есть синхронизация пешком и в транспорте (водитель и пассажиры), диалоги трёх типов, пикапы и виртуальные миры. Этого хватает, чтобы собрать небольшой фрирум или поэкспериментировать с собственным режимом на Lua. Для публичного сервера с десятками игроков проект не готов, и обновлений уже не будет. Если интересна сама сетевая часть, она живёт отдельно в библиотеке SNET, а о том, как всё начиналось с LuaSocket, я написал в статье «UDP в Lua».
Частые вопросы
Можно ли поставить maxSlots больше 10?
Технически значение задаётся любое, но в альфа-версии мы рекомендовали не больше 10 игроков: синхронизацию проверяли примерно на десятке человек рядом друг с другом. Больше – на свой страх и риск.
Друзья не могут подключиться, хотя я захожу на сервер сам. Что проверить?
Скорее всего, закрыт порт. Нужно разрешить входящий UDP на порт из server.cfg (по умолчанию 7777) в файрволе системы и пробросить его на роутере. Правило для TCP не поможет: SL:MP работает только по UDP.
Нужен ли на сервере установленный GTA: San Andreas?
Нет. Сервер – это Lua-код под LuaJIT, игра ему не нужна. GTA: SA 1.0 US с MoonLoader нужны только игрокам на клиенте.