Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Анти "Пор откл. зажигания для РП серверов"

Статус
В этой теме нельзя размещать новые ответы.

Serejka_Rich

Умник
Вроде такого не нашел, если есть, уж извиняйте. Так же критика приветствуется, ибо я только учусь, и в павно месяц.

Вообщем, перейдем к делу. Как многие знают, в собейте есть такая функция, Откл. зажигания для РП серверов, что дает игроку, возможность ездить с выключеным двигателем. Что получается, закончился бензин, или же авто сломалось, а до починки как то нужно доехать (конечно в этих счучаях возможно ТП, но все же). И так.
К Дефайнам
PHP:
#define UPDATE_ENGINE_HACK 1000 // Это время, обновления таймера, тут можете ставить какое хотите
#define WARNINGS_ENGINE_HACK 5 // Это кол-во предупреждений, после которого игрока будет кикать
#define MAX_SPEED_ENGINE_OFF 30 // Это скорость, выше которой, будут выдаваться ошибки при выключенном двигателе
new timer_engine_hack [ MAX_PLAYERS ] ;
В OnPlayerStateChange
PHP:
switch ( newstate ) // Переключатель положения игрока
    {
        case PLAYER_STATE_DRIVER: // Если игрок в авто, на водительском месте
        {
            timer_engine_hack [ playerid ] = SetTimerEx ( "AntiEngineHack", UPDATE_ENGINE_HACK, true, "i", playerid ) ; // запускаем таймер
            SetPVartInt ( playerid, "StartTimerEngineHack", 1 ) ; // потребуется нам ниже
        }
        
        case PLAYER_STATE_ONFOOT: // Если игрок пешком
        {
            if ( GetPVartInt ( playerid, "StartTimerEngineHack" ) == 1 ) // Если таймер у игрока запущен
            {
                KillTimer ( timer_engine_hack [ playerid ] ) ; // Убиваем таймер
                SetPVartInt ( playerid, "StartTimerEngineHack", 0 ) ; // Очищаем ПВарку
            }
        }
    }
Что у нас получается, когда игрок садится в авто, у него запускает таймер, в котором будет проверка, если же игрок выходит из авто, то таймер удаляется.

Теперь сама проверка.
Добавляем следующее
PHP:
forward AntiEngineHack ( playerid ) ;
public AntiEngineHack ( playerid )
{
    new engine,lights,alarm,doors,bonnet,boot,objective, vID = GetPlayerVehicleID ( playerid ) ; // узнаем ИД авто, в котором находится игрок
    GetVehicleParamsEx ( vID, engine, lights, alarm, doors, bonnet, boot, objective ) ; // Узнаем параметры авто, в котором находится игрок
    if ( engine == VEHICLE_PARAMS_UNSET || engine == VEHICLE_PARAMS_OFF && GetPlayerSpeed ( playerid ) > MAX_SPEED_ENGINE_OFF ) // Если авто заглушено, и скорость больше максимальной
    {
        SetPVarInt ( playerid, "EngineHackWarns", GetPVarInt ( playerid, "EngineHackWarns" ) + 1 ) ; // Добавляем варн
        
        if ( GetPVarInt ( playerid, "EngineHackWarns" ) > WARNINGS_ENGINE_HACK ) // Проверяем, если у игрока варнов больше максимального
        {
            SendClientMessage ( playerid, -1, "Вы кикнуты за езду на заглушенном авто!" ) ; // Уведомляем его
            Kick ( playerid ) ; // Кикаем
        }
    }
    return 1;
}
Функция определения скорости
PHP:
stock GetPlayerSpeed ( player )
{
    new Float:x, Float:y, Float:z;
    if ( IsPlayerInAnyVehicle ( player ) )
    {
        new veh = GetPlayerVehicleID ( player ) ;
        GetVehicleVelocity ( veh, x, y, z ) ;
    }
    else GetPlayerVelocity ( player, x, y, z ) ;
    return floatround ( floatsqroot ( x * x + y * y + z * z ) * 195 ); 
}


Autor YouAreScared
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу