SA-MP: популярные геймоды Cops and Robbers, RP
Поднял сервер 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-скрипты
Три источника, с которых реально стоит начинать:
- Форум sa-mp.com — несмотря на то, что официальная разработка ядра остановилась на версии 0.3.7, архивные разделы Scripting/Releases по-прежнему содержат готовые CnR- и RP-заготовки прошлых лет, часто с открытым исходным кодом на Pawn.
- GitHub — поиск по тегам
samp gamemode,samp roleplay,samp cops-and-robbersвыдаёт как крупные форки старых RP-фреймворков, так и учебные однофайловые CnR-заготовки, удобные для старта с нуля и разбора механики построчно. - 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_, которые уже размечены под жилые зоны и точки бизнесов, а не голый ванильный мир игры.