Serejka_Rich
Умник
Вроде такого не нашел, если есть, уж извиняйте. Так же критика приветствуется, ибо я только учусь, и в павно месяц.
Вообщем, перейдем к делу. Как многие знают, в собейте есть такая функция, Откл. зажигания для РП серверов, что дает игроку, возможность ездить с выключеным двигателем. Что получается, закончился бензин, или же авто сломалось, а до починки как то нужно доехать (конечно в этих счучаях возможно ТП, но все же). И так.
К Дефайнам
В OnPlayerStateChange
Что у нас получается, когда игрок садится в авто, у него запускает таймер, в котором будет проверка, если же игрок выходит из авто, то таймер удаляется.
Теперь сама проверка.
Добавляем следующее
Функция определения скорости
Autor YouAreScared
Вообщем, перейдем к делу. Как многие знают, в собейте есть такая функция, Откл. зажигания для РП серверов, что дает игроку, возможность ездить с выключеным двигателем. Что получается, закончился бензин, или же авто сломалось, а до починки как то нужно доехать (конечно в этих счучаях возможно ТП, но все же). И так.
К Дефайнам
PHP:
#define UPDATE_ENGINE_HACK 1000 // Это время, обновления таймера, тут можете ставить какое хотите
#define WARNINGS_ENGINE_HACK 5 // Это кол-во предупреждений, после которого игрока будет кикать
#define MAX_SPEED_ENGINE_OFF 30 // Это скорость, выше которой, будут выдаваться ошибки при выключенном двигателе
new timer_engine_hack [ MAX_PLAYERS ] ;
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
