SL:MP, SA:MP и MTA: в чём разница

Три мультиплеера для одной игры с очень разным устройством: Pawn на сервере у SA:MP, Lua с двух сторон у MTA и Lua вообще везде у SL:MP.

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

У GTA: San Andreas нет встроенного сетевого режима, поэтому все мультиплееры для неё сделаны сообществом. Самые известные – SA:MP и MTA:SA. Третий участник сравнения – SL:MP, который мы с SEVEN писали в 2020–2021 годах. Он заметно меньше двух других, и сравнивать его с ними по масштабу бессмысленно. Зато по устройству разница очень наглядная.

Сравнительная таблица

SA:MP MTA:SA SL:MP
Клиент Мод на C/C++ Мод на C/C++ Lua-скрипты MoonLoader
Скрипты сервера Pawn Lua Lua (LuaJIT)
Скрипты клиента Нет штатных, только сторонние моды Lua, раздаются сервером Lua, часть клиента
Организация кода Игровой режим и filterscripts Ресурсы Игровой режим
Исходный код Клиент закрыт Открыт Открыт
Сеть UDP UDP UDP, протокол SL:NET
Статус Зрелый, массовый клиент 0.3.7 Зрелый, развивается сообществом Альфа 2020–2021, не развивается
Слоты Задаются в конфиге Задаются в конфиге maxSlots, в альфе до 10 рекомендовано

SA:MP

San Andreas Multiplayer – клиентский мод на C/C++ и отдельный сервер для Windows и Linux. Логика сервера пишется на Pawn: это компактный C-подобный язык, скрипты компилируются в байт-код и исполняются виртуальной машиной сервера. Основной скрипт называется игровым режимом (gamemode), дополнительные – filterscripts. Чего не хватает в Pawn, добавляют плагинами на C/C++.

Клиент требует GTA: San Andreas 1.0 US. Самая распространённая версия клиента – 0.3.7, на неё ориентировано большинство серверов. Своего скриптового движка на стороне клиента у SA:MP нет: всё, что игрок видит, сервер отдаёт через фиксированный набор функций. Поэтому вокруг SA:MP выросла огромная экосистема клиентских модов – CLEO, SAMPFUNCS, MoonLoader.

Сильная сторона – простота модели и огромная база готовых режимов. Слабая – Pawn: в нём нет нормальных строк и динамических структур данных, и большой проект на нём держится на дисциплине и макросах.

MTA:SA

Multi Theft Auto: San Andreas устроен иначе. Скрипты на Lua работают и на сервере, и на клиенте, а код организован в ресурсы: папка со скриптами, картами и файлами плюс описание в meta.xml. Клиентские скрипты и файлы сервер сам отправляет игроку при подключении, ставить что-то вручную не нужно.

Отсюда главное преимущество: на клиенте можно рисовать собственный интерфейс, обрабатывать ввод, создавать объекты и эффекты, и всё это поставляется вместе с сервером. Исходный код MTA открыт.

Платой за гибкость становится более сложная модель. Нужно понимать, какой код выполняется на сервере, какой на клиенте, и как между ними передавать события.

SL:MP

SL:MP начинался как эксперимент: можно ли синхронизировать игроков одним LuaSocket поверх SA:MP. Позже зависимость от SA:MP мы убрали, и клиент стал набором MoonLoader-скриптов для чистой GTA: SA 1.0 US. Сервер – тоже Lua, под LuaJIT на Windows или Linux. Сеть – собственный бинарный протокол SL:NET поверх UDP, позже вынесенный в библиотеку SNET.

В альфе 1.0.0-alpha.1 есть синхронизация пешком и в транспорте, диалоги, пикапы и виртуальные миры. Рекомендованный предел – около 10 игроков. Последняя сборка вышла 18 января 2021 года.

Ничего нативного в SL:MP нет. Весь стек от сетевого пакета до диалога на экране – Lua-код, который можно открыть и поменять. Для боевого сервера это слабое место: LuaJIT быстрый, но мультиплеер на C/C++ с годами отладки он не заменит. Для изучения же это главное достоинство. Как запустить свой сервер, описано в статье «Как запустить сервер SL:MP».

Кому что подходит

  • SA:MP – если нужен классический сервер с большим выбором готовых режимов и аудиторией, которая уже умеет в него играть.
  • MTA:SA – если важны клиентская логика, свой интерфейс и единый язык на обеих сторонах.
  • SL:MP – если интересно, как мультиплеер устроен внутри, или хочется поэкспериментировать с сетевым кодом на Lua без C/C++.

Совместимости между ними нет: у каждого свой клиент, свой протокол и свой формат скриптов. Код игровых режимов тоже придётся переписывать при переезде, даже между MTA и SL:MP, хотя оба на Lua.

Частые вопросы

Можно ли зайти на SA:MP-сервер через клиент MTA или наоборот?

Нет. У каждого мультиплеера свой клиент и свой сетевой протокол. SL:MP тоже несовместим ни с одним из них: подключиться к его серверу можно только через лаунчер и клиент SL:MP.

Чем код на Lua в MTA отличается от MoonLoader-скриптов?

MTA выполняет Lua внутри своего клиента и сервера и сама раздаёт клиентские скрипты игрокам. MoonLoader – отдельный загрузчик для одиночной игры и SA:MP, со своим API. Язык один, но функции и окружение разные, код напрямую не переносится.

Что выбрать для своего сервера?

Для ролевого проекта под существующую аудиторию обычно смотрят на SA:MP. Если нужна логика и интерфейс на стороне клиента без отдельных модов, удобнее MTA. SL:MP подходит для экспериментов и изучения того, как устроен мультиплеер изнутри.