MTA AMX - SA-MP скрипты на MTA:SA сервере


MN4s99d.png


MTA AMX - это слой совместимости, который позволяет запускать моды, фильтрскрипты и плагины для SA-MP 0.3.7 на серверах MTA:SA 1.6 и новее.
Этот проект можно представить как две составные части: MTA модуль на C/C++, который добавляет поддержку Pawn, и MTA ресурс на Lua, который реализует функции самп сервера.

<...>: Зачем это нужно?

  1. Ради развлечения, само собой. Запустить полностью самповский мод с самповскими плагинами на том, что себя всегда противопоставляло сампу - это, как минимум, забавно.
  2. Для проверки отказоустойчивости своих скриптов в необычных условиях. Поиск неопределённого поведения систем в новой среде, но при этом в очень лайтовых и не рутинных тестах, где просто играешь и постепенно исследуешь свой мод/скрипт/либу заново.
  3. Для большего погружения в текущие популярные GTA SA мультиплееры и поведение игры вне конкретного МП, при этом не вылезая за пределы павн скриптинга. Какие-то вещи, конечно, намеренно не различаются с сампом (и к этому приложены усилия), где важно обеспечить совместимость, но часть более мелких и не сильно влияющих штук ведёт себя всё ещё "по-мташному" (или не "по-самповски", если угодно).
  4. Вдохновиться функционалом, который даёт этот слой совместимости в качестве дополнительных функций, которых у нас нет из коробки (в основном это какие-то клиентские возможности и системы из оригинальной игры, к которым самп не давал доступа). Причём это не просто что-то на бумаге, а вот прямо рабочие павн нативки, которые подключаются дополнительным инклудом в мод и сразу же готовы к использованию (легко визуализировать в игре, как именно оно бы работало, будь такое в сампе).

<...>: Что реализовано?

Большинство нативных и автовызываемых функций сампа. Легче перечислить то, что остаётся не сделанным, чем то, что уже есть.
Если всё-таки какая-то функция, которая нужна в вашем павн скрипте, отсутствует и не реализована - скрипт запустится, но эта функция не даст никакого эффекта при её вызове.

Как уже было замечено, помимо павн скриптов здесь поддерживаются и самповские плагины. Конечно при условии, что они не хакают память. То есть CrashDetect, MySQL, Streamer и прочие всеми используемые вещи прекрасно встают и работают.

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

Просто ради информации также стоит упомянуть, что есть возможность вызывать функции из Lua скриптов и наоборот (для большей интеграции между AMX и другими MTA ресурсами). Подробнее об этом можно почитать в официальном README.md файле.

<...>: Чего здесь нет?

  • Статуса "Production Ready". Это точно НЕ то, что можно назвать законченным продуктом, достаточно протестированным, стабильным и готовым к серьёзному использованию любым сервером с онлайном (хотя вряд ли у кого-то возникнет идея поднимать на этом продакшен сервер).
  • Исчерпывающей документации по всем новым добавленным функциям, помимо стандартных самповских. Да, они полностью копируют мташные функции, которые задокументированы на их wiki, но оригинальная документация имеет свою терминологию и примеры с lua кодом. Хотя всё старается быть интуитивным: большинство новых функций понятны просто по своему названию, а возвращаемые значения там тоже в общем стиле обычных самп нативов.
  • Некоторых аналогичных сампу функций и систем, добавление которых не зависит от слоя совместимости, а может быть сделано только в самой MTA, когда-нибудь. Такие случаи помечены как "depends on blue" в списке известных проблем в разделе Issues, в официальном репозитории.

<...>: Что здесь есть ещё, помимо основного функционала сампа?

Много чего интересного! Вы когда-нибудь хотели поменять уровень воды или оживить светофоры? А может добавить полноценную прокачку игрока со всеми навыками из одиночной игры? Так вот, MTA позволяет всё это делать своим встроенным функционалом, а потому помимо основных самп нативов также доступно и множество новых функций, которые вы просто используете в своём павн скрипте, будто бы кто-то добавил их в самп.

Список всех новых функций и пабликов довольно большой, его лучше сразу смотреть в a_amx.inc, но самые интересные категории перечислены здесь:

  • Изменение игровой скорости, уровня воды и волн
  • Детальное управление погодой (изменение уровня дождя, тумана, облаков)
  • Установка лимита FPS игрокам со стороны сервера
  • Изменение сигналов стандартных светофоров
  • Изменение состояния дверей стандартных гаражей
  • Отключение гличей (багов) игры вроде +C, перезарядки при скролле и т.д.
  • Включение отображения названий зон, эффекта размытия при скорости
  • Изменение размера любых объектов, отключение "разбиваемости" у некоторых из них
  • Изменение непрозрачности для игроков, транспорта и прочего
  • Изменение одежды CJ'я, его мускулатуры и массы
  • Изменение всех остальных характеристик персонажа для любого скина
  • Изменение стиля походки, наличия головы, состояния горения и кашля от удушья
  • Изменение ID'ов оружия, из которых можно стрелять, летая на джетпаке
  • Изменение вариантов модели транспорта, если модель транспорта имеет их несколько
  • Изменение направления движения поезда, его скорости и отсоединямости от рельсов
  • Эмуляция нажатия игроком кнопок стандартного управления
  • Показ или скрытие курсора, чата, таблиста, игровой карты
  • Отслеживание кликов курсором по игрокам, транспорту и т.д.
  • Отслеживание нажатия любой клавиши
  • Боты, в качестве альтернативы NPC и актёрам
  • Нативные маркеры, как альтернатива чекпоинтам

<...>: Новые функции для игроков, транспорта и т.д. - круто!
Но зачем добавлять каких-то ботов, маркеры?


