Как запустить сервер SL:MP

Пошагово: что нужно для сервера SL:MP на LuaJIT, как заполнить server.cfg, какой порт открыть и как зайти на свой сервер через лаунчер.

Автор: Опубликовано: Обновлено: 3 мин чтения

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

Дальше два частых случая:

  1. Сервер дома за роутером. Нужно пробросить UDP 7777 на локальный IP компьютера (раздел Port Forwarding или «Виртуальные серверы» в настройках роутера). Если провайдер выдаёт серый IP за CGNAT, проброс не поможет – выручит VPS или VPN с белым адресом.
  2. Сервер на 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 нужны только игрокам на клиенте.