Join the forum, it's quick and easy

Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Анти превышение заданной скорости

Перейти вниз

Анти превышение заданной скорости Empty Анти превышение заданной скорости

Сообщение  Ulkiorra Сб Авг 11, 2012 12:57 am

Преступим.

Код:
#define MAX_SPEED 100// Максимально допустимая скорсть (ещё можно создать переменной для изменения в процессе игры)


new Warnings[MAX_PLAYERS];//Глобальная переменная, отвечающая за предупреждения


Если у вас есть повторяющейся таймер на 1 секунду, то следующий код надо вставить туда, если нет то в паблик OnGameModeInit()
Код:

SetTimer("UpdatePlayersSpeed",1000,true);//Создадим таймер на 1 секунду, работающий с повторением


Тут я тоже придумал 2 варианта.
Содержание паблика:
1 Вариант.

Код:
forward UpdatePlayersSpeed();
public UpdatePlayersSpeed()
{
    new Float:X,Float:Y,Float:Z,str[128];
    for(new i; i < GetMaxPlayers(); i++)
    {
        if(!IsPlayerConnected(i)) continue;
        if(IsPlayerInAnyVehicle(i) && GetVehicleSpeed(i) > MAX_SPEED)
        {
            if(Warnings[i] > 3)
            {
                RemovePlayerFromVehicle(i);
                Warnings[i] = 0;
                SendClientMessage(i,0xF60000AA,"Вы набрали больше {FFFFFF}трех {F60000}предупреждений! Будеть добры покинуть машину!");
            }
            else
            {
                Warnings[i]++;
                format(str,sizeof(str),"Превышение скорости зафиксировано ({FFFFFF}%.1f km/h{F60000}). Ваша скорость сброшана!",GetVehicleSpeed(i));
                SendClientMessage(i,0xF60000AA,str);
                format(str,sizeof(str),"~r~Warning ~w~%d",Warnings[i]);
                GameTextForPlayer(i,str,1500,1);
                GetPlayerPos(i,X,Y,Z);
                SetVehiclePos(GetPlayerVehicleID(i),X,Y,Z);
            }
        }
    }
    return 1;
}

2 Вариант.

Код:
forward UpdatePlayersSpeed();
public UpdatePlayersSpeed()
{
    new Float:X,Float:Y,Float:Z,str[128];
    for(new i; i < GetMaxPlayers(); i++)
    {
        if(!IsPlayerConnected(i)) continue;
        if(IsPlayerInAnyVehicle(i) && GetVehicleSpeed(i) > MAX_SPEED)
        {
            if(Warnings[i] > 3)
            {
                RemovePlayerFromVehicle(i);
                Warnings[i] = 0;
                SendClientMessage(i,0xF60000AA,"Вы набрали больше {FFFFFF}трех {F60000}предупреждений! Будеть добры покинуть машину!");
            }
            else
            {
                Warnings[i]++;
                format(str,sizeof(str),"Превышение скорости зафиксировано ({FFFFFF}%.1f km/h{F60000}). Ваша скорость сброшана!",GetVehicleSpeed(i));
                SendClientMessage(i,0xF60000AA,str);
                format(str,sizeof(str),"~r~Warning ~w~%d",Warnings[i]);
                GameTextForPlayer(i,str,1500,1);
                GetVehicleVelocity(GetPlayerVehicleID(i),X,Y,Z);
                SetVehicleVelocity(GetPlayerVehicleID(i),X*0.1,Y*0.1,Z);//Снижаем скорость плавнее чем в 1 варианте.
            }
        }
    }
    return 1;
}

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

Код:
forward Float:GetVehicleSpeed(playerid);
stock Float:GetVehicleSpeed(playerid)
{
    new Float:Pos[3];
    GetVehicleVelocity(GetPlayerVehicleID(playerid),Pos[0],Pos[1],Pos[2]);
    return floatsqroot(Pos[0] * Pos[0] + Pos[1] * Pos[1] + Pos[2] * Pos[2]) * 140.0;
}

Ulkiorra

Сообщения : 30
Репутация : 1
Дата регистрации : 2012-08-10

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения