MAATRIX GAMES / Блог / SA-MP: популярные геймоды Cops and Robbers, RP

SA-MP: популярные геймоды Cops and Robbers, RP

MAATRIX GAMES

Поднял сервер SA-MP, скачал демо-гейммод grandlarc, погонял пять минут — и упёрся в очевидный вопрос: а что дальше, на чём реально строить проект с игроками? SA-MP жив уже больше пятнадцати лет в первую очередь на двух китах — аркадном Cops and Robbers, где всё решает погоня и перестрелка, и классическом RP с фракциями, бизнесами и медленной ролевой экономикой. Это не варианты одного и того же, а разные проекты с разными требованиями к скриптам, модерации и железу. Разберём оба по сути, где брать рабочие gamemode-скрипты и как подключить их через gamemode0.

Cops and Robbers: аркадный PVP без RP-заморочек

Cops and Robbers (CnR) — это про быстрый экшен, а не про отыгрыш роли. Игроки при заходе выбирают сторону — коп или грабитель, обычно через OnPlayerRequestClass (выбор класса ещё до спавна) или командой в чате вроде /cop и /robber. Задача копов — ловить и сажать грабителей, задача грабителей — набирать wanted-уровень, грабя банки, магазины или NPC, и уходить от погони до истечения таймера ареста.

Механика держится на нескольких простых, но завязанных друг на друга системах:

  • Wanted level — числовой уровень розыска, растёт от ограблений и стрельбы по копам, обычно через SetPlayerWantedLevel; чем выше уровень, тем агрессивнее реагируют NPC-полицейские (если они есть) и тем заметнее игрок для живых копов на карте.
  • Арест и тюрьма — при поимке грабителя (обычно через зону-триггер или команду /arrest у копа рядом) игрока телепортирует в тюремную зону через SetPlayerPos, а таймер освобождения считается через SetTimer с KillTimer при досрочном освобождении.
  • Точки ограблений — банки и магазины оформлены как CreatePickup или CreateDynamicObject (из плагина streamer) с зоной срабатывания через IsPlayerInRangeOfPoint; успешное ограбление начисляет деньги через GivePlayerMoney и поднимает wanted level.
  • Оружейные точки — оружие раскидано по карте как обычные AddPlayerClass-комплекты или отдельные пикапы, без сложной экономики закупок, характерной для RP.

Ключевое отличие CnR от RP-геймодов — здесь почти нет постоянного состояния между сессиями: деньги и wanted level обычно сбрасываются при выходе, никакой сложной SQL-экономики с домами и бизнесами не требуется. Это делает CnR заметно легче в разработке и в требованиях к серверу — часто хватает 1 ГБ RAM даже на несколько десятков слотов, как и для базового DM-режима.

Классический RP: фракции, бизнесы и медленная экономика

Классический SA-MP RP — прямой наследник линии геймодов вроде старых Los Santos RPG и десятков их форков, которые задали шаблон для всего жанра GTA-RP задолго до FiveM. Здесь игрок не просто стреляет — он выбирает фракцию (полиция, медслужба, банда, гражданский бизнес), зарабатывает деньги легальной или нелегальной работой и постепенно обрастает имуществом.

Стандартный набор механик классического RP-гейммода:

  • Фракции — обычно реализованы через enum-структуру команд и SetPlayerTeam, с иерархией рангов внутри фракции и правами доступа к оружейным складам, транспорту и командам.
  • Работы (jobs) — курьер, таксист, дальнобойщик, рыбак — цикл "доехать до точки — выполнить действие — получить деньги", завязан на таймеры и чекпоинты (SetPlayerCheckpoint).
  • Бизнесы и недвижимость — 24/7-магазины, автомастерские, дома с интерьерами через CreateDynamicObject и телепорты между экстерьером и интерьером; покупка обычно пишется в базу через MySQL-плагин.
  • Инвентарь и предметы — от простого списка ID-шек в базе до полноценных систем с весом и слотами, почти всегда завязаны на y_ini (сохранение в файлы) или SQL-таблицы.
  • Админ-система и анти-чит — команды /kick, /ban, /freeze, логирование действий; без этого RP-сервер с постоянной экономикой быстро скатывается в дюп-баги и читерство.