Некоторые элементы всё время существования в сампе имеют свои ограничения, к которым мы все давно привыкли и потому строим свои скрипты с учётом этих ограничений. Например, одна из данностей - количество отображаемых игроку чекпоинтов может быть всего одна штука и не более. За эти десятилетия у многих накопилось достаточно логики в их скриптах, которая подстроившись под этот нюанс не предполагает, что у чекпоинтов внезапно появятся ID'ы и их станет возможно создавать несколько одновременно.

Ещё один пример - это актёры. Они никогда не были чем-то большим, чем просто статичные болванчики: в машину не посадишь, оружие в руки не выдашь, объекты и что-то ещё не приаттачишь. В общем, аналога большинства функций, как для игроков, для них нет. С NPC они не конкурируют, их принято использовать в основном как часть статичного маппинга. Это их вполне четко очерченная ниша и под это также заточены существующие скрипты и системы у разработчиков модов.

Собственно поэтому отсутствие фундаментальных ограничений у некоторых MTA элементов, которые аналогичны самповским, побудило не пытаться докинуть кучу надстроек над самповской реализацией, а выделить отдельные новые типы элементов. Так вы можете использовать их с максимально полным функционалом, который доступен для них в MTA, если вам это действительно нужно:

1. Боты
Актёры на максималках или замена NPC, которые не занимают игровые слоты, с отдельным от игроков пулом ID'ов. Технически они ближе именно к актёрам, потому как не эмулируют поведение полноценного клиента. Тем не менее, для них доступно большинство аналогичных функций, которые есть в сампе для игроков, включая неймтеги над головой, взаимодействие с транспортом, оружием и т.д.

2. Нативные маркеры
Безлимитная* альтернатива чекпоинтам и гоночным чекпоинтам. Они также поддерживают больше типов: помимо цилиндра, гоночного и воздушного чекпоинта, можно создать желтую стрелку (маркер входа/выхода) и корону (светящуюся сферу).
* - лимиты на количество нативных маркеров на самом деле конечно есть, но вполне адекватные. 32 цилиндра/чекпоинта/стрелок и ещё 32 короны.

<...>: А чего точно не стоит ждать в будущем из того, что отсутствует сейчас?

  • В первую очередь NPC такими, какие они есть в сампе. Да, для кого-то мечта об "актёрах на максималках" (реализованных здесь ботами) сбывается и устраняет нужду в чём-то ином кроме них, но NPC всё-таки имеют ряд характерных фич: от записи и воспроизведения маршрутов со своей логикой в отдельных скриптах до реальной синхронизации с сервером не через других игроков.
  • Нативной реализации некоторых пабликов, которые вызываются напрямую от регулярной синхры игрока. Именно поэтому сейчас OnPlayerUpdate (под капотом этого проекта) сделан тупо как таймер на 100 миллисекунд и вызывается, если у игрока одно из нужных состояний. В MTA нет нужды нагружать сервер столь часто вызываемыми событиями, когда у них есть клиентский скриптинг, поэтому аналогов нашему OnPlayerUpdate, OnUnoccupiedVehicleUpdate или OnTrailerUpdate там нет.
  • Адаптации самповских мемхак плагинов, специфичных для самп сервера. Если ваш павн скрипт сильно завязан на использовании какого-то из этих мемхак плагинов, можете попробовать поискать альтернативы их функционалу в новых функциях, которые добавляет этот слой совместимости.

<...>: Стоп, но этот проект существует давно, разве нет?

До 2020 года он был в очень сыром состоянии. Далее были попытки его доработать, которые, судя по истории коммитов, продолжались до 2022 года. 1 апреля я решил по приколу затестить сие чудо, и после нескольких тестов словил мотивацию доработать его ещё более серьёзно. В данный момент он в СИЛЬНО лучшем состоянии, чем был когда-либо до этого. Можно сказать, что сейчас у этого всего второе дыхание.

<...>: Так стоит ли тратить на это время, если я не собираюсь никуда переходить?

Лично я воспринимаю этот проект как очень легкий доступ самп скриптеру к большой базе непривычных для нашего мультиплеера ситуаций, которые просто по кайфу тестить и открывать для себя саму игру немного с другой стороны (не с той, с которой открывает её самп все эти годы). Мне например было интересно вспомнить, что вообще-то газовые гранаты могут заставлять игроков кашлять и терять хп, или что транспорт с идом 590 это тоже валидный вагон поезда, который должен спавниться на рельсах и вести себя как поезд.

В общем, если вы тот разработчик, которому интересно изучать такие штуки и вы давно хотели попробовать что-то концептуально новое в знакомой среде своего мода - это точно стоит попробовать. Если же вы не заинтересованы в чём-либо, что напрямую не касается сампа, а своё время вы готовы тратить лишь на решение насущных практических задач, то как минимум приятно, что вы вообще дочитали до этого момента и ознакомились с MTA AMX хотя бы издалека.

Инструкцию по установке, настройке, интеграции с другими ресурсами, а также список изначальных авторов и всех, кто помогал в разработке этого проекта, можно посмотреть в его официальном репозитории.

И наконец, ссылка на официальный репозиторий, который здесь постоянно упоминается: https://github.com/multitheftauto/amx

Для быстрого сравнения пары скриншотов можете открыть каждый из них в новой вкладке (на одном из них SA-MP, на другом MTA).
Для более детального обзора можете посмотреть это видео (ссылка), в нём тестируется TDM мод GangWar.
 

Вложения

  • mta-screen_2025-07-01_15-53-10.jpg
    mta-screen_2025-07-01_15-53-10.jpg
    442.6 KB · Просмотры: 55
  • sa-mp-000.jpg
    sa-mp-000.jpg
    464 KB · Просмотры: 56
Последнее редактирование: