Команда /z (Служитель закона)

Добро пожаловать!

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

Зарегистрироваться!
  • Если Вы желаете помогать развитию проекта, готовы заполнять раздел(-ы) и подсказывать другим пользователям на портале, есть возможность попасть в команду редакторов. Для этого следует обратиться в техническую поддержку
Пользователь
Регистрация
21 Мар 2022
Сообщения
12
Всем здарова! Давненько хотел выпустить маленький туториал по данной команде, сама команда была взята с другого мода, так как, нигде ее не видел на других форумах. Может кому-то она все таки пригодится :)

Переменные

C++:
new Text:td_Pursuit[2];
C++:
    pPursuitTimer,
    pPursuitOfficer,

Сама команда
C++:
CMD:z(playerid, params[])

{
    if(!IsACop(playerid)) return  SCM(playerid, COLOR_RED, !"Вы не полицейский!"); //Здесь ваша проверка, на полицейского
    if(GetPlayerState(playerid)!=2) return SCM(playerid, COLOR_RED, !"Вы должны находится за рулем!"); //Здесь проверка на патрульный автомобиль полиции
    new giveplayerid;
    if(sscanf(params, "u", giveplayerid)) return SendClientMessage(playerid, COLOR_GREY, "Используйте: /z [id]");
    if(giveplayerid == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_GREY, "Ошибка: Указанный игрок не найден в сети.");
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    if(!IsPlayerInRangeOfPoint(giveplayerid, 100.0, x, y, z)) return SendClientMessage(playerid, COLOR_GREY, "Ошибка: Указанный игрок не найден в сети.");
    if(PlayerInfo[giveplayerid][pWanted] <= 0) return SendClientMessage(playerid, COLOR_GREY, "Ошибка: Указанный игрок не в розыске.");
    if(PlayerInfo[giveplayerid][pPursuitOfficer] != INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_GREY, "Ошибка: За указанным игроком уже идёт преследование.");
    ShowPursuitTD(giveplayerid);
    PlayerInfo[giveplayerid][pPursuitTimer] = SetTimerEx("@___CrimePursuit", 1000, true, "i", giveplayerid);
    PlayerInfo[giveplayerid][pPursuitOfficer] = playerid;
    format(stringer, sizeof(stringer), "Вы начали преследовать %s если он отдалится более чем на 100 метров, то преследование будет закончено",
    PlayerInfo[giveplayerid][pNames], giveplayerid);
    SendClientMessage(playerid, COLOR_GREEN, stringer);
    ShowPlayerDialog(giveplayerid, 0000, DIALOG_STYLE_MSGBOX,
        "THE PURSUIT",
        "{FFFFFF}\n\
            Представители власти начали за вами преследование,\n\
            Если вы выйдите игры, тогда вы автоматический будете посажены в тюрьму!\n\
            \n\
            Если вы отдалитесь от полиции более чем на 100 метров, то режим погони будет аннулирован.\n\
            Избегайте полицию и уезжайте как можно дальше.\n\
            \n\
            Когда табличка {ff0000}THE PURSUIT {ffffff}исчезнит, тогда можете быть спокойны,\n\
            это значит, что преследование закончено и вы смогли уехать далеко.\
        ", "Закрыть", "");
    return 1;
}

OnPlayerDisconnect
C++:
PlayerInfo[playerid][pPursuitTimer] > 1)
{
    PlayerInfo[playerid][pJailTime] += (PI[playerid][pWanted] + 1) * 600;
    PlayerInfo[playerid][pWanted] = 0;
}

OnPlayerConnect

C++:
PlayerInfo[playerid][pPursuitTimer] = -1;
PlayerInfo[playerid][pPursuitOfficer] = INVALID_PLAYER_ID;

Ко всем стокам

C++:
@___CrimePursuit(playerid);
@___CrimePursuit(playerid)
{
    if(!IsPlayerConnected(playerid))
    {
        StopCrimePursuit(playerid);
        return;
    }
    new officer = PlayerInfo[playerid][pPursuitOfficer];
    if(!IsPlayerConnected(officer))
    {
        StopCrimePursuit(playerid);
        return;
    }

    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    if(!IsPlayerInRangeOfPoint(officer, 100.0, x, y, z))
    {
        StopCrimePursuit(playerid);
        return;
    }
}

C++:
stock StopCrimePursuit(playerid)
{
    if(PlayerInfo[playerid][pPursuitTimer] != -1)
    {
        HidePursuitTD(playerid);
        KillTimer(PlayerInfo[playerid][pPursuitTimer]);
        PlayerInfo[playerid][pPursuitTimer] = -1;
        PlayerInfo[playerid][pPursuitOfficer] = INVALID_PLAYER_ID;
    }
}

C++:
stock ShowPursuitTD(playerid)
{
    for(new i; i < sizeof(td_Pursuit); i++)
        TextDrawShowForPlayer(playerid, td_Pursuit[i]);
}

stock HidePursuitTD(playerid)
{
    for(new i; i < sizeof(td_Pursuit); i++)
        TextDrawHideForPlayer(playerid, td_Pursuit[i]);
}

Текстдрав

C++:
    td_Pursuit[0] = TextDrawCreate(140.033447, 326.433319, "");
    TextDrawTextSize(td_Pursuit[0], 94.000000, 97.000000);
    TextDrawAlignment(td_Pursuit[0], 1);
    TextDrawColor(td_Pursuit[0], -1);
    TextDrawBackgroundColor(td_Pursuit[0], 0);
    TextDrawFont(td_Pursuit[0], 5);
    TextDrawSetProportional(td_Pursuit[0], 0);
    TextDrawSetPreviewModel(td_Pursuit[0], 596);
    TextDrawSetPreviewRot(td_Pursuit[0], 0.000000, 0.000000, 0.000000, 1.000000);
    TextDrawSetPreviewVehCol(td_Pursuit[0], 0, 1);

    td_Pursuit[1] = TextDrawCreate(148.399963, 380.900024, "THE_Pursuit!_]");
    TextDrawLetterSize(td_Pursuit[1], 0.272000, 1.371852);
    TextDrawAlignment(td_Pursuit[1], 1);
    TextDrawColor(td_Pursuit[1], -46057985);
    TextDrawSetShadow(td_Pursuit[1], 0);
    TextDrawSetOutline(td_Pursuit[1], 1);
    TextDrawBackgroundColor(td_Pursuit[1], 370546431);
    TextDrawFont(td_Pursuit[1], 2);
    TextDrawSetProportional(td_Pursuit[1], 1);

Код:
PlayerInfo - информация у игроков, меняйте так, как у вас в моде. (Arizona - PI)
stinger - глобальная переменная - тоже меняйте на свое
 
Последнее редактирование:
Пользователь
Регистрация
22 Май 2022
Сообщения
11
Измененная копия Аризоны:)
 
Пользователь
Регистрация
19 Окт 2022
Сообщения
16
Я вообще нигде не видел эту команду на бонусниках Аризоны, спасибо.
 
Пользователь
Регистрация
30 Июл 2023
Сообщения
3
Команда действительно редкая! Молодец что написал сюда, может кому-то пригодится
 
Сверху