Ключевая техническая деталь: практически все живые RP-данные (деньги, дома, инвентарь, ранг во фракции) должны переживать gmx (рестарт гейммода) и падение сервера — то есть без нормально настроенной базы, чаще всего через MySQL-плагин R41 от BlueG (стандарт де-факто в сообществе SA-MP), полноценный RP-проект просто не соберётся. Для парсинга команд почти везде используют ZCMD или sscanf, для стриминга объектов и NPC на большой карте — плагин streamer от Incognito.

Поднять сервер SA-MP за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Где взять готовые gamemode-скрипты

Три источника, с которых реально стоит начинать:

  1. Форум sa-mp.com — несмотря на то, что официальная разработка ядра остановилась на версии 0.3.7, архивные разделы Scripting/Releases по-прежнему содержат готовые CnR- и RP-заготовки прошлых лет, часто с открытым исходным кодом на Pawn.
  2. GitHub — поиск по тегам samp gamemode, samp roleplay, samp cops-and-robbers выдаёт как крупные форки старых RP-фреймворков, так и учебные однофайловые CnR-заготовки, удобные для старта с нуля и разбора механики построчно.
  3. Community-Discord и Telegram-чаты SA-MP — там часто выкладывают актуальные версии инклюдов (sscanf.inc, streamer.inc, mysql.inc) и делятся рабочими сборками филтрскриптов (админка, анти-чит), которые не всегда попадают на форум.

Перед тем как ставить чужой гейммод в прод, прочитай код хотя бы по диагонали — это уже отмечалось в гайде по установке SA-MP: старые открытые скрипты нередко тащат SQL-инъекции через необработанный пользовательский ввод в командах вроде /give или /setmoney, это давняя болячка экосистемы. Особенно внимательно проверяй код, который напрямую собирает SQL-запрос строкой вместо параметризованных вызовов через MySQL-плагин.

Установка через gamemode0 в server.cfg

Независимо от того, CnR это или RP, подключение работает одинаково — через параметр gamemode0 в server.cfg. Кладёшь скомпилированный .amx-файл в папку gamemodes/ и прописываешь его имя без расширения:

gamemode0 cnr 1

или для RP-проекта:

gamemode0 myroleplay 999999

Второе число — счётчик повторов гейммода после завершения (через GameModeExit). Для CnR с частыми короткими раундами имеет смысл держать разумное число, чтобы гейммод периодически перезапускался и подчищал состояние; для постоянного RP-проекта без раундовой структуры почти всегда ставят большое значение вроде 999999, чтобы сервер не перезапускал гейммод сам по себе.

Компиляция — та же процедура, что и для любого Pawn-скрипта:

cd ~/sampserver/gamemodes
../pawno/pawncc myroleplay.pwn

Если компилятор ругается на неизвестные функции mysql_* или sscanf — не хватает нужных .inc-файлов в pawno/include/, их нужно скачать отдельно вместе с самим плагином (.so-файл плагина кладётся в папку plugins/, а строка подключения — в server.cfg):

plugins mysql.so sscanf.so streamer.so

Филтрскрипты с админкой или анти-читом для обоих типов гейммода подключаются отдельной строкой, независимо от gamemode0:

filterscripts admin anticheat

Важно, чтобы имя файла в gamemodes/ и значение в gamemode0 совпадали буквально — регистр и написание, иначе сервер молча откатится на дефолтный grandlarc без единой ошибки в консоли, и найти причину, почему не грузятся фракции или wanted level, будет непросто.

Тонкая настройка под свой проект

