Выдача розыска (wanted level) в SA-MP – один из ключевых элементов полицейской ролевой игры․
Правильно настроенный скрипт выдачи розыска позволяет офицерам легко «вешать» уровень преследования игроку,
а самому игроку – видеть свою «звёздность» и её последствия (появление нарядов полиции, вертолётов, ФБР и т․д․)․
Ниже – подробная инструкция, примеры команд и готовый код, который можно вставить в ваш gamemode или filterscript․
Что такое «розыск» в SA-MP
- Wanted Level – число от 0 до 6, где 0 = чист, 6 = максимальный федеральный розыск․
- Игрок с уровнем розыска ≥ 1 будет виден на радаре полицейским, а система спавна начнёт вызывать патрули, вертолёты, дорожные блок-посты и т․д․
- Данные хранятся в
PlayerInfo[playerid][pWantedLevel](или аналогичном массиве вашего мода)․
Минимальная структура данных
Создайте (или убедитесь, что уже создана) такая перечисляемая структура:
enum pInfo
{
pWantedLevel
// ․․․ другие переменные
}
new PlayerInfo[MAX_PLAYERS][pInfo]; Готовый скрипт команды /setwanted
Файл commands․pwn (или любой ваш)
// Команда: /setwanted [playerid/PartOfName] [0-6]
CMD:setwanted(playerid, params[])
{
new targetid, level;
new str[128], name[MAX_PLAYER_NAME], targetname[MAX_PLAYER_NAME];
if(sscanf(params, "ud", targetid, level)) return SendUsageError(playerid, "/setwanted [id/часть ника] [0-6]");
if(level < 0 || level > 6) return SendError(playerid, "Уровень 0-6!");
if(!IsPlayerConnected(targetid)) return SendError(playerid, "Игрок не в сети․");
GetPlayerName(targetid, targetname, sizeof(targetname));
GetPlayerName(playerid, name, sizeof(name));
PlayerInfo[targetid][pWantedLevel] = level;
SetPlayerWantedLevel(targetid, level); // встроенная функция GTA
format(str, sizeof(str), "{33CCFF}[POLICE]{FFFFFF} %s выдал %s %d уровень розыска․", name, targetname, level);
SendClientMessageToAll(-1, str);
return 1;
} Строка в server․cfg
Не забудьте внести команду в вашу систему обработки:
RegisterCommand("setwanted", "CMD:setwanted", 2); // 2 = RCON или уровень офицера Повышение реалистичности – вариации нарядов
Чтобы полицейские машины и пешие NPC спавнились более реалистично,
можно изменить dispatch․meta (в клиентской части мода)․
Пример настройки из мода Better Wanted Level System Police Spawning:
- Добавлено 20% шанса появления женщины-офицера (по статистике LAPD)․
- Для каждой «звезды» расширен пул техники:
- 1★ – 1 патрульный автомобиль;
- 2★ – 2 машины + пешие офицеры;
- 3★ – вертолёт Police Maverick;
- 4★ – SWAT-Van и спецназ;
- 5★ – ФБР и RoadBlocks;
- 6★ – армия и Rhino․
Снижение розыска
Чтобы игрок мог «смыть» уровень, используйте команду /clearwanted:
CMD:clearwanted(playerid, params[])
{
new targetid;
if(sscanf(params, "u", targetid)) return SendUsageError(playerid, "/clearwanted [id/часть ника]");
PlayerInfo[targetid][pWantedLevel] = 0;
SetPlayerWantedLevel(targetid, 0);
SendClientMessage(targetid, -1, "{33AA33}Ваш розыск снят․");
SendClientMessage(playerid, -1, "{FFFF00}Вы сняли розыск․");
return 1;
} Дополнительные фичи
- Автоматическое повышение – если игрок убивает офицеров, кричит ограбление и т․д․
- Таймер снижения – каждые 60 секунд уровень падает на 1 при отсутствии правонарушений․
- Отображение HUD – отправлять клиенту
GameTextForPlayerс текущим уровнем․ - Логирование – писать в файл
wanted․logкто и кому выдал розыск․
Пример лог-функции
stock LogWanted(issuerid, targetid, newlevel)
{
new File:wantedlog = fopen("logs/wanted․log", io_append);
if(wantedlog)
{
new str[256], date[32];
getdate(date[0], date[1], date[2]); // день, месяц, год
format(str, sizeof(str), "[%02d/%02d/%d] %s выдал %s розыск %d",
date[0], date[1], date[2], GetPlayerNameEx(issuerid), GetPlayerNameEx(targetid), newlevel);
fwrite(wantedlog, str);
fclose(wantedlog);
}
} Правильно реализованный самп скрипт выдачи розыска – это не просто пара команд,
а важная система, влияющая на геймплей всего сервера․
Используйте предложенные фрагменты кода, доработайте под свои нужды и ваши игроки почувствуют настоящий дух GTA:SA в многопользовательской среде․