Розыск (Wanted Level) — один из ключевых игровых механизмов в любом RP-сервере SAMP. Он отвечает за логику преследования игрока полицией, начисление «звёзд» и взаимодействие с фракцией LSPD/FBI/Army. Ниже приведён подробный алгоритм создания и настройки системы розыска: от готовых фильтров в панели администратора до самостоятельного скриптинга на Pawn.
Быстрый способ: включить стандартный Wanted через RCON или графическую панель
Если сервер использует SA-MP RP (например, Y-INI / MySQL + YSF), в большинстве сборок уже есть готовые команды.
- /setwanted [ID] [0-6] — установить уровень розыска сразу.
- /gotowanted [ID] — телепортироваться к игроку с розыском.
- /uncuff [ID] — снять наручники и автоматически снизить уровень до 0.
Для этого достаточно иметь RCON-админ 3+.
Важно: при вводе /setwanted 5 3 сервер отправит SendClientMessageToAll вида
Администратор установил игроку PlayerName 3 звезды розыска!.
Средний способ: настройка через файлы конфигурации
Редактируем server.cfg
Добавьте строки:
enable_zone_names 1 useplayerped_anims 1
Правим gamemodes/YourGM.pwn
Если нужно, чтобы при убийстве NPC или попадании в зону Ammu-Nation автоматически повышался розыск:
public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid, bodypart)
{
if(IsPlayerNPC(damagedid))
{
new wid = GetPlayerWantedLevel(playerid);
SetPlayerWantedLevel(playerid, wid + 1); // +1 звезда
}
return 1;
}
Сложный способ: полностью кастомная система розыска с MySQL
Создаём таблицу в базе данных
CREATE TABLE `players_wanted` ( `id` int(11) NOT NULL AUTO_INCREMENT, `player_uid` int(11) NOT NULL, `stars` tinyint(1) NOT NULL DEFAULT 0, `reason` varchar(128) DEFAULT NULL, `issue_time` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Функция повышения розыска (Pawn)
stock AddPlayerWanted(playerid, stars, reason[])
{ new query[256], uid = GetPlayerUserID(playerid);
format(query, sizeof(query),
"UPDATE `players_wanted` SET `stars`=%d, `reason`='%s', `issue_time`=NOW WHERE `player_uid`=%d",
stars, reason, uid);
mysql_tquery(connectionHandle, query);
SetPlayerWantedLevel(playerid, stars);
new str[128];
format(str, sizeof(str), "{FF0000}[WANTED] %s получил %d звёзд причина: %s", GetPlayerNameEx(playerid), stars, reason);
SendClientMessageToAll(COLOR_LIGHTRED, str);
return 1;
} Автоматическое снятие при смерти/аресте
public OnPlayerDeath(playerid, killerid, reason)
{ new wid = GetPlayerWantedLevel(playerid);
if(wid > 0)
{
AddPlayerWanted(playerid, 0, "Смерть/арест"); // обнуляем
}
}
Визуализация на карте (Blips & 3D-текст)
Для удобства полиции можно добавить красный маркер над игроком:
new blip[MAX_PLAYERS];
stock CreateWantedBlip(playerid)
{
if(!IsPlayerConnected(playerid)) return;
blip[playerid] = CreateBlipForPlayer(playerid, 0, 0, 0, 0, 2); // sprite 0 = red marker
SetBlipColor(blip[playerid], 0xFF0000FF);
}
stock DeleteWantedBlip(playerid)
{
if(blip[playerid] != INVALID_BLIP)
{
DestroyBlip(blip[playerid]);
blip[playerid] = INVALID_BLIP;
}
}
Полезные команды для теста
- /checkwanted [ID] — показать текущий уровень розыска.
- /wantedlist — список всех разыскиваемых.
- /payticket [сумма] — выплатить штраф и снять розыск (если 1-2 звезды).
Распространённые ошибки и их решения
| Ошибка | Причина | Решение |
|---|---|---|
| Звёзды не сбрасываются при /uncuff | Пропущен ResetPlayerWantedLevel | Добавить SetPlayerWantedLevel(playerid, 0); |
| Очень высокий пинг при массовом розыске | Частые SendClientMessageToAll | Использовать SendClientMessageToFaction (для LSPD/FBI) |
| Кастомные blips исчезают после респауна | Не вызывается CreateWantedBlip в OnPlayerSpawn | Добавить вызов функции в OnPlayerSpawn |
Создание качественной системы розыска — это баланс между геймдизайном, производительностью и удобством для игроков. Начните с простых команд и постепенно внедряйте кастомные механики: сессионные рекорды, награды за поимку, уровни опасности. Помните: хороший розыск делает RP-жизнь полиции и преступников интересной!