Голый скачанный гейммод почти никогда не подходит один в один — обычно приходится править константы и балансировку под свою аудиторию.

Для CnR чаще всего правят прямо в .pwn-исходнике:

  • время до автоматического снятия wanted level за отсутствие активности;
  • длительность отсидки в тюрьме (в секундах, через таймер);
  • список стартового оружия для каждой стороны и точки его респавна.

Для RP-проекта правки обычно масштабнее и завязаны на баланс экономики:

  • стартовый капитал новых игроков и зарплаты по работам;
  • лимиты фракций (max-значения по каждой команде, чтобы не было перекоса полиции против гражданских);
  • цены на дома, транспорт и бизнесы — их обычно выносят в отдельный массив в начале скрипта, чтобы не искать значения по всему файлу.

Общий совет для обоих типов гейммода: держи баланс-константы в одном месте файла (или в отдельном инклюде вроде config.inc), а не разбросанными по коду — правки после запуска сервера с живыми игроками куда болезненнее без такой структуры, особенно если правишь баланс не ты один.

Чем SA-MP RP отличается от современных RP на FiveM

Разница не только в графике San Andreas против GTA V — она в самом подходе к разработке. На SA-MP почти весь RP пишется вручную на Pawn с нуля или на базе старого форка: готовых фреймворков уровня современных ESX и QBCore, закрывающих экономику, инвентарь и работы "из коробки", в экосистеме SA-MP нет — каждый крупный RP-проект здесь во многом самописный.

На FiveM ситуация обратная: два зрелых фреймворка берут на себя большую часть базовой логики, подробно это разобрано в статье ESX и QBCore — сравнение фреймворков. Это резко снижает порог входа для новой команды, но и конкуренция среди FiveM RP-серверов в разы выше — выделиться голым фреймворком без доработок почти невозможно.

Требования к железу тоже разные: SA-MP-сервер, даже с полноценным RP-гейммодом и MySQL-экономикой, спокойно живёт на 2-4 ГБ RAM, тогда как аналогичный по функциональности FiveM-проект с ESX или QBCore обычно стартует от 4 ГБ и растёт с числом MLO-интерьеров и кастомных ресурсов. Если бюджет ограничен, а команда готова писать логику на Pawn самостоятельно, SA-MP всё ещё жизнеспособный выбор для нишевого RP-проекта — подробнее сравнение платформ разобрано в статье SA-MP, FiveM или RAGE:MP — что выбрать для RP-сервера.

Поднять сервер SA-MP за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

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

Можно ли совместить CnR и RP на одном сервере?

Технически — только через полную смену гейммода и рестарт процесса, "на лету" переключение не работает, а логика двух типов геймплея слишком разная, чтобы уживаться в одном скрипте без переделки половины кода.

Нужна ли база данных для Cops and Robbers?

Обычно нет — состояние (деньги, wanted level) чаще всего живёт только на время сессии и сбрасывается при выходе игрока, в отличие от RP, где сохранение критично.

Почему после gmx слетают фракции и деньги игроков в RP-гейммоде?

Значит, сохранение не подключено или подключено с ошибкой — RP-данные обязаны писаться во внешнее хранилище (MySQL-плагин или файлы через y_ini) при каждом значимом изменении, а не храниться только в памяти скрипта.

Сколько игроков реально тянет RP-гейммод на SA-MP?

Точных цифр без замера на конкретном скрипте не назову, но по опыту нагрузка растёт в первую очередь от количества SQL-запросов и таймеров, а не от самого числа онлайна — гейммод с аккуратной экономикой и кэшированием запросов держит 60-100 игроков заметно легче, чем неоптимизированный с теми же слотами.

Где искать готовую RP-карту под классический гейммод?

Те же источники, что и для скриптов — форум sa-mp.com и GitHub, ищи карты с префиксом rp_ или lv_/ls_, которые уже размечены под жилые зоны и точки бизнесов, а не голый ванильный мир игры.