Перейти к содержанию
Авторизация  
Rici

Делаем RP когда машина битая как она едит.

Рекомендуемые сообщения

Rici
Идея: Если авто игрока сломано, скрипт не даст разогнаться быстрее 50 км/ч (регулируется)
 
Реализация: Измеряется скорость по осям X и Y, если замечаем превышение скорости замедляем транспортное средство.
 
Особенности: Используется оптимизированная версия без тригонометрии чтобы сильно не нагружать процессор. В ней имеется недостаток который заключается в том что предельная скорость в направлениях СВ, ЮВ, ЮЗ, СЗ будет больше максимальной, но не более чем на 30%. Также стоит отметить что нет проверки на тип транспортного средства.
Ко всем дефайнам:
#define BE_MIN_HLS 500.00 // здоровье ниже которого машина считается сломанной
#define BE_MAX_SPD_VAR 50 // максимальная скорость, можно изменять
#define BE_MAX_SPD BE_MAX_SPD_VAR*0.005

Ко всем глобальным переменным:

new const BE_Bad_Vehs[] = {460, 464, 476, 511, 512, 513, 519, 520, 539, 553, 577, 592, 593, // planes
417, 425, 447, 465, 469, 487, 488, 497, 501, 548, 563 // heli
};
new bool: BE_Play_Check[MAX_PLAYERS];

В конец мода:

forward BadEngine();public BadEngine()
{
new veh, Float:spd[3], Float:hls;
for(new i; i != GetMaxPlayers(); i++)
{
if( !BE_Play_Check[i] ) { continue; }
veh = GetPlayerVehicleID( i );
if( !veh ) { continue; }
GetVehicleHealth( veh, hls );
if( hls > BE_MIN_HLS ) { continue; }
GetVehicleVelocity( veh, spd[0], spd[1], spd[2] );

if( floatabs(spd[0]) > floatabs(spd[1]) )
{
if( floatabs(spd[ 0 ]) > BE_MAX_SPD )
{
hls = BE_MAX_SPD / floatabs(spd[ 0 ]);
SetVehicleVelocity( veh, spd[0]*hls, spd[1]*hls, spd[2] );
}
}
else
{
if( floatabs(spd[ 1 ]) > BE_MAX_SPD )
{
hls = BE_MAX_SPD / floatabs(spd[ 1 ]);
SetVehicleVelocity( veh, spd[0]*hls, spd[1]*hls, spd[2] );
}
}
}
}

В public OnPlayerStateChange

if( newstate == PLAYER_STATE_DRIVER ){
new temp;
temp = GetVehicleModel( GetPlayerVehicleID( playerid ) );
BE_Play_Check[ playerid ] = true;
for(new i; i != sizeof( BE_Bad_Vehs ); i++ )
{
if( temp == BE_Bad_Vehs[ i ] )
{
BE_Play_Check[ playerid ] = false;
break;
}
}
}
if( oldstate == PLAYER_STATE_DRIVER )
{
BE_Play_Check[ playerid ] = false;
}

В public OnGameModeInit

SetTimer("BadEngine", 500, true);

Автор: OFFREAL

 

  • Like 3

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Red_Devils

Боюсь что с таким таймером можно создать не малые лаги на сервере.. Но все равно урок нормальный 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Rici

Боюсь что с таким таймером можно создать не малые лаги на сервере.. Но все равно урок нормальный 

Спасибо)

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.